Arduinoprojekte benötigen oft das genaue Datum und die genaue Uhrzeit. Der Arduino hat zwar einen internen Timer, den man aber nicht wirklich gut für solche Zwecke verwenden kann. Als Alternativen gibt es Uhrenmodule (RTC - DS1302 oder DS3231), die aber oft auch nur mehr schlecht als recht funktionieren. Das DS3231 ist zwar schon sehr genau, weil es Schwankungen der Quarzfrequenz durch eine Temperaturmessung kompensiert, beim DS1302 hat man mit größeren Abweichungen zu kämpfen, hauptsächlich, wenn diese häufig abfragt werden. Besonders unangenehm ist es, wenn diese Module ihre Zeit komplett vergessen oder mit der Zeit komplett falsch gehen. Nicht zu vergessen die im Moment noch aktuellen Zeitumstellungen. Eine weitere Alternative ist die Uhrzeit aus dem GPS-Signal zu ziehen, dazu gibt des den Bericht Arduino - Zeitabgleich mit GPS-Modul
Für einen regelmäßigen Zeitabgleich eignen sich DCF77-Module, d.h., dass im normalen Programmablauf die Zeit aus einem RTC-Modul gezogen, dieses aber in gewissen Zeitabständen mit der "Atomuhr" synchronisiert wird. Normalerweise kommt es nicht auf ein paar Sekunden Abweichung an, sollte die Abweichung aber größer werden, sollte schon eine Korrektur erfolgen. Eine manuelle Korrektur erfordert leider einigen Umstand, sei es, dass man das RCF-Modul abklemmt und an einem zweiten Arduino neu stellt, oder indem man irgendeine Routine implementiert, bei der man mit Tastern umständlich neu hantiert.
Für meine Zwecke habe ich ein ELV Modul gekauft, das bereits einen belastbaren Ausgang bietet (open collector) und mit Spannungen zwischen 12,V und 15V betrieben werden kann.
Die Beschaltung gestaltete sich entsprechend einfach, weil ich zusätzlich nur einen 10 kiloOhm Widerstand von +5V auf den Signalpin legen musste. Erwähnenswert ist dabei, dass das Signal durch diese Schaltung invertiert wird. Das ist wichtig, wenn man den Pin mit einem Arduinoprogramm auswertet. Es gibt eine Vielzahl Librarys, die einem die Arbeit erleichtern, man muß bei meinem speziellen Modul dem Programm allerdings bei der Initialisierung mitteilen, dass das Signal invertiert ist. Dazu setzt man einfach einen zusätzlichen Parameter, aber dazu später mehr.
Für den Fall, dass ein Quellcode aus diesem Thema verwendet wird und der Compiler Fehler meldet, empfehle ich hier mal reinzugucken:
Fehlermeldungen wegen unterschiedlicher Softwarestände der Libs oder Arduino GUIs
Für einen regelmäßigen Zeitabgleich eignen sich DCF77-Module, d.h., dass im normalen Programmablauf die Zeit aus einem RTC-Modul gezogen, dieses aber in gewissen Zeitabständen mit der "Atomuhr" synchronisiert wird. Normalerweise kommt es nicht auf ein paar Sekunden Abweichung an, sollte die Abweichung aber größer werden, sollte schon eine Korrektur erfolgen. Eine manuelle Korrektur erfordert leider einigen Umstand, sei es, dass man das RCF-Modul abklemmt und an einem zweiten Arduino neu stellt, oder indem man irgendeine Routine implementiert, bei der man mit Tastern umständlich neu hantiert.
Für meine Zwecke habe ich ein ELV Modul gekauft, das bereits einen belastbaren Ausgang bietet (open collector) und mit Spannungen zwischen 12,V und 15V betrieben werden kann.
Die Beschaltung gestaltete sich entsprechend einfach, weil ich zusätzlich nur einen 10 kiloOhm Widerstand von +5V auf den Signalpin legen musste. Erwähnenswert ist dabei, dass das Signal durch diese Schaltung invertiert wird. Das ist wichtig, wenn man den Pin mit einem Arduinoprogramm auswertet. Es gibt eine Vielzahl Librarys, die einem die Arbeit erleichtern, man muß bei meinem speziellen Modul dem Programm allerdings bei der Initialisierung mitteilen, dass das Signal invertiert ist. Dazu setzt man einfach einen zusätzlichen Parameter, aber dazu später mehr.
Für den Fall, dass ein Quellcode aus diesem Thema verwendet wird und der Compiler Fehler meldet, empfehle ich hier mal reinzugucken:
Fehlermeldungen wegen unterschiedlicher Softwarestände der Libs oder Arduino GUIs
Zuletzt bearbeitet: