RasPi zeitgesteuert starten per RTC

© Iprole, sxc.hu

Ein Tick mehr

Mit einem RTC-Chip starten und stoppen Sie den RasPi zeitgesteuert. Das eröffnet neue Möglichkeiten.

README

Mit einem Uhrenchip als Herz einer Stromversorgungssteuerung booten Sie den RasPi zur rechten Zeit, versorgen ihn anschließend mit der aktuellen Uhrzeit und trennen ihn nach dem Herunterfahren wieder von der Stromversorgung.

War es wohl der eiserne Wille zum Sparen, dem beim Design des RasPi eine der grundlegenden Funktionen eines Systems zum Opfer fiel: eine Uhr mit Weckfunktion? Das erweist sich in der Praxis aber als an der falschen Stelle gespart, denn der RTC-Chip käme vielen Anwendungsfällen zugute.

Ob als HTPC, als Server oder als eingebettetes System in der Haussteuerung: Der Einsatz des RasPi in diesen wie in vielen anderen Bereichen setzt voraus, dass der Mini-PC zeitgesteuert hochfährt und anschließend die genaue Uhrzeit erhält, und das unter Umständen auch ohne Zugang zu einem Server im Internet. Mit einer Platine zum Selberlöten, einem kurzen C-Programm und kleinen Adaptionen im System rüsten Sie diese Funktion nach.

Zusätzlich zur Grundfunktion bietet der in diesem Workshop verwendete MCP79410, ein Produkt der Firma Microchip [1], noch zwei unabhängige Alarmzeitmarken, die Sie bis zu einem Jahr in die Zukunft setzen dürfen.

Gegenüber anderen RTC-Chips speichert er die Zeitmarke des letzten Stromausfalls beziehungsweise der darauffolgenden Wiederkehr der Versorgung und bietet die Möglichkeit, den Sekundentakt auf ein Millionstel genau abzustimmen. Allerdings unterstützt der Treiber unter Linux für diesen Chip nur dessen Grundfunktion, also das Setzen und Auslesen der Zeit sowie den Zugriff auf das interne SRAM.

Pflichtenheft

Bevor es an das Umsetzen geht, sollten Sie sich darüber klar werden, welche Funktionen Sie mit dem Aufbau umsetzen möchten. Das Pflichtenheft der in diesem Artikel verwirklichten Erweiterung sieht dazu folgende Punkte vor:

  • Korrekte Uhrzeit nach jedem Systemstart, selbst nach mehrstündigem Stromausfall.
  • Bootfail-Watchdog-Funktion.
  • Automatischer Neustart nach Stromausfall.
  • Manueller Neustart per Taster nach Systemstopp.
  • Zeitgesteuerter Neustart nach Systemstopp.
  • Automatisches Trennen aller Verbraucher von der Versorgung nach Systemstopp.

Den manuellen Neustart bietet der RasPi schon jetzt auf zwei Arten: Entweder Sie stecken manuell die Stromversorgung aus und wieder ein, oder Sie rüsten einen Reset-Taster am Pin P6 nach und betätigen diesen nach dem Halt des Systems. Dagegen läuft der Neustart nach Stromausfall wie jeder Systemstart: Schlussendlich ist es dem PC egal, warum der Strom wiederkommt.

Das automatische Trennen des RasPi nach dem Halt erweist sich vor allem für Systeme als sinnvoll, die an einer Batterie laufen. Damit ziehen die permanenten Stromverbraucher – sowohl offensichtlichen wie die Power-On-LED mit 1,5 mA, aber noch viel mehr die vielen versteckten Funktionen – keinen Strom mehr.

Das Hauptziel der Schaltung aus Abbildung 1 liegt darin, alle Funktionen aus dem Pflichtenheft ausschließlich über den mehrfach mit Geräten belegbaren I2C-Bus [2] des RasPi zu steuern. Das hält die kostbaren GPIO-Pins frei und reduziert die Verbindungen auf ein Minimum (siehe Kasten "So geht's").

Abbildung 1: Ziel der Schaltung auf der Erweiterungsplatine ist es, alle Funktionen über den I2C-Bus zu steuern, damit die GPIO-Pins frei bleiben.

So geht's

Der Schaltkontakt des Relais K1 fungiert als Hauptschalter. Ist er offen, so bleibt der RasPi stromlos. Erst wenn Sie ihn schließen, bootet der PC – und zwar unabhängig davon, ob die Versorgung direkt über die Stiftleiste P1 läuft oder über die USB-Buchse der Erweiterungsplatine.

