Echtzeituhr an Raspberry Pi

Die meisten unserer Kleinrechner verzichten auf eine Echtzeituhr, da sie sich die „richtige Zeit“ aus dem Internet beim Bootvorgang holen. Fällt der Strom aus, bootet der Rechner neu und der Vorgang wiederholt sich. Eigentlich kein Problem also, es sei denn, man hat kein Internet zur Verfügung oder die Vorrichtung ist nicht an solchem angeschlossen.

Einen Sonderfall stellen solche, wie der Banana Pi dar, welcher eine interne Uhr besitzt, welche jedoch nicht batteriegepuffert ist. Aber das soll hier keine Rolle spielen, denn hier wollen wir einen Raspi mit einer RTC ausrüsten.

Arbeitet man mit dem Raspberry, welcher eigentlich nur 3.3V an den Ports toleriert, sollten zuerst die Pull-Up-Widerstände für SDA und SCL auf einem I2C-Gerät entfernt werden.

Erst danach ist der Betrieb z.B. einer 5V-Real-Time-Clock im Zusammenspiel mit dem Raspi möglich, da er sonst an den Leitungen Schaden nehmen kann. Wie eventuelle andere Geräte am Bus auch.

Unsere TinyRTC mit einem DS1307 (in der Version 1.1) läuft günstigerweise aber auch mit 3.3 Volt, so dass man sich das sparen kann.

Die Verkabelung ist dann auch ganz einfach. Man verbindet die Pins für 3.3V, GND, SDA und SCL auf der Steckerleiste des Raspi mit VCC und den gleichnamigen Pins der Uhrenplatine.

Für die Software-Installation zuerst aktualisieren und die I2c-Tools installieren:

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install i2c-tools

Dann SPI und I2C-Modul von der Blacklist entfernen:

$ sudo nano /etc/modprobe.d/raspi-blacklist.conf
#blacklist spi-bcm2708
#blacklist i2c-bcm2708
$ sudo reboot

Um die benötigten Module später automatisch zu laden, diese in „/etc/modules“ eintragen:

$ sudo nano /etc/modules
snd-bcm2835
spi-bcm2708
i2c-bcm2708
i2c-dev
rtc-ds1307

Jetzt zuerst die Module laden…

$ sudo modprobe spi-bcm2708
$ sudo modprobe i2c-bcm2708
$ sudo modprobe i2c-dev
$ sudo modprobe rtc-ds1307

dann kann man überprüfen, ob sich die Uhr am I2C-Bus meldet:

$ sudo i2cdetect -y 1

Das tut sie per Default an Adresse 0x68 (auf 0x50 befindet sich noch ein User-EEPROM) und wir können diese mittels

$ sudo i2cget -y 1 0x68 1
$ sudo i2cget -y 1 0x68 2
$ sudo i2cget -y 1 0x68 3

auch auslesen (Sekunden, Minuten, Stunden).

Um die RTC in das System einzubinden, verfahren wir so (hier muss man einen root-prompt haben):

$ sudo bash
# echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
# Ctrl-D

Nach der Überprüfung mit

$ sudo hwclock -r

stimmt mitunter die Zeit noch nicht. Das richtet man elegant mit

$ sudo hwclock –systohc -D –noadjfile –utc

Nach erneutem „hwclock -r“ ergibt sich dann z.B. folgende Ausgabe:

Thu 01 Jan 2015 21:14:26 CET -0.318727 seconds

Um die Veränderungen permanent zu machen, braucht es noch Einträge für den Neustart des Systems. Wir tragen dazu mittels

sudo nano /etc/rc.local

folgende Zeilen in die „rc.local“ vor „exit 0“ ein:

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

Fertig. Nun sollte nach einem Neustart wieder die korrekte Zeit angezeigt werden…

Swen Hopfe

Schreibe einen Kommentar

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