DS1307 RTC Debug

4

Tengo problemas para que el RTC DS1307 funcione. Estoy hablando con él a través de un Arduino, y solo estoy tratando de hacer que funcione un bosquejo de ejemplo. He probado dos bibliotecas diferentes, una de Ladyada , y una de Seeedstudios . Eléctricamente, tengo el Arduino y el RTC alimentados por 5 V, y la entrada VBAT del RTC a tierra (según la hoja de datos, ya que no estoy usando una batería durante las pruebas). Estoy construyendo usando el IDE Arduino-0022. Tengo 10k pullups 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 indican básicamente 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 esto es lo que parece:

Esa transacción exacta se repite a intervalos regulares. La traza amarilla es SCL, la traza azul es SDA. ¿Cómo interpretas ese intercambio I2C? Tengo mis propias teorías, pero estoy buscando una evaluación independiente. Dado ese rastro, ¿crees que el DS1307 está cocido? ¿Crees que es un problema de software? Otras ideas?

    
pregunta vicatcu

2 respuestas

2

Probablemente tienes la dirección del chip de destino mal. Usted está enviando 68h. O esa no es la dirección del chip o no está bien conectada. Las dos secuencias que muestra son primero una escritura y luego una lectura a esa dirección. En ambos casos, no se recibió ningún ACK, por lo que se terminó la secuencia. Verifique la hoja de datos para la dirección del chip.

Añadido:

Acabo de ver 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 sin cablear justo en el chip. Sus trazados de alcance se ven bien porque un chip correctamente cableado y en funcionamiento debería haber respondido con ACK por lo que puedo decir.

    
respondido por el Olin Lathrop
0

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

    
respondido por el Thomas

Lea otras preguntas en las etiquetas