Ich habe etwas recherchiert und im Internet widersprüchliche Antworten gefunden. Ich frage einen DS1307 in einer Schleife mit einem Arduino ab, dessen Ausführung etwa 20 ms dauert, also frage ich die I2C-Schnittstelle im Grunde 50 Mal in einer Sekunde ab. Beeinträchtigt dies die Zeitgenauigkeit des IC?
ZUSÄTZLICH Ich habe viele Tests durchgeführt und I2C verursachte keine Uhrdrift. Meine schlechte Genauigkeit hatte eine andere Ursache, siehe diese Frage .
Es sollte nicht. Die i2c-Timings des DS1307 werden in Mikro- und Nanosekunden gemessen. 20ms Intervalle sind dagegen nichts. Solange Sie mindestens 4,7 µs zwischen I2C-Stopp- und Startsignalen geben, sollte es Ihnen gut gehen.
Zusätzlich:
Beim Lesen oder Schreiben der Zeit- und Datumsregister werden sekundäre (Benutzer-)Puffer verwendet, um Fehler zu vermeiden, wenn die internen Register aktualisiert werden. Beim Lesen der Zeit- und Datumsregister werden die Benutzerpuffer bei jedem I2C-START mit den internen Registern synchronisiert. Aus diesen sekundären Registern werden die Zeitinformationen gelesen, während die Uhr weiterläuft. Dadurch entfällt die Notwendigkeit, die Register erneut zu lesen, falls die internen Register während eines Lesevorgangs aktualisiert werden. Die Teilerkette wird zurückgesetzt, wenn das Sekundenregister geschrieben wird. Schreibübertragungen treten bei der I2C-Bestätigung vom DS1307 auf. Sobald die Teilerkette zurückgesetzt ist, müssen die verbleibenden Zeit- und Datumsregister innerhalb einer Sekunde geschrieben werden, um Rollover-Probleme zu vermeiden.
In Anbetracht der Tatsache, dass Dallas/Maxim unten keine Mindestumfragezeit auflistet, würde dies darauf hindeuten, dass es Ihnen gut geht.
Aber eine Frage, warum es so oft abfragen?
Dies sollte nicht der Fall sein, vorausgesetzt, dass Rauschen vom I2C oder einer schlecht entkoppelten Stromversorgung den internen Oszillator oder Zähler nicht beeinflusst.
Kaz
Felice Pollano
Benutzer17592
Kaz