Der Treiber-Transistor T3 vom Zeitgeber IC3 (NE555) [3] steuert das Relais K1. Wichtig dabei ist, die Spule des Relais mit einer Freilaufdiode in Sperrrichtung parallel zu schalten. Anderenfalls zerstört unter Umständen eine Spannungsspitze beim Abschalten der Relaisspule den Treiber-Transistor T3 oder noch weitere Komponenten.

Wird der Trigger-Eingang (TRI) des Zeitgebers auf einen 0V-Pegel gezogen, dann schaltet dieser das Relais ein. Wegen der Transistoren T1 und T2 bleibt dieser Zustand erhalten, bis eine positive Flanke am Trigger-Eingang die Zeitgeberfunktion des IC3 freigibt, sodass nach einer Zeitspanne von etwa 35 Sekunden (festgelegt über die Beziehung T = 1.1 * R8 * C7) der Zeitgeber das Relais abschaltet.

Es gibt nun drei Wege, um diesen Trigger-Eingang anzusteuern: Zum einen entsteht bei jedem Anlegen der 5V-USB-Versorgung an der Buchse PWR-IN über R5 und C7 ein kurzer Impuls mit 0 Volt. Zum anderen besteht die Möglichkeit, solche Impulse über den Taster S1 zu setzen. Beides führt zu der genannten 35 Sekunden andauernden Einschaltphase. Und zu guter Letzt gibt es da noch den Uhrenchip IC2.

IC2 – RTC MCP79410 – dient als Herz dieser Schaltung. Diesen Chip steuert der RasPi direkt über den I2C-Bus an. Daher muss er an einer Versorgung mit 3,3 Volt hängen – das besorgt IC1. Ist IC2 richtig konfiguriert, dann setzt dieser seinen Ausgang (MFP) auf einen dauerhaften 0V-Pegel, entweder beim Erreichen einer Alarmzeitmarke oder durch Löschen des Bits OUT und Deaktivieren beider Alarme im Control-Register (Adresse 0x07).

Fährt also der RasPi durch einen kurzen 0V-Impuls gesteuert hoch, so muss das hochfahrende Betriebssystem dies innerhalb der oben erwähnten 35 Sekunden durch Löschen dieses Bits im IC2 quittieren – anderenfalls dreht ihm der Zeitgeber den Strom ab. Diese Zeit muss genügen, um den Kernel zu starten, das Dateisystem einzuhängen und die I2C-Kernelmodule zu laden.

Über die Superkapazität C5 erhält der Uhrenchip selbst bei Ausfall der 5-Volt-Versorgung noch für mehrere Tage Energie. Sobald wieder eine Versorgung erfolgt, lädt das System die Superkapazität über D1 und R4 nach.

Inbetriebnahme

Haben Sie die Erweiterungsplatine aufgebaut (Abbildung 2), geht es Schritt für Schritt an die Funktionsprüfung und Inbetriebnahme. Als Basis dient in diesem Artikel eine aktuelle Raspbian-Distribution auf der Basis von Wheezy [4], deren Konfiguration durchaus mit der aufgesteckten Platine (Abbildung 3) erfolgen kann, denn ein taufrischer MCP79410 sorgt für eine dauerhafte Stromversorgung.

Abbildung 2: Erweiterungsplatine von unten, mit Relais (links oben) und Supercap, Quartz (rechts unten).
Abbildung 3: Erweiterungsplatine von oben – mit Taster, IC2, IC3 und IC1 (von links nach rechts).

Im ersten Schritt gilt es, die Tools zu installieren, um den Uhrenchip anzusprechen und die Uhrzeit zu setzen. Mit dem Befehl aus der ersten Zeile von Listing 1 ziehen Sie alle notwendigen Pakete nach. Danach laden Sie die Kernel-Module für den Betrieb beider I2C-Busse und den Zugriff auf diese über die Gerätedateien /dev/i2c-0 und /dev/i2c-1 (Listing 1, Zeile 2 und 3). Der Modulparameter des ersten Kommandos setzt die Taktfrequenz auf die für den MCP79410 maximal erlaubten 400 kHz.

Listing 1

 

$ sudo apt-get install i2c-tools
$ sudo modprobe i2c-bcm2708 baudrate=400000
$ sudo modprobe i2c-dev

