Dienstag, 1. November 2016

DS3231 Real Time Clock

In diesem Post geht es um die DS3231 Real Time Clock für den Arduino. Mittels diesem Modul kann man die Zeit "abspeichern" und ab dann laufend die aktuelle Zeit abrufen, mit nur wenigen Minuten Abweichung pro Jahr.

Hardware und Verkabelung

Der Arduino Uno kann dank seines ATmega328 Mikrocontrollers und der Time Bibliothek für den Arduino die Uhrzeit abspeichern, und laufend im Hintergrund aktualisieren. Leider ergibt sich jedoch das Problem, das aufgrund von Interrupts, unterschiedlicher Temperaturen, nicht optimaler Verarbeitung und so weiter sich innerhalb eines Tages bereits eine Abweichung von mehreren Minuten ergibt, was auch mein Wecker Projekt faktisch untauglich gemacht hat.

Die Lösung sind sogenannte Real Time Clocks (RTC), in die man einmal die aktuelle Uhrzeit einmal einspeichert (natürlich kann man sie später auch nochmal überschreiben), und welche dann selbstständig die Uhrzeit aktualisieren, und dass extrem genau.

Die wahrscheinlich beliebteste Real Time Clock ist die DS3231, welche relativ genau ist (normalerweise keine 5 Minuten Abweichung pro Jahr), da sie zusätzlich zum Quarz einen Temperatursensor hat, der die Temperatur misst und davon ausgehend die Abweichung des Quarzes ausrechnen und beheben kann. Die Temperatur kann man sich übrigens auch übertragen lassen.

Zusätzlich hat die DS3231 eine integrierte Batterie (CR 2032, welche man, sobald sie leer ist auch auswechseln kann), welche sicherstellt, dass auch bei einem Stromausfall der Versorgungsspannung die Uhrzeit nicht verloren geht.

Die DS3231 Real Time Clock (hier bei AZDelivery) kommuniziert über I2C mit dem Arduino, weshalb man nur SCL mit A5, SDA mit A4, sowie GND mit dem Ground und Vcc mit +5V verbinden muss. Die beiden anderen Kontakte sind für dieses Beispiel nicht notwendig.


Arduino Sketch

Da die DS3231 RTC so beliebt ist, gibt es bereits verschiedene Bibliotheken für den Arduino, die die Anwendung sehr einfach gestalten. Ich verwende die DS3231 Bibliothek, welche man hier herunterladen kann. Nachdem man die .zip Datei entpackt, und ihren Inhalt in libraries des Arduino Ordners verschoben hat, kann man die Arduino IDE starten und die Bibliothek benutzen.

Praktischerweise gibt es bereits einen fertigen Beispielsketch, in dem man nur noch die aktuelle Uhrzeit eintragen muss (siehe Kommentare im Sketch), und der dann nach einem Upload auf den Arduino über die serielle Schnittstelle (Achtung: Baudrate 115200!) die aktuelle Uhrzeit ausgibt (Datei > Beispiele > DS3231 > Arduino > DS3231_Serial_Easy).

Auch ein fertiger Sketch zum Ausgeben der Temperatur auf der seriellen Konsole ist abrufbar, wobei die Abweichung vom Chip Hersteller mit +/- 3°C angegeben ist. Bei mir war die Temperatur verglichen mit meiner Wetterstation jedoch nur 1°C zu hoch.

Keine Kommentare:

Kommentar veröffentlichen