Good to Know Database

Raspbian Wheezy: Raspberry Pi um eine Real Time Clock erweitern


Jeder PC besitzt eine Hardware- und eine Software-Uhr. Bei der Software-Uhr wird das Taktsignal durch einen von der Hardware ausgelösten Interrupt generiert. Der Zähler für die Systemzeit wird in diesem Fall von der Software verwaltet. Sobald die Ausführung der Software beendet wurde, wird der Zähler nicht mehr inkrementiert und es kann keine gültige Systemzeit mehr abgeleitet werden. Die Hardware-Uhr besteht in der Regel aus einem Chip welcher einen Uhrenquarz als Taktgeber besitzt. Der Zähler, welcher sich in dem Chip befindet, wird bei jedem Takt erhöht. Damit die Hardware-Uhr nicht stehen bleibt sobald der Rechner ausgeschalten wird, besitzt der Chip eine eingene Spannungsversorgung. Bei den meisten PC's befindet sich diese 3V Lithiumzelle direkt auf dem Motherboard.

Beim Raspberry Pi wurde auf die Hardware-Uhr verzichtet. Das führt dazu, dass die Software beim Systemstart die aktuelle Zeit von einem Zeitserver im Internet beziehen und damit die Software-Uhr stellen muss. Hat der Raspberry Pi keine Verbindung zum Internet oder einen lokalen Zeitserver, benötigen Sie eine andere zuverlässige Quelle für die Systemzeit.

Wenn Sie den Raspberry Pi um eine Real Time Clock (kurz RTC) erweitern wollen, um so auch ohne Netzwerk-Verbindung eine genaue Systemzeit zu erhalten, können Sie fertig bestückte RTC-Module für den I²C-Bus bei eBay für ein paar Euro erwerben. Suchen Sie dazu einfach nach RTC-Modulen mit dem DS1307 Baustein.

Die folgende Anleitung beschreibt wie Sie eine Real Time Clock an Ihren Raspberry Pi anschließen und in Betrieb nehmen. Als Grundlage wurde hier das Raspbian Image vom 07.01.2014 (2014-01-07-wheezy-raspbian.zip) verwendet.

Real Time Clock mit dem Raspberry Pi verbinden

Die folgenden Fotos zeigen das in dieser Anleitung verwendete RTC-Modul. Wie Sie sehen besitzt das Modul sieben Anschlüsse wovon für den Betrieb am Raspberry Pi nur vier verwendet werden. Die Versorgungsspannung von 3,3V für das Modul wird an den mit VCC gekennzeichneten Pin und die Masse an GND angeschlossen. Der I²C-Bus vom Raspberry Pi wird mit den Pins SDA und SCL verbunden. Die Anschlüsse BAT, DS und SQ werden nicht verwendet und müssen nicht beschalten werden.

Real Time Clock Modul 1  Real Time Clock Modul 2

Wie bereits beschrieben sollten Sie das hier gezeigte Modul wie folgt mit Ihrem Raspberry Pi verbinden.

Real Time Clock Modul - Schaltplan

Weitere Informationen zum DS1307 und zum AT24C32 finden Sie in den dazugehörigen Datenblättern.

I²C-Bus des Raspberry Pi's aktivieren

Bevor Sie den I²C-Bus des Raspberry Pi's unter Raspbian verwenden können, müssen Sie diesen aktivieren. Wie dies durchgeführt wird können Sie in der Anleitung Raspbian Wheezy: I²C-Unterstützung aktivieren nachlesen.

Adresse am I²C-Bus herausfinden

Damit Sie das RTC-Modul ansprechen können, benötigen Sie die I²C Slave Adresse des DS1307. Diese können Sie wie breits in der Anleitung Raspbian Wheezy: Teilnehmer am I²C-Bus identifizieren beschrieben mit dem Befehl i2cdetect herausfinden.

Beachten Sie bitte, dass in dieser Anleitung ein Raspberry Pi Model B mit der Hardware Revision 2.0 verwendet wurde. Sollten Sie einen Raspberry Pi Model B mit der Hardware Revision 1.0 verwenden, müssen Sie in den folgenden Befehlen die ID des I²C-Busses entsprechend anpassen.

pi@raspberrypi ~ $ sudo i2cdetect -y 1
     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: -- -- -- -- -- -- -- --

Wie Sie der Ausgabe entnehmen können, besitzt das RTC Modul hier zwei I²C-Adressen. Mit der Adresse 0x50 kann das 2-Wire Serial EEPROM AT24C32 angesprochen werden, welches ebenfalls auf dem RTC-Modul verbaut ist. Die Real Time Clock beziehungsweise der DS1307 Baustein besitzt die Adresse 0x68. Die zweite Adresse wird im Verlauf des Tutorials noch des öfteren genutzt werden.

Funktionalität des RTC-Moduls testen

Bevor Sie die Real Time Clock verwenden können, müssen Sie das Kernelmodul rtc_ds1307 laden.

pi@raspberrypi ~ $ sudo modprobe rtc_ds1307

Nadem das Kernelmodul geladen wurde, können Sie mit i2cget die ersten sieben Register des DS1307 auslesen. Wie Sie dem Datenblatt des DS1307 entnehmen können, enthalten diese der Reihe nach die Sekunden, die Minuten, die Stunden, den Tag der Woche, den Tag des Monats, das Monat und das Jahr.

