Proprio ora mi sono reso conto che i dati I 2 C e le linee di clock (SDA e SCL) devono avere resistori pullup.
Bene, ho costruito un paio di orologi usando il DS1307 RTC (vedi scheda tecnica ) secondo lo schema seguente. Si noti che ho omesso entrambi i resistori pullup.
Entrambi gli orologi funzionano bene, uno di questi funziona da più di 3 mesi. Come è possibile? In ogni caso, volevo sapere:
Cosa succede quando si omettono i pullup I 2 C?
È probabile che la mancanza di pullup danneggi qualcuno di quei due circuiti integrati nella mia scheda?
Sto cercando risposte che affrontino il mio caso specifico di connessione di ATmega328P a un DS1307 RTC come negli schemi che ho fornito, ma se la domanda non diventa troppo ampia, sarebbe utile sapere cosa succede quando i pullup vengono omessi in generale , cioè in altri scenari di operazione I 2 C.
PS. Ho cercato in rete per trovare la risposta, ma sono riuscito a trovare articoli sul dimensionamento dei pullup.
Aggiornamento: sto usando Arduino IDE 1.03 e il mio firmware gestisce l'RTC utilizzando la libreria Arduino DS1307RTC (tramite le sue funzioni RTC.read()
e RTC.write()
). Quella lib a sua volta usa Wire.h
per parlare con RTC.
Aggiornamento 2: Di seguito sono riportate una serie di riprese dell'oscilloscopio che ho scattato per spiegare come funziona l'I 2 C senza i pullup esterni.
Aggiornamento 3 (dopo l' aggiunta dei pullup I 2 C): Di seguito è un'altra serie di scatti dell'oscilloscopio che ho fatto dopo aver aggiunto le resistenze pullup (4K7) appropriate alle linee I 2 C (sulla stessa scheda). I tempi di salita sono scesi da circa 5 µs a 290 ns. I 2 C è molto più felice ora.