Depuración de DS1307 RTC

Tengo problemas para hacer funcionar el DS1307 RTC. Estoy hablando con él a través de un Arduino, y solo estoy tratando de hacer que funcione un boceto de ejemplo. Probé dos bibliotecas diferentes: una de Ladyada y otra de Seeedstudios . Eléctricamente, tengo tanto el Arduino como el RTC alimentados por 5 V, y la entrada VBAT del RTC está conectada a tierra (según la hoja de datos, ya que no estoy usando una batería durante la prueba). Estoy construyendo usando el IDE Arduino-0022. Tengo pullups de 10k en las líneas SDA y SCL. Tradicionalmente, he usado pullups más pequeños en el bus I2C (por ejemplo, 3.3k o 4.7k), pero no creo que ese sea mi problema.

Ambas bibliotecas básicamente indican que los datos que devuelve el dispositivo son todos ceros para la fecha y la hora. Así que fui y capturé el tráfico I2C usando un osciloscopio (usando la biblioteca Seeedstudios) y así es como se ve:

ingrese la descripción de la imagen aquí

Esa transacción exacta se repite a intervalos regulares. El trazo amarillo es SCL, el trazo azul es SDA. ¿Cómo interpretas ese intercambio I2C? Tengo mis propias teorías, pero estoy buscando una evaluación independiente. Teniendo en cuenta ese rastro, ¿crees que el DS1307 está cocinado? ¿Crees que es un problema de software? ¿Otras ideas?

El DS1307 solo funcionará en el modo I2C 100KHZ, aunque parece que está barriendo a 40 µs/cm. ¿Está oscilando el oscilador de 32KHZ?
Las únicas cosas en las que puedo pensar en este momento son: 1. Los pines maestros no están configurados en alta impedancia para alto nivel. 2. El DS1307 SDA/SCL/Vdd/Vss/Xtal no está conectado correctamente. 3. Si no hay batería presente, el pin de la batería no está conectado a tierra. 4. El DS1307 está defectuoso.

Respuestas (2)

Probablemente tenga la dirección del chip de destino incorrecta. Estás enviando 68h. O esa no es la dirección del chip o no está conectado correctamente. Las dos secuencias que muestra son primero una escritura y luego una lectura en esa dirección. En ambos casos, no se recibió ACK, por lo que se terminó la secuencia. Verifique la hoja de datos para la dirección del chip.

Agregado:

Acabo de mirar en la hoja de datos y la dirección de ese chip realmente es 68h (página 12), así que ese no es el problema. Eso deja algo que no está bien conectado en el chip. Los rastros de su alcance se ven bien en el sentido de que un chip correctamente conectado y en funcionamiento debería haber respondido con ACK hasta donde puedo decir.

Sí, eso es lo que yo también pensé. DS1307 se está desnudando, ¿verdad?
@vicatcu: Más precisamente, no es ACKing. Específicamente NACKing implica una respuesta deliberada. En este caso, el chip no responde en absoluto. Obtendría la misma respuesta si el chip estuviera en un cajón y no hubiera nada conectado al bus IIC. Es por eso que debe mirar las conexiones eléctricas con mucho cuidado. Mire las señales en cada pin directamente en el chip mientras tiene la hoja de datos abierta y verifica que cada una sea correcta.

La dirección es incorrecta. La dirección es de 7 bits, que es 0x68, pero debe agregar el bit R/W. Escribir sería 0 y leer sería 1. Lo que lo convertiría en 0xD0 para escribir.

sí, ve efectivamente 0xD0 para escritura y 0xD1 para lectura. Pero eso es lo que se representa en las formas de onda de arriba. 11010000 (0xD0) y 11010001 (0xD1) respectivamente, por lo que no estoy seguro de que su respuesta sugiera que podría estar mal...