Home > Tutorials > RTC DS1307 Modul am Raspberry Pi – Die richtige Uhrzeit ohne Internet

RTC DS1307 Modul am Raspberry Pi – Die richtige Uhrzeit ohne Internet

Normalerweise wird beim Raspberry Pi die aktuelle Uhrzeit über das Internet mit einem Zeit-Dienst (Network Time Protokoll) synchronisiert. Wenn jedoch kein Internet zur Verfügung steht und der RasPi dennoch die aktuelle Uhrzeit benötigt, kann ein Modul mit Echt-Zeit-Uhr (Real Time Clock) verwendet werden. Die günstigen RTC-Module haben einen eigenen Quarz, der den Takt der Uhr vorgibt, und eine kleine Knopfzelle die den Baustein mit Strom versorg, dadurch läuft dieses Modul und somit auch die Uhrzeit weiter, auch wenn der Raspberry Pi ausgeschaltet ist.

Update:
Wer gerne mal in die GPS Projekte reinschnüffeln möchte kann auch via GPS-Empfänger die aktuelle Uhrzeit auf seinem Raspberry Pi einstellen

DS1307 -2  DS1307

 Benötigte Hardware

Die DS1307 Module gehen alle Bauart bedingt leider immer einige Sekunden vor / nach (Temperaturabhängig), wer eine Sekunden genaue Uhrzeiten benötigt sollte sich lieber nach den teuren DS3231-Modulen umsehen, wobei eine RTC für über 10€ bei einer 40€ Hardware genau überlegt sein sollte. Alternativ gibt es auch DCF77 Funkmodule für die Uhrzeit aus Frankfurt, diese sind aber ähnlich teuer und als fertige USB Devices unbezahlbar.

Das RTC Modul verkabeln

Damit das Modul mit dem Raspberry Pi funktioniert müssen zwei Widerstände (R2 und R3) entfernt werden, diese müssen mit Hilfe eines Lötkolbens entlötet werden. Wer die Kabel nicht direkt anschließen oder anlöten möchte kann dann noch eine zusätzliche Stiftleiste an P1 verlöten. Mit einer Stiftleiste kann das Modul zum Beispiel auf einem Breadboard benutzt, oder anhand von Jumper Kabeln recht einfach mit dem Raspberry OPi verbunden werden. Die Widerstände müssen zwingend entfernt werden, andernfalls kann euer RasPi beschädigt werden.

RTC-Resistors

Nun können wir das RTC-Modul an den abgeschalteten Raspberry Pi anschließen. Verwendet hierzu P1 am Modul. Gerne könnt ihr auch mein GPIO Worksheet verwenden.

Hier noch mal grafisch dargestellt für die unter euch die nicht wissen wie die GPIO-Pinbelegung am RasPi ist.
RasPi-GPIO-RTC

RTC am Raspberry Pi einrichten

Als erstes aktualisieren wir wie immer das System mit folgenden Befehlen und installieren dann das Paket “i2c-tools”.

Nun aktivieren wir die I²C Schnittstelle durch das editieren der Datei “raspi-blacklist.conf” mit dem Editor Nano

Die benötigten Module stehen im Standard auf der “Backlist” da viele diese nicht benötigen, um Sie von der schwarzen Liste zu entfernen fügen wir jeweils vor “blacklist spi-bcm2708” und “blacklist i2c-bcm2708” eine Raute ein. Das bewirkt dass das System die Zeilen als Kommentar wertet und die Module nicht mehr auf der Blacklist stehen. Ihr könnt die beiden Zeilen aber auch komplett löschen.

Da wir die beiden genannten und weitere Module natürlich für den Betrieb der Uhr benötigen und bei jedem Start des Raspberry Pi laden möchten editieren wir die Datei “/etc/modules” wieder mit Nano.

Wir fügen die Module einfach in der Datei ans Ende der Datei an.

Um die Module zu aktivieren müssen wir den Raspberry Pi ein mal neu starten (sudo reboot).

Real Time Clock Testen

Als nächstes können wir testen ob die RTC nach dem Laden der benötigten Module am i2c Bus angezeigt wird. Das erledigen wir mit folgendem Befehl.

