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:
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?
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.
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.
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.
stever
Oli Glaser