pi@raspberrypi ~ $ sudo i2cget -y 1 0x68 0
0x80
pi@raspberrypi ~ $ sudo i2cget -y 1 0x68 1
0x00
pi@raspberrypi ~ $ sudo i2cget -y 1 0x68 2
0x00
pi@raspberrypi ~ $ sudo i2cget -y 1 0x68 3
0x01
pi@raspberrypi ~ $ sudo i2cget -y 1 0x68 4
0x00
pi@raspberrypi ~ $ sudo i2cget -y 1 0x68 5
0x00
pi@raspberrypi ~ $ sudo i2cget -y 1 0x68 6
0x00

Wenn Sie sich die hier gezeigten Ausgaben ansehen, stellen Sie sicher fest, dass diese Werte nicht stimmen können. Eventuell erhalten Sie bei der ersten Inbetriebnahme Ihres RTC-Moduls die gleichen Werte angezeigt. Das liegt daran, dass noch keine gültige Zeit in der Real Time Clock gespeichert wurde. Dieses Verhalten können Sie auch feststellen wenn Sie die RTC-Batterie kurzzeitig entfernen oder die Batterie leer ist.

Sobald Sie einmal eine gültige Zeit an die Real Time Clock übergeben haben, könnten die Ausgaben wie folgt aussehen. Hierbei ergeben die Werte als Datum den 02.02.2014, welcher der 1. Tag der Woche - also ein Sonntag - ist und die Uhrzeit 14:50:07.

pi@raspberrypi ~ $ sudo i2cget -y 1 0x68 0
0x07
pi@raspberrypi ~ $ sudo i2cget -y 1 0x68 1
0x50
pi@raspberrypi ~ $ sudo i2cget -y 1 0x68 2
0x14
pi@raspberrypi ~ $ sudo i2cget -y 1 0x68 3
0x01
pi@raspberrypi ~ $ sudo i2cget -y 1 0x68 4
0x02
pi@raspberrypi ~ $ sudo i2cget -y 1 0x68 5
0x02
pi@raspberrypi ~ $ sudo i2cget -y 1 0x68 6
0x14

Real Time Clock in Betrieb nehmen

Damit die Real Time Clock vom Linux-System genutzt werden kann, müssen Sie noch den folgenden Befehl aufrufen.

pi@raspberrypi ~ $ sudo su -c 'echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device'

Mit dem Befehl hwclock und dem Parameter -r können Sie die aktuelle Zeit der Hardware Uhr auslesen.

pi@raspberrypi ~ $ sudo hwclock -r
Sat 01 Jan 2000 00:00:12 CET  -0.036185 seconds

Da in diesem Fall das RTC Modul zum ersten Mal in Betrieb genommen wurde, zeigt dieses als aktuelles Datum den 01.01.2000 und als aktuelle Uhrzeit kurz nach 00:00 Uhr an.

Sie können jetzt mit dem Befehl hwclock der Real Time Clock die aktuelle Systemzeit mitteilen. Bevor Sie dies jedoch tun, sollten Sie mit dem Befehl date überprüfen ob die aktuelle Systemzeit auf dem Raspberry Pi korrekt ist. Sollte dies nicht der Fall sein, können Sie diese ebenfalls mit date korrigieren.

pi@raspberrypi ~ $ date
Sun Feb  2 14:29:27 CET 2014

Ist die aktuelle Systemzeit korrekt, können Sie diese der Real Time Clock mitteilen.

pi@raspberrypi ~ $ sudo hwclock -w

Überprüfen Sie nochmals mit hwclock -r ob die Einstellungen der Real Time Clock jetzt korrekt sind.

pi@raspberrypi ~ $ sudo hwclock -r
Sun 02 Feb 2014 14:30:03 CET  -0.386639 seconds

Kernelmodul rtc_ds1307 automatisch laden

Nachdem Sie die Real Time Clock in Betrieb genommen haben und die Funktionalität überprüft haben, sollten Sie das Kernelmodul rtc_ds1307 in die Konfigurationsdatei /etc/modules eintragen. Dadurch wird beim Systemstart das Kernelmodul automatisch geladen. Öffnen Sie deshalb die /etc/modules mit einem Editor.

pi@raspberrypi ~ $ sudo vi /etc/modules

Fügen Sie am Ende der Datei die folgende Zeile ein und speichern die Änderung ab.

rtc_ds1307

Software-Uhr beim Systemstart mit der Real Time Clock abgleichen

Damit beim Systemstart die aktuelle Zeit aus der Real Time Clock ausgelesen und zum Stellen der Systemzeit verwendet wird, sollten Sie die /etc/rc.local um zwei weitere Befehle erweitern. Öffnen Sie daher die /etc/rc.local zum Bearbeiten.

pi@raspberrypi ~ $ sudo vi /etc/rc.local

Fügen Sie vor dem Befehl exit 0 die folgenden zwei Zeilen ein und speichern die Datei ab.

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

Nachdem Sie die Änderungen vorgenommen haben, können Sie einen Neustart durchführen um die korrekte Funktion zu überprüfen.

pi@raspberrypi ~ $ sudo shutdown -r now


Dieser Eintrag wurde am 06.02.2014 erstellt und zuletzt am 19.09.2016 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_36_2491.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer