[Raspberry Pi] RTC Hardware Uhr nachrüsten

  • manchmal ist es nicht verkehrt, wenn man eine RTC-Clock im System hat.
    Ich habe mir für umgerechnet 2 Euros (inkl. Versand) jetzt einen Raspberry mit einer RTC-Clock ausgerüstet. Das Modul arbeitet mit einem I2C Real-Time Clock DS 1307. Das Modul habe ich hier gekauft --> http://www.dx.com/p/i2c-rtc-ds…-blue-149493#.U6MK89B0IWM
    Normalerweise braucht das I2C Real-Time Clock IC DS 1307 5Volt als Betriebsspannung. Das ist auch kein Problem, jedoch sind die Datenleitungen über Pull-up Widerstände auch fest mit der Betriebsspanung verbunden. Nun benutzen die GPIO Pins aber 3,3 Volt Level und sind nicht 5 Volt tolerant. Daher müsste man die Pull-up Widerstände vom DS 1307 Board herunter löten, um nicht die GPIO Pins vom Raspberry zu töten.
    Doch das ist gar nicht nötig. Erstaunlicherweise arbeitet das DS 1307 IC auch mit 3,3 Volt (entgegen der Spezifikation) und so kann das RTC Modul ohne Modifikationen benutzt werden. Es muss nur mit den Pins P1-1 (3,3 Volt), P1-3 (SDA), P1-5 (SCL) sowie P1-9 (GND) am Raspberry verbunden werden. Das war es auf der Hardware Seite auch schon.


    Software Installation:


    Als erstes muss die I²C Unterstützung aktiviert werden. Je nach Distribution ist sie meist ge-blacklistet ( bsw. /etc/modprobe.d/raspi-blacklist.conf). Dort also evtl. auskommentieren oder löschen.


    Mit:


    Code
    modprobe i2c-bcm2708
    modprobe i2c-dev


    laden wir die Module und prüfen mit lsmod:


    Code
    i2c_dev                 5620  0
    i2c_bcm2708             3759  0


    damit diese dann immer geladen werden, tragen wir diese in die /etc/modules ein:


    Code
    i2c_bcm2708
    i2c-dev


    Es sollten sich auch zwei Devices unter /dev finden lassen:


    Code
    root@pi:/usr/sbin# ls -la /dev/i2c*
    crw-rw---- 1 root i2c 89, 0 Jan  1  1970 /dev/i2c-0
    crw-rw---- 1 root i2c 89, 1 Jan  1  1970 /dev/i2c-1


    Weiterhin benötigen wir noch das Software-Paket i2c-tools.
    Ist dieses installiert, identifizieren wir mittels "i2cdetect" den I2C-BUS. Hier muss man beachten, das es Unterschiede zwischen RPI Rev 1 und 2 gibt. Am RPI Rev1 wird das Modul am Bus0 gefunden, am RPI Rev2 meist am Bus1. Da mein RPI hier noch ein Rev1 Board ist:


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


    ein Aufruf für den anderen Bus ergibt folgendes:


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


    hieraus erkennen wir, das in meinem Fall der Bus 0 der Richtige ist und ich den nachfolgend verwende. Das I2C Real-Time Clock IC meldet sich mit der ID "68" . Damit funktioniert das Modul und die Kommunikation über I²C ist OK. Nun laden wir das Kernel Modul rtc_ds1307:


    Code
    modprobe rtc_ds1307


    danach teilen wir dem System die RTC Clock mit: (i2c-x an den eigenen Bus anpassen)


    Code
    echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device


    Nun können wir auch schon unsere noch "jungfräuliche RTC Clock auslesen:


    Code
    root@pi:/usr/sbin# hwclock -r
    Sa 01 Jan 2000 01:00:15 CET  -0.024125 seconds


    das ist soweit auch normal.



    Jetzt schreiben wir unsere aktuelle Systemzeit in die RTC Clock:


    Code
    root@pi:/usr/sbin# hwclock -w


    und lesen die neue RTC Zeit aus:


    Code
    root@pi:/usr/sbin# hwclock -r
    Do 19 Jun 2014 15:43:17 CEST  -0.023455 seconds


    Damit die RTC Clock nach jedem Neustart aktiv wird, müssen wir noch das Kernelmodul rtc-ds1307 in die /etc/modules eintragen:


    Code
    rtc-ds1307


    sowie die RTC Clock über die /etc/rc.local im System aktivieren:


    Code
    echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device 
    hwclock -s


    Nach dem Reboot sollte jetzt auch ohne ntp Zeitserver und Internet die aktuelle Zeit benutzt werden.


    Wenn wir jetzt nochmals mit i2cdetect:


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


    den Bus identifizieren, so wird ersichtlich, das nun die ID 68 mit "UU" als "in Benutzung" gekennzeichnet wird.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!