Justo ahora me di cuenta de que las líneas de reloj y datos I 2 C (SDA y SCL) deben tener resistencias pullup.
Bueno, he construido un par de relojes usando el DS1307 RTC (ver hoja de datos ) de acuerdo con el siguiente esquema. Tenga en cuenta que he omitido ambas resistencias pullup.
Ambos relojes funcionan bien, uno de ellos funciona desde hace más de 3 meses. ¿Cómo es eso posible? En cualquier caso, quería saber:
¿Qué sucede cuando se omiten los pullups I 2 C?
¿Es probable que la falta de pullups dañe alguno de esos dos circuitos integrados en mi placa?
Estoy buscando respuestas que aborden mi caso específico de conectar ATmega328P a un RTC DS1307 como en los esquemas que proporcioné, pero si la pregunta no se hace demasiado amplia, sería útil saber qué sucede cuando se omiten los pullups en general , es decir, en otros escenarios de operación I 2 C.
PD. Busqué en la red para encontrar la respuesta, pero solo pude encontrar artículos sobre dimensionar los pullups.
Actualización: estoy usando Arduino IDE 1.03 y mi firmware maneja el RTC usando la lib DS1307RTC Arduino (a través de sus funciones RTC.read()
y RTC.write()
). Esa biblioteca 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 el I 2 C sin los pullups externos.
Actualización 3 (después de agregar pullups I 2 C): a continuación se muestra otra serie de tomas de alcance que tomé después de agregar resistencias pullup adecuadas (4K7) a las líneas I 2 C (en la misma placa). Los tiempos de subida cayeron de aproximadamente 5 µs a 290 ns. Yo 2 C es mucho más feliz ahora.