Gerade wurde mir klar, dass die I 2 C-Daten- und Taktleitungen (SDA und SCL) Pullup-Widerstände aufweisen müssen.
Nun, ich habe mit dem DS1307 RTC (siehe Datenblatt ) ein paar Uhren nach dem untenstehenden Schema gebaut. Beachten Sie, dass ich beide Pullup-Widerstände weggelassen habe.
Beide Uhren funktionieren einwandfrei, eine von ihnen arbeitet seit mehr als 3 Monaten. Wie ist das möglich? Auf jeden Fall wollte ich wissen:
Was passiert, wenn die I 2 C-Klimmzüge weggelassen werden?
Kann das Fehlen von Pullups einen dieser beiden ICs in meinem Board beschädigen?
Ich habe nach Antworten gesucht, die meinen speziellen Fall des Anschlusses des ATmega328P an einen DS1307 RTC behandeln, wie in den von mir bereitgestellten Schaltplänen dargestellt, aber wenn die Frage nicht zu weit geht, wäre es hilfreich zu wissen, was passiert, wenn die Pullups im Allgemeinen weggelassen werden dh in anderen Szenarien des I 2 C-Betriebs.
PS. Ich habe das Netz durchsucht, um die Antwort zu finden, konnte aber nur Artikel über die Dimensionierung der Klimmzüge finden.
Update: Ich verwende Arduino IDE 1.03 und meine Firmware verarbeitet die RTC mithilfe der DS1307RTC Arduino lib (über ihre Funktionen RTC.read()
und RTC.write()
). Diese Bibliothek verwendet ihrerseits, Wire.h
um mit der RTC zu sprechen.
Update 2: Im Folgenden finden Sie eine Reihe von Scope-Aufnahmen, die ich gemacht habe, um zu erläutern, wie die I 2 C ohne die externen Pullups funktioniert.
Update 3 (nach dem Hinzufügen von I 2 C-Pullups): Nachfolgend finden Sie eine weitere Reihe von Scope-Aufnahmen, die ich gemacht habe, nachdem ich den I 2 C-Leitungen (auf derselben Platine) geeignete (4K7) Pullup-Widerstände hinzugefügt habe . Die Anstiegszeiten sanken von ca. 5 µs auf 290 ns. I 2 C ist jetzt viel glücklicher.