Ahora mismo me di cuenta de que los datos I 2 C y las líneas de reloj (SDA y SCL) deben tener resistencias pullup.
Bueno, he construido un par de relojes con el DS1307 RTC (consulte hoja de datos ) de acuerdo con al esquema de abajo. Tenga en cuenta que he omitido ambas resistencias pullup.
Ambosrelojesfuncionanbien,unodeellosfuncionadesdehacemásde3meses.¿Cómoesesoposible?Encualquiercaso,queríasaber:
¿QuésucedecuandoseomitenlospullupsI2C?
¿Esprobablequelafaltadedetonacionesdañealgunodeesosdoscircuitosintegradosenmitablero?
EstoybuscandorespuestasqueabordenmicasoespecíficodeconexióndeATmega328PaunRTCDS1307comoenlosesquemasqueproporcioné,perosilapreguntanoesdemasiadoamplia,seríaútilsaberquésucedecuandosehacenlasdetenciones.seomiteengeneral,esdecir,enotrosescenariosdelaoperaciónI2C
.PS.Busquéenlaredparaencontrarlarespuesta,perosolopudeencontrarartículossobrecómodimensionarlospullups.
Actualización:EstoyusandoArduinoIDE1.03ymifirmwaremanejaelRTCusandoelRTC.read()
y RTC.write()
). Esa lib a su vez usa Wire.h
para hablar con el RTC.
Actualización 2: A continuación hay una serie de tomas de alcance que tomé para ayudar a explicar cómo funciona la I 2 C sin los controles externos.
Actualización 3 (después de que I 2 C pullups agregado): A continuación hay otra serie de tomas de alcance que tomé después de agregar las resistencias de pullup adecuadas (4K7) a las I 2 C líneas (en el mismo tablero). Los tiempos de subida disminuyeron de aproximadamente 5 µs a 290 ns. I 2 C es mucho más feliz ahora.