Seit meinem Experiment mit der Echtzeituhr des Raspberry Pi 5 überlege ich, auch einen Raspberry Pi 4 ähnlich auszustatten. Das will ich jetzt mit dem DS3231 Modul von AZDelivery tun.
Material
Folgendes Material benötigst du, wenn du dies nachvollziehen möchtest
- Raspberry Pi 4B mit Raspberry Pi OS
- DS3231 Modul von AZDelivery oder ähnliches
- entweder vier Jumperkabel male-female mit Breadboard
- oder vier Jumperkabel female-female ohne Breadboard
Du kannst theoretisch die Jumperkabel direkt auf die Pins des Breakoutboard stecken, ich entscheide mich aber für die Lösung mit Breadboard.
Das DS3231 Modul
Das DS3231 Modul von AZDelivery kommt auf einem Breakoutboard mit sechs Anschlusspins. Es unterstützt I²C. Auf der einen Seite der Platine sitzen der DS3231 Uhrenchip, ein Temperaturchip sowie die Elektronik für den I²C Bus.
Die gegenüberliegende Seite wird von der CR3220 Batterie dominiert, die die Uhr kontinuierlich mit Strom versorgt.
Laut Datenblatt benötigt das Modul 1mA Strom und benötigt 3,3V Spannung.
Aufbau
Ich nehme einen älteren Raspberry Pi 4B mit Raspberry Pi OS 5, baue ihn aus seinem Gehäuse aus, um besser an die GPIO Leisten heranzukommen, dann rüste ich ihn noch mit einem farbcodierten Stacking-Header aus. Da der Raspi keine schwere Rechenlast zu bewältigen hat, reichen ein paar aufgeklebte Kühlkörper völlig aus.
Die grundsätzliche Verkabelung unterscheidet sich wenig von anderen Geräten für den I²C.
Wenn du alles korrekt verbunden hast, wirst du mit einer roter Power LED auf dem Modul belohnt.
Konfiguration
Als erstes musst du den I²C Bus des Raspberry Pi einschalten.
sudo raspi-config
Unter dem Menüpunkt Interface Options >> I2C beantwortest du die Frage, ob du I²C einschalten möchtest, mit „Ja“. Dann den Pi einmal Neustarten, dass war’s damit schon.
Hinweis: Auf einigen altern Webseiten findest du immer noch den Hinweis, dass du für das RTC-Modul irgendwelche Kernelmodule manuell einbinden musst. Dies ist aber spätestens seit 2021 veraltet, da Raspberry Pi OS dies automatisch erledigt.
,
Dann solltest du die i2-tools installieren. Das ist nicht unbedingt notwendig, aber sehr nützlich.
sudo apt install i2-tools -y
In der Datei /boot/config.txt bzw. /boot/firmware/config.txt muss jetzt das RTC-Modul bekannt gemacht werden. Daher musst du noch folgende Zeile ergänzen.
dtoverlay=i2c-rtc,ds3231
Dies kannst du am Ende der Datei einfügen oder, wie ich innerhalb des [pi4]
Blocks.
Jetzt noch der obligatorische sudo reboot
und das Modul ist benutzbar. Mit dem Kommando timedatectl kannst du feststellen, dass die Echtzeituhr vom System gesetzt wurde.
Sollte das Modul nicht korrekt arbeiten stände dann ein n/a
(für not available) da. Nochmal mein Hinweis: Die RTC speichert Datum und Uhrzeit in der UTC (Universal Time Coordinated)und weicht während der Sommerzeit um 2 Stunden von der Mitteleuropäischen Sommerzeit (CEST) ab.
I²C Adresse einstellen
Zum Einstellen der Adresse am I²C Bus existiert ein Jumperfeld auf der Platine.
Die Jumper A0 bis A2 sind hier nicht als Pins herausgeführt, sondern müssen zum Setzen mit einem Tropfen Lötzinn miteinander verbunden werden.
Die Jumper sind mit einem Binärcode belegt, die Adresse ergibt sich aus folgender Tabelle
A0 | A1 | A2 | Adresse |
---|---|---|---|
0 | 0 | 0 | 0x57 |
0 | 0 | 1 | 0x53 |
0 | 1 | 1 | 0x51 |
0 | 1 | 0 | 0x55 |
1 | 1 | 0 | 0x54 |
1 | 0 | 0 | 0x56 |
1 | 0 | 1 | 0x52 |
1 | 1 | 1 | 0x50 |
DS3231 Jumperfeld Belegung
1 bedeutet, der Jumper ist geschlossen, 0= geöffnet.
Achtung: Ich habe dies nicht selber ausprobiert sondern im Netz gefunden. Daher sind die Angaben ohne Gewähr!
Ladeelektronik
Das RTC-Modul ist mit einer Ladeelektronik für LIR3220 Akkus bestückt, wird aber mit einer nicht aufladbaren CR2032 Batterie ausgeliefert. Da die Ladeelektronik trotzdem versuchen wird, die Batterie zu laden, besteht hier die Gefahr, dass sich die Knopfzelle über kurz oder lang aufblähen und platzen wird. Dies birgt die Gefahr, dass dabei das DS3231 Modul beschädigt wird. Deshalb solltest du entweder eine aufladbare Knopfzelle einbauen oder den Widerstand 102 neben dem oberen SCL Anschluss entfernen. Dies legt die Ladeelektronik lahm. Ich habe den Widerstand einfach mit einem Seitenschneider durchgeknipst. Kritisch sehe ich, dass dieser Umstand scheinbar nirgends in der offiziellen Dokumentation erwähnt wird.
Temperatursensor
Das DS3231 Board enthält auch noch einen Temperaturchip, vermutlich vom Typ BME280, zu dem ich allerdings aufgrund verschiedener Probleme keinen Zugang bekommen konnte.
Fazit
Wenn du eine Echtzeituhr am Raspberry Pi benötigst, musst du nicht unbedingt einen 5er kaufen,mit dem DS3231 kommst du sehr viel preiswerter davon.