DS3231 Echtzeituhr am Raspberry Pi 4

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.

DS3231 Modul
Olli Graf - raspithek.de
chipseite-3Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
DS3231 Modul

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.

Olli Graf - raspithek.de
ds3231-rpi4-1Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
DS3231 Schaltungsaufbau

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.

Dialog zum Einschalten des I²C Bus von raspi-config
Olli Graf - raspithek.de
enable-i2cCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Dialog zum Einschalten des I²C Bus von raspi-config

,

Dann solltest du die i2-tools installieren. Das ist nicht unbedingt notwendig, aber sehr nützlich.

fertig verkabelt und lauffähig
Olli Graf - raspithek.de
up-and-running-1Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
fertig verkabelt und lauffähig
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.

config.txt mit dem dtoverlay
Olli Graf - raspithek.de
config-txtCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
config.txt mit dem dtoverlay

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.

timedatectl zeigt ein Datum und eine Zeit bei RTC time:
Olli Graf - raspithek.de
wired-and-configedCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
timedatectl zeigt ein Datum und eine Zeit bei RTC time:

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.

Olli Graf - raspithek.de
jumperfeldCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=

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

A0A1A2Adresse
0000x57
0010x53
0110x51
0100x55
1100x54
1000x56
1010x52
1110x50

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

Widerstand 102 der Ladeelektronik
Olli Graf - raspithek.de
chargeCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Widerstand 102 der 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.

Widerstand 102 ist durchtrennt
Olli Graf - raspithek.de
201-cut-detailCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Widerstand 102 ist durchtrennt

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.

Schreibe einen Kommentar

Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Olli Graf - raspithek.de
WordPress Cookie Hinweis von Real Cookie Banner