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:
laden wir die Module und prüfen mit lsmod:
damit diese dann immer geladen werden, tragen wir diese in die /etc/modules ein:
Es sollten sich auch zwei Devices unter /dev finden lassen:
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:
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:
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:
danach teilen wir dem System die RTC Clock mit: (i2c-x an den eigenen Bus anpassen)
Nun können wir auch schon unsere noch "jungfräuliche RTC Clock auslesen:
das ist soweit auch normal.
Jetzt schreiben wir unsere aktuelle Systemzeit in die RTC Clock:
und lesen die neue RTC Zeit aus:
Damit die RTC Clock nach jedem Neustart aktiv wird, müssen wir noch das Kernelmodul rtc-ds1307 in die /etc/modules eintragen:
sowie die RTC Clock über die /etc/rc.local im System aktivieren:
Nach dem Reboot sollte jetzt auch ohne ntp Zeitserver und Internet die aktuelle Zeit benutzt werden.
Wenn wir jetzt nochmals mit i2cdetect:
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.