Die Ausgabe sieht so aus, die Uhr wurde also unter der Adresse 68 gefunden und der Speicherchip für die Uhrzeit unter der Adresse 50. Solltet ihr hier keine Ausgabe erhalten überprüft eure Verkabelung.

Wenn das funktioniert hat können wir uns die Sekunden, Minuten und Stunden wie folgt anzeigen, die Befehle müssen allerdings als root ausgeführt werden (sudo bash). Die Ausgabe ist Hexadezimal und kann z.B. mit dem Windows Calculator im Wissenschaftlichen Modus in Dezimal umgerechnet werden. Alternativ verwendet einen Umrechner im Web. Bei mir sind ist es: 23 Sekunden, 55Minuten und  21Stunden

Uhr einrichten

Jetzt können wir die Uhr ins System einbinden und mit hwclock testen, auch das müssen wir als root erledigen

Die Ausgabe der Zeit in einem für uns lesbaren Format erledigt das Tool “hwclock” für uns.

Da es kein Funkmodul ist wird wird die Ausgabe der Zeit das erste mal falsch sein (Januar im Jahr 2000), daher müssen wir erstmal die aktuelle Systemzeit in das Modul schreiben.

Wir sehen uns erstmal mit “Date” unsere aktuell eingestellte Systemzeit an. Stimmt diese nicht da der RasPi keine Internet Verbindung hat könnt ihr diese mit “sudo date –set YYYY-MM-DD” und “sudo date –set hh:mm:ss” setzen.

Ist die Systemzeit aktuell können wir diese wieder mit hwclock in das RTC Modul schreiben, zu kontrolle könnt ihr wieder den Parameter -r verwenden um euch die Zeit der Hardware-Uhr ausgeben zu lassen.

Um die Uhrzeit der RTC dauerhaft als Zeitquelle für unseren Raspberry Pi zu verwenden müssen wir noch das Startverhalten des Raspberry Pi so verändern das er bei jedem Start die Zeit der RTC holt.

Wir fügen vor “exit 0” folgende Zeilen ein. Wir initialisieren das Modul am i2c Bus und setzen mit dem dem Parameter -s dann die Systemzeit vom Modul,

Nach einem Neustart  (sudo reboot) könnt ihr die Uhrzeit wieder mit “sudo hwclock -r” testen. Ab sofort ist eure Systemzeit auch ohne Internet immer aktuell. Falls ihr das bei der Grundeinrichtung nicht schon erledigt habt solltet ihr eure Zeitzone noch über “sudo raspi-config” unter “Internationalization Options” > “Time Zone” korrekt einstellen.

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (1 votes, durchschnittlich: 5,00 von 5)
Loading...

Über raspberry.tips

