I2C con DS1307 se bloquea después del final de la transmisión

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-A6datos, pero no tengo idea de cómo hacer este diagnóstico.

¿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.
Comparta un bloque de código más completo, simplificado a la funcionalidad mínima deseada. Es concebible que la Wire.endTransmission()línea no esté donde cuelga, sino alguna línea posterior.
@AnindoGhosh Hice mucho seguimiento y puedo confirmar que se cuelga en endTrasmission(), es decir, cuando intenta enviar los datos.
@FelicePollano No está facilitando que las personas intenten resolver el problema al no compartir un bloque de código mínimo que otros al menos puedan intentar usar en sus propios sistemas.
@DoxyLover tienes razón: hubo un cortocircuito entre SCW y SCL kkeping, como dijiste, baja la señal del reloj. Ahora funciona como un encanto! Si quieres enviar una respuesta votaré y acepto, ¡gracias!

Respuestas (1)

[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.