Der nächste Schritt hängt von der Board-Revisionsnummer des RasPi ab. Beim älteren Modell (Rev. 1) verwenden Sie die Busnummer 0 beziehungsweise /dev/i2c-0, beim neueren (Rev. 2) dagegen die Busnummer 1. Der Test des Uhrenchips erfolgt wie in Listing 2, wobei sich zeigt, dass der MCP79410 auf zwei I2C-Geräteadressen anspricht: 0x57 und 0x6f. Hinter Ersterer liegt das EEPROM, ein Statusregister und ein Unique-ID Register. An der zweiten liegen der eigentliche Uhrenchip und das SRAM.

Listing 2

 

$ sudo i2cdetect -y Busnummer
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- 57 -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 6f
70: -- -- -- -- -- -- -- --

Als Letztes laden und konfigurieren Sie den Kernel-Zugang zum RTC-Chip und stellen erstmalig die Uhrzeit auf die aktuelle Systemzeit im UTC-Bezug. Da das passende Kernelmodul rtc-ds1307 mehrere Chips bedient, geben Sie hier den entsprechenden Parameter an (Listing 3).

Listing 3

 

$ sudo modprobe rtc-ds1307
$ sudo echo "mcp7941x 0x6f" > /sys/bus/i2c/devices/i2c-bus#/new_device
$ sudo hwclock --systohc -D --utc

Den Erfolg kontrollieren Sie auf einfachem Weg, indem Sie schlicht alle Register des Chips auslesen (Listing 4) und mittels der Registerübersicht (Abbildung 4) deren Inhalte gegen die Datums- beziehungsweise Zeitausgabe prüfen. Dabei gilt es immer, den Zeitbezug mit zu berücksichtigen.

Listing 4

 


$ sudo hwclock -r && sudo i2cdump -y -f -r 0x00-0x1f bus# 0x6f b
Fr 01 Nov 2013 21:54:14 CET  -0.377799 seconds
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: 94 54 20 2e 01 11 13 00 00 00 00 00 00 00 00 00
10: 01 00 00 00 01 01 01 01 00 00 00 00 00 00 00 00
Abbildung 4: Registertabelle des MCP79410, Auszug aus dem Datenblatt von Microchip.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 8 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

04/2019
TV & Multimedia

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Finger weg

    Ein Temperatursensor verrät, ob Sie einen Gegenstand gefahrlos berühren dürfen. Beim Messen brauchen Sie dabei noch nicht einmal Kontakt zum Objekt.

  • Aus einer Hand

    Um einen Mikrocontroller zu programmieren, genügt ein Raspberry Pi. Wir zeigen, was Sie dazu noch benötigen.

  • Im Gleichtakt

    Synchronisierte Live-Loops und selbst erstellte Funktionen helfen dabei, Sonic Pi wie ein Live-Instrument zu spielen.

  • Mach mal

    Das Ftduino-Modul schlägt die Brücke zu Fischertechnik und ermöglicht es unter anderem, einen Drei-Achsen-Roboter anzusteuern.

  • Eleganter Diener

    Jeden Morgen dieselben Handgriffe, um zu sehen, ob die S-Bahn fährt und wie das Wetter wird? Ein cleverer Infoscreen auf RasPi-Basis automatisiert den Vorgang.

  • Bienenflüsterer

    Bienenzüchter, die ihre Völker besser kennenlernen möchten, müssen die fleißigen Insekten nicht pausenlos stören. Mit einem Raspberry Pi und verschiedenen Sensoren überwachen sie Temperatur, Luftfeuchtigkeit und bald auch das Gewicht des Bienenstocks.

  • Beerige Musik

    Für echten Hi-Fi-Sound braucht es mehr als einen kleinen Bluetooth-Brüllwürfel. Mit Volumio und einem Raspberry Pi rüsten Sie Ihre klassische Hi-Fi-Anlage mit smarten Funktionen auf.

  • Ton ab!

    Auf den ersten Blick erscheint der RasPi zu schwachbrüstig für den Betrieb leistungshungriger DAW-Software. Doch der Schein trügt.

  • Himbeer-TV

    Der DVB TV µHAT rüstet den Raspberry Pi mit einem DVB-T/T2-Tuner auf. Die deutsche TV-Landschaft schränkt dessen Möglichkeiten allerdings ein.

  • Git à la RasPi

    Mit wenigen Handgriffen zum Git-Hoster: Die dezentrale Arbeitsweise von Git erleichtert in Kombination mit der Netzwerkfähigkeit des RasPi das Verwalten von Quellcode.