Tengo un RTC casero con DS1307 . Puse dos resistencias pullup en las líneas SDA y SCL, las conecté al Arduino 5 y 6 pines respectivamente. También proporcioné una batería de respaldo ya que leí que a veces el RTC puede bloquearse si no hay un voltaje de respaldo adecuado. El programa arduino se cuelga de la instrucción:
int err = Wire.endTransmission();
Supongo que no hay respuesta del dispositivo, así que SW espera indefinidamente. Extrañamente, si elimino las conexiones I2C, endOfTrasmission devuelve un código de error NACK (digo extrañamente porque es mejor esperar un bloqueo sin ningún dispositivo conectado). No tengo idea de qué probar, sospecho que el DS1307 está dañado por alguna prueba aventurera en el intercambio de A5-A6
datos, pero no tengo idea de cómo hacer este diagnóstico.
[Volver a publicar mi comentario como respuesta]
¿Qué sentido tendría colgar la escritura si el esclavo no ACK? No es como si pudiera volver más tarde; ha perdido su oportunidad. Lo más probable es que el DS1307 mantenga presionada la línea SCL. El maestro interpretaría esto como un "estiramiento del reloj" y podría esperar indefinidamente a que se liberara. Como dices, es posible que hayas dañado el chip o que tengas un corto en el paquete.
DoxyLover
Anindo Ghosh
Wire.endTransmission()
línea no esté donde cuelga, sino alguna línea posterior.Felice Pollano
Anindo Ghosh
Felice Pollano