Estoy usando I2C y anteriormente publiqué dudas sobre I2C aquí. Estoy usando controladores PIC y usando su compilador C18. Usé sus bibliotecas para crear una función para escribir datos en EEPROM a través de I2C, y cuando verifiqué las líneas SCL, fluctuaron.
Creé una función para escribir en EEPROM, pero me perdí los retrasos, ya que 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 se queda en 100kHz y fluctúa entre 54kHz y 100kHz pero nunca más allá. ¿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?
¿Puede ser esa la causa del problema?
¿Debo poner un retraso después de la función EEByteWrite para compensar?
Nota: el SCL se vuelve algo estable después de que la tasa de baudios se reduce a 20kHz y luego fluctúa entre 17kHz y 19kHz. Sería muy feliz si descubriera alguna causa razonable para solucionar este problema ... o cualquier sugerencia valiosa será bienvenida de todo corazón.
En I2C, el reloj solo cambia según sea necesario para transmitir o recibir datos. No hay necesidad de una señal de reloj continua, por lo que se debe esperar una variación en la frecuencia observada. La especificación de 100 kHz es la frecuencia de reloj máxima en lugar de la frecuencia de reloj promedio o continua.
Las memorias no volátiles como Flash y EEPROM necesitan un período de tiempo relativamente largo para escribir datos en la memoria, y 5 ms suena bien. No debe intentar ejecutar varias operaciones de escritura sin permitir este retraso entre ellas. Debido a esto, posiblemente no pueda ejecutar más de 200 operaciones de escritura por segundo y permitir 5 ms por operación.
Una vez que tenga todo funcionando correctamente, debe esperar ver una ráfaga de pulsos de reloj de 100 kHz cada 5 ms aproximadamente.
PedroJ
Novato91
PedroJ
Novato91
Juan U.
scott seidman