Estoy utilizando I2C y anteriormente he publicado dudas sobre I2C aquí. Estoy usando controladores PIC y usando su compilador C18. Utilicé sus bibliotecas para construir una función para escribir datos en EEPROM a través de I2C, y cuando verifiqué las líneas SCL fluctuaban.
He creado una función para escribir en EEPROM, pero he perdido los retrasos porque la hoja de datos dice "se requiere un retraso mínimo de 5 ms para cada operación de escritura en I2C".
Confío en que está causando los problemas. El problema es que SCL no permanece a 100 kHz y fluctúa entre 54 kHz y 100 kHz, pero nunca más allá de eso. ¿Se debe a que el byte de control, la dirección y los datos se envían a lo largo de la función?
float ee_write_float(unsigned char ee_addr, float f)
{
void i2c_init(); //initialize I2c
unsigned char *p = (unsigned char *)&f;
unsigned char i;
for (i = sizeof f; i != 0; --i)
{
EEByteWrite(EE_I2C_ADDR, ee_addr++, *p++);
}
}
¿Qué tan importante es el dela para las operaciones de escritura I2C?
¿Podría ser la causa del problema?
¿Debo poner un retraso después de la función EEByteWrite para compensar?
Observado: el SCL se vuelve algo estable después de que la velocidad de transmisión se reduce a 20 kHz luego fluctúa entre 17kHz y 19kHz. Me encantaría que descubriera alguna causa razonable para solucionar este problema ... o cualquier sugerencia valiosa será bienvenida de todo corazón.