Clock (Deutsch)
Clock | |
---|---|
Status | Stable
|
menuconfig | Applications->System clock support |
Pinning | no |
Ecmd | yes |
Depends on | ECMD (optional) |
Requires | - |
Code | https://github.com/ethersex/ethersex/tree/master/services/clock |
Viele Mikrocontroller-Projekte kommen irgendwann an den Punkt, wo eine (halbwegs) verlässliche Zeitquelle von Nöten ist. Sei es, dass man um eine bestimmte Uhrzeit eine Lampe schalten möchte, die Heizungssteuerung morgens für Warmwasser sorgen soll oder dass man alle halbe Stunde einen Messwert speichert ...
Wie könnte es anders sein, Ethersex bietet hierfür eine elegante Lösung: eine Systemuhr :-)
make menuconfig Applications ---> System clock ---> | | [*] System clock support | | | [ ] Use 32 kHz crystal to tick the clock | | | [*] Synchronize using NTP protocol | | | [*] Cron daemon | | | [ ] NTP daemon | | | [ ] Working hour meter | | | (UTC) Time Zone | |
Contents
Der Uhrentakt
Wenn irgendwie möglich, solltest Du Deinem Ethersex einen Uhrenquarz mit einer Taktfrequenz von 32 kHz spendieren (an die Pins TOSC1 resp. TOSC2 anschließen, im Falle des ATmega644 sind das PC6 und PC7) und die Option Use 32 kHz crystal to tick the clock aktivieren. Die Systemuhr läuft mit dem Uhrenquarz erheblich genauer.
Ohne den Quarz wird der Systemtakt als Quelle herangezogen. Dieser ist aber im Vergleich weit weniger genau.
Zeitquellen
Selbstverständlich muss sich die Uhr selbst stellen. Der Controller wäre weitestgehend nutzlos wenn jedesmal die Uhr per Hand eingestellt werden müsste. Ethersex sieht hierzu im Moment zwei Lösungsansätze vor:
Synchronisation mittels NTP
Ethersex kann als NTP-Client einen Zeitserver im Internet nach der Uhrzeit fragen. Hierzu ist lediglich die Option Applications → System Clock Support → Synchronize using NTP protocol zu aktivieren.
Die Firmware frägt dann nach dem Boot und anschließend in regelmäßigen Abständen den Zeitserver. Die standardmäßig festgelegten Server sind in der Datei services/clock/config.in gesetzt (können aber per menuconfig
verändert werden):
address type | DNS aktiviert | ohne DNS Unterstützung |
IPv6 | ns.ipv6.uni-leipzig.de | 2001:638:902:1:0:0:0:10 |
IPv4 | ptbtime1.ptb.de | 192.53.103.108 |
DCF77
Die Ethersex-Firmware kann auch als DCF77-Empfänger (besser bekannt als "Funkuhr") fungieren. Hierzu ist zunächst ein Uhrenquarz anzuschließen und die zugehörige Option zu aktivieren, vgl. oben. Dann muss die Option Synchronize using DCF77 signal aktiviert werden. Funktionstüchtige (Empfangs-)hardware und guten Empfang vorausgesetzt, sollte die Uhr nun automatisch gestellt werden.
Zeitinformationen verwenden
Cron
Ethersex hat einen Cron-Dienst ähnlich dem Dienst auf typischen Unix-Systemen. Dieser kann verwendet werden, um zu bestimmten Uhrzeiten bestimmte Tätigkeiten verrichten zu lassen.
Die Jobtabelle selbst findet sich in der Datei cron/cron.c ziemlich am Anfang. Es ist auch ein Beispieljob eingetragen. Selbstverständlich sind hierzu dann zumindest rudimentäre Programmierkenntnisse in C erforderlich %)
Eine (einfachere) Alternative wäre evtl. der Einsatz eines Control6-Programms.
NTP-Server
Die Ethersex Firmware kann die so gewonnenen Zeitinformationen als NTP-Server auch im lokalen Netzwerk zur Verfügung stellen. Hierzu ist lediglich die Option NTP daemon zu aktivieren.