zurück zum Artikel

Dixie-Uhr: Jetzt mit Echtzeituhr

Matthias Helneder
Fünf kleine Glaskuppeln stehen auf einer Holzleiste. In den Kuppeln sind jeweils TFT-Displays, drei sind an und zeigen: R T C.

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.

Mit Drahtgittern und transparenten Kuppeln erinnert meine "Dixie-Uhr" [1] 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
Ein blaues Board mit Steckleiste und aufgelöteten Bauteilen.

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 €) [6] 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

Mehr von Make Mehr von Make [7]

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).

Schaltplan der Dixie-Uhr.

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 (0 Bilder) [8]

[9]

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 [10] verwendet. Diese Library muss dafür über die Bibliotheksverwaltung installiert [11] 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.

Screenshot des seriellen Monitors der Arduino IDE: Zeitausgabe, die jeweils fünf Sekunden hochgezählt wird.

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.

Screenshot des seriellen Monitors der Arduino IDE: Senden des Zeitstempels "T002612702102021" über die Eingabezeile.

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.

Screenshot des seriellen Monitors der Arduino IDE: Einige Zeilen Hochzählen der Zeit ab 1900,01,01 01:23:03, dann "OK", dann Hochzählen der Zeit ab 2021,10,02 12:26:03.

Korrekte Übernahme des Zeitstempels

Nach der Einstellung kann meine neue Software (DixieClock_V2_RTC [12]) 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 [13])


URL dieses Artikels:
https://www.heise.de/-6525364

Links in diesem Artikel:
[1] https://www.heise.de/ratgeber/Bastelprojekt-Digitaluhr-mit-TFT-Displays-im-Stil-von-Nixie-Roehren-4937026.html
[2] https://shop.heise.de/katalog/make-05-2020?wt_mc=intern.shop.shop.ch2005.dos1.textlink.textlink
[3] https://shop.heise.de/katalog/make-05-2020-pdf?wt_mc=intern.shop.shop.ch2005.dosd1.textlink.textlink
[4] https://www.heise.de/select/make/2020/5
[5] https://www.mykiosk.com/suche/23141/make-
[6] https://www.heise.de/preisvergleich/eu/arduino-nano-3-x-a000005-verschiedene-hersteller-a1492515.html?cs_id=1206858352&ccpid=hocid-hardware_hacks
[7] https://www.heise.de/make/
[8] https://www.heise.de/bilderstrecke/bilderstrecke_6526385.html?back=6525364;back=6525364
[9] https://www.heise.de/bilderstrecke/bilderstrecke_6526385.html?back=6525364;back=6525364
[10] https://www.arduino.cc/reference/en/libraries/ds3231fs/
[11] https://www.heise.de/ratgeber/OLED-Displays-Arduino-Bibliotheken-verwalten-und-anpassen-3643786.html
[12] https://github.com/MakeMagazinDE/Dixie-Roehre/tree/master/DixieClock_V2_RTC
[13] mailto:hch@make-magazin.de