Dixie-Uhr: Jetzt mit Echtzeituhr

Damit die Zeit nach dem Einschalten der Dixie-Uhr nicht immer eingestellt werden muss, bauen wir eine Real-Time-Clock ein und verbessern sogar die Genauigkeit.

In Pocket speichern vorlesen Druckansicht
Fünf kleine Glaskuppeln stehen auf einer Holzleiste. In den Kuppeln sind jeweils TFT-Displays, drei sind an und zeigen: R T C.
Lesezeit: 4 Min.
Von
  • Matthias Helneder
Inhaltsverzeichnis

Mit Drahtgittern und transparenten Kuppeln erinnert meine "Dixie-Uhr" an die klassischen Nixie-Röhren, zeigt die Zeit aber mit kleinen TFT-Displays an. Allerdings müssen Zeit und Datum immer neu eingestellt werden, wenn der Strom mal weg war. Daher habe ich sie nach einer Weile mit einer Real-Time-Clock erweitert. Diese Echtzeituhr wird beim beim Abschalten oder Ausfall der Versorgungsspannung über eine Batterie weiter versorgt und behält so die Uhrzeit bei.

Make 5/20

Arduino RTC-Shield mit DS3231-Echtzeituhr

Meine Wahl fiel auf ein Modul mit einer 3-Volt-Knopfzelle und dem Baustein DS3231. Dieser hat einen integrierten, temperaturkompensierten Quarzoszillator (TCXO) und die Kommunikation erfolgt über I²C (Inter-Integrated Circuit). Dabei handelt es sich um ein Bus-System nach dem Controller und Target-Prinzip. Der Datentransfer wird immer durch den Controller gestartet, meist einen Mikrocontroller. Über eine Adresse wird das Target angesprochen und der Datenaustausch beginnt. Außer einer Uhr können dies zum Beispiel Sensoren oder weitere Mikrocontroller sein. Ist der Austausch erledigt, beendet der Controller den Transfer, der Bus ist wieder freigegeben und das ganze kann von neuem beginnen. Der I²C-Bus funktioniert mit zwei Signalleitungen, diese sind beim Arduino Nano (ab 7,50 €) an den folgenden Pins.

SCL (Serial Clock): Takt, vom Controller zur Synchronisation ausgegeben – Pin A5
SDA (Serial Data): Datenleitung, bidirektional zwischen Controller und Target – Pin A4

Um das RTC-Shield in die Hardware der Dixie-Uhr zu integrieren ist lediglich ein minimal invasiver Eingriff mit dem Lötkolben notwendig. Bisher waren an Pins A5 und A4 die Taster 2 und 3 angeschlossen. Da die Uhrzeit fortan nicht mehr manuell eingestellt werden muss, können die Taster samt Widerständen und Kondensator zur Entprellung einfach entfernt werden (im Schaltplan rot markiert). Der übrige Taster 1 ist auch nicht mehr notwendig, da er aber für eventuelle zukünftige Erweiterungen von Nutzen sein könnte, bleibt er bestehen. Neu hinzugekommen ist alleine das RTC-Shield (grün markiert).

Angepasster Schaltplan für die RTC Erweiterung (Änderungen rot und grün markiert)

Um die Taster 2 und 3 zu aus der Schaltung zu nehmen, reicht es, die zwei Drahtbrücken auf der Oberseite der Platine auszulöten bzw. je nach Umsetzung die Leiterbahnen zum Arduino aufzutrennen. Die Verbindung zwischen Nano-Board und RTC-Shield erfolgt über vier kurze Kupferlitzen. Ich habe sie ganz pragmatisch auf der Platinenunterseite an die Pins des Arduinos gelötet.

RTC-Modul Arduino Litzenfarbe
GND GND schwarz
VCC 5V rot
SDA A4 grau
SCL A5 grün

Dixie-Uhr mit RTC-Modul (3 Bilder)

Umgebaute Platinenoberseite mit farbigen Litzen (grau, grün, rot, schwarz) zur Verbindung mit dem RTC-Shield

Bevor die neue Software in die umgebaute Hardware geladen wird, muss zunächst das aktuelle Datum sowie die Uhrzeit im RTC-Modul eingestellt werden. Dieser Vorgang ist nur einmalig notwendig. Ich habe den Beispielsketch interactive aus der Arduino-Library ds3231FS verwendet. Diese Library muss dafür über die Bibliotheksverwaltung installiert werden und wird auch im Anschluss zum Kompilieren der neuen Software benötigt. Nach dem Aufspielen von interactive auf den Arduino muss man den seriellen Monitor der Arduino IDE öffnen. Hier wird das aktuell eingestellte Datum sowie die Uhrzeit ausgegeben. Die Zeit läuft dabei von 00:00 Uhr am 01.01.1900 los, sobald eine Knopfzelle in das RTC-Modul eingelegt wurde.

Ausgabe der RTC Daten im seriellen Monitor (Sketch interactive)

Nun senden wir die aktuelle Zeit über den seriellen Monitor an den Arduino. Der Zeitstempel muss wie folgt aufgebaut sein: TssmmhhWDDMMYYYY.

Abkürzung Inhalt
T Beginnt den Zeitstempel
ss Sekunden
mm Minuten
hh Stunden
W Wochentag als 1 bis 7: Sonntag = 1, Montag = 2, …
DD Tag
MM Monat
YYYY Jahr

Ich habe die Uhr am Samstag, den 2. Oktober 2021, um 12:26:00 Uhr eingestellt, dies ergibt als Zeitstempel: T002612702102021.

Senden des Zeitstempels

Um die Zeit möglichst genau zu setzen, habe ich die Sekunden als 00 und die Uhrzeit als die nächste volle Minute genommen. Mittels einer Funkuhr kann der Zeitstempel so ziemlich genau beim Minutenwechsel an das Modul gesendet werden. Hat die Einstellung geklappt, sollte die Zeit im Monitor jetzt synchron mit der der Funkuhr sein. Andernfalls kann man den Zeitstempel erneut senden.

Korrekte Übernahme des Zeitstempels

Nach der Einstellung kann meine neue Software (DixieClock_V2_RTC) in den Arduino geladen werden. Ist das Hochladen erfolgreich, wird gleich nach dem Initialisieren der Displays die aktuelle Zeit angezeigt. Sie wird nun zyklisch alle 500 Millisekunden von der Echtzeituhr gelesen und muss nicht mehr nach dem Einschalten manuell eingestellt werden. Dank der Knopfzelle läuft die Zeit auch im stromlosen Zustand der Dixie-Uhr weiter und ist sofort nach erneutem Einschalten verfügbar. Dank des Quarzoszillators läuft sie jetzt außerdem genauer als zuvor. (hch)