[BraLUG] Ich brauche einen guten Algorithmus

Uwe Berger uwe.berger at bralug.de
Fr Feb 8 21:51:53 CET 2008


MoinMoin,
> Wäre es da nicht einfacher und sogar notwendig eine Quarzuhr als 2. Zeitnormal (zumindest je Sekundentakt) zusätzlich zum Funkmodul einzupflanzen ?
>
>   
nö, ist ja langweilig. Ich will doch etwas Spaß haben... Mein Anspruch
ist es, mit geringsten Aufwand ein möglichst genaues und sich selbst
synchronisierendes Zeitnormal zu fabrizieren.
> Das Funkmodul liefert die genaue Absolutzeit.
> Der Quarzuhr-MC den relativen "Eichwert" je Sekunde genau.
>
> Dann kann der MC die Sekunde mit seiner instabilen Frequenz abgleichen und jede Sekunde die Korrekturwerte festlegen.
>   
den Korrekturwert je Minute bestimme ich mit Hilfe des DCF77-Modules, da
das Zeitsignal sehr genau im Sekundentakt ausgestrahlt wird (kommt aus
einer Atomuhr in Braunschweig). Intern wird im MC jede (theoretische)
1ms ein Interrupt aufgerufen und innerhalb der Interruptroutine ein
Zähler jeweils um 1 erhöht. Würde nun der Takt genau sein, sollte also
nach einer Sekunde der Zählerstand genau 1000 bzw. nach einer Minute
60000 sein.

Wenn das DCF77-Signal empfangen wird, kann man die Sekunde und damit
auch die Minute aus diesem sehr genau ermitteln. Lässt man nun den
Zähler solange laufen, bis die genaue Minute vorbei ist und davon die
theoretischen 60000ms abzieht, bekommt man die Gangabweichung.  Bei ein
paar Experimenten mit meinem Aufbau hat sich herausgestellt, dass diese
Abweichung relativ konstant um 96 - 101 schwankt. Diesen gemittelten
"Eichwert" könnte man schon mal fest einstellen, wenn mal kein
DCF-Signal anliegt, z.B. im EEPROM des MC als hardwarespezifisches
Parameter. Jetzt kommt dann der angefragte Algorithmus ins Spiel, der
die Abweichung anteilig/gleichmäßig in jede Sekunde "einarbeiten" soll.

Da das Ganze allgemeingültig sein soll und die Gangabweichung von den
verschiedensten Einfüssen abhängt, habe ich nach einem dynamischen
Ansatz für die Verteilung des Korrekturwertes gefragt. Der Ansatz von
Arnd und Ingos Umsetzung in Pseudocode (Danke beiden!) dürfte das
Gesuchte sein.

Falls jetzt noch der Einwand kommt, was ist, wenn man überhaupt kein
DCF77-Signal zum Bestimmen der Gangabweichung empfängt, also nie einen
Eichwert bestimmen kann: Mein MC-Modul kann auch ans Ethernet
angeschlossen werden, hat einen IP-Stack und soll auch mal NTP-Server im
Internet nach der Zeit befragen können...

Grüße Uwe






Mehr Informationen über die Mailingliste Bralug