Clock (Deutsch)

From Ethersex_Wiki
Revision as of 12:33, 4 June 2013 by GooPie4o (talk | contribs) (Übernahme aus dem alten Wiki)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
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                                            | |  

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.