12 Kommentare

  1. Hallo

    Danke für die Anleitung, habe aber ein Problem!

    Bekomme hier nur ein Lesefehler:
    root@pi:/home/pi# i2cget -y 1 0x68 0
    Error: Read failed
    root@Vertikalfoerderer:/home/pi# i2cget -y 1 0x68 1
    Error: Read failed
    root@Vertikalfoerderer:/home/pi# i2cget -y 1 0x68 2
    Error: Read failed

    root@pi:/home/pi# uname -a
    Linux pi 3.18.10-v7+ #774 SMP PREEMPT Wed Mar 25 14:10:30 GMT 2015 armv7l GNU/Linux

    und die /etc/modprobe.d/raspi-blacklist.conf gibt es gar nicht mehr.

    Ich hoffe einer kann mir da ein wenig helfen?

    Gruß und Danke

    Frigo

    • Leider hat das auch nichts gebracht!

      den DS1307 schein er zu erkennen

      root@Vertikalfoerderer:/home/pi# sudo i2cdetect -y 1
      0 1 2 3 4 5 6 7 8 9 a b c d e f
      00: — — — — — — — — — — — — —
      10: — — — — — — — — — — — UU — — — —
      20: — — — — — — — — — — — — — — — —
      30: — — — — — — — — — — — UU — — — —
      40: — — — — — — — — — — — — — — — —
      50: 50 — — — — — — — — — — — — — — —
      60: — — — — — — — — 68 — — — — — — —
      70: — — — — — — — —
      root@Vertikalfoerderer:/home/pi#

      nur halt

      root@Vertikalfoerderer:/home/pi# i2cget -y 1 0x68 0
      Error: Read failed

      sagt das er nicht drauf zugreifen kann.

      Hab jetzt schon viel Google suchen lassen, ich scheine nicht der erste zu sein der
      dieses Problem hat, nur eine Lösung hab ich bis jetzt nicht gefunden!

      Gruß

      Frigo

    • Ich glaube das hat jetzt eher was mit dem Kernel zu tun, da wurde wohl mal was geändert

      root@Vertikalfoerderer:/home/pi# i2cdump -y 1 0x68 b
      0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
      00: XX 00 00 01 01 01 00 b3 fd bf 67 db ad ff bf ff X..???.???g??.?.
      10: bf fc ff fe ef e6 fd fd fa ff fa ff fd ff fd ff ??.??????.?.?.?.
      20: 19 26 1b e8 48 85 67 cb 10 82 04 89 be 35 28 30 ?&??H?g??????5(0
      30: 30 97 af 4c 28 8c 86 01 11 db 3c ee 7b 70 40 51 0??L(?????<?{p@Q
      40: 80 00 00 01 01 01 00 b3 fd bf 67 db ad ff bf ff ?..???.???g??.?.
      50: bf fc ff fe ef 00 fd fd fa ff fa ff fd ff fd ff ??.??.???.?.?.?.
      60: 19 26 1b e8 48 85 67 cb 10 82 04 89 be 35 28 30 ?&??H?g??????5(0
      70: 30 97 af 4c 28 8c 86 01 11 db 3c ee 7b 70 40 51 0??L(?????<?{p@Q
      80: 80 00 00 01 01 01 00 b3 fd bf 67 db ad ff bf ff ?..???.???g??.?.
      90: bf fc ff fe ef e6 fd fd fa ff fa ff fd ff fd ff ??.??????.?.?.?.
      a0: 19 26 1b e8 48 85 67 cb 10 82 04 89 be 35 28 30 ?&??H?g??????5(0
      b0: 30 97 af 4c 28 8c 86 01 11 db 3c ee 7b 70 40 51 0??L(?????<?{p@Q
      c0: 80 00 00 01 01 01 00 b3 fd bf 67 db ad ff bf ff ?..???.???g??.?.
      d0: bf fc ff fe ef 00 fd fd fa ff fa ff fd ff fd ff ??.??.???.?.?.?.
      e0: 19 26 1b e8 48 85 67 cb 10 82 04 89 be 35 28 30 ?&??H?g??????5(0
      f0: 30 97 af 4c 28 8c 86 01 11 db 3c ee 7b 70 40 51 0??L(?????<?{p@Q
      root@Vertikalfoerderer:/home/pi# i2cdump -y 1 0x50 b
      0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
      00: XX ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff X……………
      10: 52 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff R……………
      20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff …………….
      30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff …………….
      40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff …………….
      50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff …………….
      60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff …………….
      70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff …………….
      80: 42 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff B……………
      90: 52 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff R……………
      a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff …………….
      b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff …………….
      c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff …………….
      d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff …………….
      e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff …………….
      f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff …………….
      root@Vertikalfoerderer:/home/pi#

      jetzt bleibt da nur die frage was …

  2. Hallo, danke für dieses Tutorial doch ich habe ein Problem:

    Also zuerst existiert auf meinem PI ger keine Datei:
    sudo nano /etc/modprobe.d/raspi-blacklist.conf

    Ich hab etwas derartiges auch via “locate” versucht zu finden oder teile davon, aber nichts zu machen soetwas existiert auf dem Pi nicht…
    Ich hab die Datei kurzerhand angelegt, was natürlich nichts gebracht hat denn der Befehl:
    sudo i2cdetect -y 1
    lierfet das hier:
    Error: Could not open file `/dev/i2c-1′ or `/dev/i2c/1′: No such file or directory

    Was kann ich tun …?

    • raspberry.tips

      Hi,

      das Problem ist das beim neuen Raspbian das Modell zum Ansprechen der Geräte und zum Laden der entsprechenden Kernel Module geändert wurde und ich noch nicht alle Artikel aktualisieren konnte.

      Hier die News dazu: http://raspberry.tips/faq/raspberry-pi-device-tree-aenderung-mit-kernel-3-18-x-geraete-wieder-aktivieren/

      Du kannst entweder einfach Device Tree wie beschrieben deaktivieren und das tutorial dann durcharbeiten oder du aktivierst erst mal i2c und spi über “sudo raspi-config” in den Eriweterten Optionen (reboot notwendig) und schaust dann wie du die RTC mit DeviceTree overlays zum laufen bekommst, ich habe es leider noch nicht geschafft das zu probieren.

      • Hallo, mit jessie klappt es genau so. in der raspi-config hab ich nur i2c aktiviert dann Neustart und schon war die Uhr zu finden. Dann einfach ab “RTC Testen” weitermachen …
        Wenn es nicht gehen sollte nach dem Installieren von i2cdetect dann kann es sein dass euer Betriebssystem recht neu ist. Dann muss i2c noch in der raspi-config oder manuell in der /boot/config.txt dtparam=i2c1=on eintragen. dann gehts :)

  3. Hi,
    danke für die tolle Doku!

    Das alles funktioniert nur wenn man(n) in /boot/config.txt folgende Zeile hinzufügt:
    dtparam=i2c1=on
    Danach neu booten und es geht! :)
    Ansonsten erhält man die Meldung:
    Error: Could not open file `/dev/i2c-1′ or `/dev/i2c/1′: No such file or directory
    Näheres dazu hier:
    http://raspberrypi.stackexchange.com/questions/27073/firmware-3-18-x-breaks-i%C2%B2c-spi-audio-lirc-1-wire-e-g-dev-i2c-1-no-such-f

    Hat jemand schon versucht den E²Prom des Boards anzusprechen?
    Oder die 56 Bytes gepufferter Ram?

  4. Hi, super Tutorial. Wie ist dass, wenn die Batterie irgendwann mal leer ist? wie kann kann man das feststellen ob die Batterie noch i.O. ist?

  5. Frigo,
    wie hast du das Problem mit dem
    i2cget -y 1 0x68 0
    Error: Read failed
    gelöst ?
    Bei mir tritt es auch nach einem kleinen Hardware-Umbau auf. Ich habe keine Idee mehr, wie ich es lösen könnte.
    Auch bei mir wird die Uhr mit i2cdetect -y 1 auf 0x68 gefunden.

  6. Hallo Zusammen
    Ich habe nun seit Weihnachten den Raspberry und bin seitdem mit ihm beschäftigt.
    Allerdings beschäftigt mich nun schon seit über 3 Wochen ein Problem mit der RTC DS1307.
    Habe inzwischen davon schon 4 Module und bin mr nun sicher das der Fehler vom Raspberry verursacht wird.
    — Der DS1307 wird richtig erkannt, ich kann mit den hwclock Befehlen die Uhrzeit aus und einlesen, die Uhrzeit des Raspberry wird oft bei fehlendem Internet richtig von der RTC geholt, aber oft wird auch irgendwie die falsche Zeit beim Booten in die RTC vom Raspberry geschrieben.
    Die Uhrenmodule sind in Ordnung, denn sie laufen alle ohne am Raspberry zu sein weiter.
    Habe die hier beschriebene Anleitung sowie auch schon mehrere Andere versucht, immer mit dem gleichen Ergebnis.
    Habe auch schon an einem Uhrenmodul einen 10µF Kondensator an der Eingangsspannung und an den i2C Ausgängen 10pF gegen Masse. Das hilft leider alles nichts.
    Ich hoffe das hier Irgendwer noch eine Idee hatt.
    Gruß
    Kurt

  7. Oben im Text steht:

    Uhr wurde also unter der Adresse 68 gefunden und der Speicherchip für die Uhrzeit unter der Adresse 50

    Dies erweckt den eindruck, das der Uhrenbaustein von der Adresse 68 immer die Aktuelle Uhrzeit auf Adresse 50 ablegt.
    Vlt. sollte besser erwähnt werden, dass auf dem speziellen BAustein zusätzlich ein EEPROM vorhanden ist, welches man unter der Adresse 50 findet. Nicht alle ds1307 Platinen haben dieses EEPROM drauf. Ein anfänger, bei dem das EEPROM fehlt, würde hier erstmal verwirrt sein, weil er nur die eine Adresse findet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.