mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DCF77 auswertung


Autor: Christopher Schirner (schinken)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich hab folgendes Problem bei der DCF77 signal auswertung.

Hab 2 Lösungen für DCF77 Signalauswertung.

a)

Ich werte das DCF77 signal per Externen Interrupt aus, und polle das 
Signal im Interrupt und Prüfe wie lang es war. 100ms oder 200ms. Und in 
der 1,5 sekunden Sendepause schreib ich das Signal im normal Interrupt 
(5ms) an die Anzeige raus. Doch wenn die Pause ist, ist das Signal doch 
schon wieder veraltet. D.h. ich habe alle ~59sek einen sprung meiner 
Sekundenanzeige.

Ich könnte die Sekunden, Minuten, Stunde dann rausschreiben wenn ich Sie 
empfange, doch selbst da, hab ich einen gewissen "Offset" drin.

b)

Ich werte das Signal im normalen Interrupt (5ms) aus und schreib es da 
raus... doch da hab ich auch wieder das Problem mit "veraltetes" Signal 
usw.

====================================

Die Sekunden zähl ich im "normalen Interrupt (5ms)" weiter, als RTC.

So.. etz brauch ich ne lösung für das "Veraltete Signal"

Vielen Dank schonmal für die Lösung im vorraus

MFG
Christopher Schirner

Autor: Michael J. (jogibaer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wo ich mal ein DCF77 Signal ausgewertet habe,lief im Hintergrund eine
Uhr per Software, die per DCF77 nur aktualisiert wurde.

Wenn man diese ständig aktualisiert, kann die ruhig etwas ungenau sein.

Jogibär

Autor: Christopher Schirner (schinken)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann ich mal den auswertungscode sehen?

Bzw. was heißt "etwas" ungenau. Wenn ich das Signal erst rausschreibe in 
der "Pause" ist das signal schon min 20 sekunden alt!

Autor: Michael J. (jogibaer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Achtung !!
Der Code ist uralt!

Wenn ich den mal wieder brauche, werde ich den komplett umstricken.
(damals habe ich noch wild herumprogrammiert ;-) )

Im Prinzip ist die Sache einfach.

Du mußt nur in der 59. Sekunde die Referenzmarke erkennen.
Dann ist deine Uhr syncron.
Dann kannst du bei jedem neuen Impuls die Softwareuhr syncronisieren.
Dann läuft diese zwar ca. 200 ms nach, weil erst dannach die Auswertung
fertig ist, aber das sollte doch reichen.

Jogibär

Autor: Christopher Schirner (schinken)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich seh grad das sekunden garnet gesendet werden, nur minuten stunden 
und anderes.

Ich bekomm aber n signal wenn ne neue minute anfängt, das sollte das 
zeichen sein "starte deine RTC!"

Autor: Michael J. (jogibaer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

natürlich werden indirekt die Sekunden gesendet.

Exact jede Sekunde bekommst Du ein neues Signal.
Entweder 100ms oder 200ms ->neuer Interrupt.
Damit kannst Du ganz genau Zählen.
Syncronisation mit der 59. Sekunde.

Jogibär

Autor: Wolfgang Horn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, Christopher,

ja, das Synchronisationsproblem.

Beim Zeitsignal - mach Deine eigene, interne Uhr. Die schreibt in die 
Anzeige.

Das DCF-Signal verwende nur zum Start und zur Synchronisation.

Deine interne Uhr sagt Dir, wann die Sekunde hätte vorbei sein müssen - 
und die Sekundenmarke prüfst Du nur zur Bestätigung Deiner Voraussage, 
und gegebenenfalls zur Korrektur Deiner internen Uhr.


Ciao
Wolfgang Horn

Autor: Christopher Schirner (schinken)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
letztere idee hat mir eigentlich gut gefallen... :)

mal schaun welche ich umsetz -> man glaubts kaum, konnte aber deswegen 
kaum einschlafen gestern. . zuviele ideen im kopf

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es wird immer die Zeit für die nächste Minute gesendet.

Du mußt also die komplette Zeit speichern und zur 0. Sekunde des 
nächsten Pakets ausgeben.

Sonst geht Deine Uhr immer vor.

Allerdings kann das Signal oft gestört sein (Staubsaugen, Fernsehen, 
Gewitter).
Daher haben alle DCF77 Uhren eine interne Uhr, die nur bei korrekt 
empfangenen Daten synchronisiert wird. Diese Uhr macht nebenbei die 
fehlende Sekunde.

Den externen Interrutp zu nehmen, ist keine gute Idee, da die Empfänger 
oft kurze Störimpulse ausgeben.

Besser ist ein Timerinterrupt, der z.B. alle 10ms abfragt, damit hat man 
dann eine Störunterdrückung.


Schau mal in die Codesammlung, da sind Beispiele von mir.


Peter

Autor: Christopher Schirner (schinken)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hatte das ding gerade am Osszi und hab gesehen das im 5ms takt plötzlich 
signale kamen und dachte mir zuerst was das soll. nachdem ich mit den 
finger an die antenne gelangt habe, war das signal wieder OK....

also anscheinend hat hier irgendwas im raum gestört.

wie prüfe ich ob eine übertragung korrekt ist?
Es gibt parity bits, ja hm :P HM...... :P HMMMMMMMMMM! :)


naja man überlegen

Autor: Adam Adam (adam)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Daher haben alle DCF77 Uhren eine interne Uhr, die nur bei korrekt
>empfangenen Daten synchronisiert wird. Diese Uhr macht nebenbei
>die fehlende Sekunde.

Die hier im Forum genannte günstige Conrad-Uhr hat nach einem (kurzen?) 
Spannungsverlust 3 Stunden lang munter die falsche Zeit angezeigt, trotz 
Empfang.
Erst nach einem Warmstart hat sie die richtige Zeit wiedergefunden.

Autor: Christopher Schirner (schinken)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab das ding hier gerade im testbetrieb laufen, bei einer umgebung mit 5 
computern, einer laufenden pumpe, und ein netzteil in betrieb nebenan, 
leifert das ding laut oszi und muter blinkender LED am invertierten 
eingang ein sauberes signal...

mal schaun wie lang :)

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie Peter D. schon sagte: die Zeitinformation für die nächste Sekunde 
'Zusammenbauen' und die im Hintergrund laufende RTC zur Sekunde 0 
synchronisieren.

@ Peter D.:
Ich benutze den ICP - Interrupt zum Messen der Impulse, hatte noch keine 
Störungen drauf, das Teil synchronisiert sich jede Minute richtig.

Autor: Aufreger deluxe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> die Zeitinformation für die nächste Sekunde 'Zusammenbauen'

Eher für die nächste Minute :)

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups.. richtig, Minute!
Nachtrag: den ICP nehme ich weil er einen Noise-Canceller hat.

Autor: Philipp Burch (nicht angemeldet) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Die hier im Forum genannte günstige Conrad-Uhr hat nach einem (kurzen?)
>Spannungsverlust 3 Stunden lang munter die falsche Zeit angezeigt, trotz
>Empfang.
>Erst nach einem Warmstart hat sie die richtige Zeit wiedergefunden.

Ich hab' auch so 'ne "Uhr" von Conrad als Wecker. Die stellt nicht mal 
selbst auf Sommer-/Winterzeit um, ob das Signal nun da ist oder nicht...

Autor: Christopher Schirner (schinken)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Apropos Sommer/Winterzeit....

Sendet der Frankfurter Turm die Sommer und Winterzeit auch richtig, oder 
nur das Flag, und ich darfs selbst zuaddieren/abziehen?

Autor: Worf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

mit dem Modul von Conrad (Also nicht die komplette Uhr, sonder dieses
DFC-77-Modul auf Platine) hatte ich da auch so meine Probleme, meins
gibt bei manchen Warmstarts Doppel-Impulse anstatt durchgehender Impulse
raus. Wenn man da keine Monitor-LED für den Empfang dranhat, merkt man
so etwas unter umständen später gar nicht, weil der Teil schon längst
verlötet ist und wundert sich dann über die gelegentlichen Fehlfunktion.

Viele der gekauften Uhren gehen übrigens nicht Synchron, finde ich bei
einer Funkuhr eigentlich einen Grund, sie umzutauschen. Da wird mit der
genauigkeit einer Atomuhr geworben und dann geht das Ding 1 Sekunde vor
oder nach, weil die nur ein mal pro Tag einen Abgleich machen und der
interne OSzillator schon nach Stunden krasse Abweichungen verursacht
(habe das anhand meiner synchron gehenden Uhr mit diversen Funkuhren
getestet).

@Christopher Schirner:

Die Zeit wirt natürlich korrekt gesendet, Du wirst also stets genau
die korrekte Zeit für die jeweils nächste Minute empfangen.

Mfg,

Worf

Autor: Martin Kreiner (maart)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die Zeit wirt natürlich korrekt gesendet, Du wirst also stets genau
> die korrekte Zeit für die jeweils nächste Minute empfangen.

und zusätzlich noch ein Flag. Soweit ich weiß gibt es noch ein Flag, das 
einen bevorstehenden Sommer/Winterzeitwechsel ankündigt.

Autor: Christopher Schirner (schinken)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab etz eh die Ideale lösung :)

Das DCF werte ich trotzdem per ext. Interrupt aus.

Und zwar soll der ausgelöst werden bei steigernder und fallender flanke

Bei der steigenden stell ich nen variablenwert auf 0, dieser wird im 1ms 
interrupt hochgezählt.

bei der fallenden schau ich obs 100 oder 200ms sind... dann wirds ins 
array geklopft...

Parität wird am ende des signals während der pause geprüft, und das 
"paket" als gültig oder nichtig markiert.

und störungen sollen ruhig kommen! paritätsprüfung FTW! :PPP

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Mensch hat ICP neu erfunden!

Autor: Christopher Schirner (schinken)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ICP? :P

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Christopher: die umgesetzte Lösung kann ich dir geben.
@unsichtbarer WM-Rahul (Gast): icp  = inductive coupled plasma ?!?

Autor: :::::::::: (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
icp = idiots can post

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ICP = InpuCapture, ein Timer-Modus bei diversen ATmegas...

Autor: ..... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh je. Mit ICP? Und wenn kleine Störungen im Signal sind? (Wurde glaube 
ich schon weiter oben erwähnt)

Autor: Aufreger deluxe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann sind halt Störungen im Signal. Die kommen durch 
Impulslängenbestimmung bzw. Paritätsprüfung raus, und dann erfolgt halt 
kein Abgleich der Uhr.

Autor: Christopher Schirner (schinken)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
is net weiter schlimm... hab extra n uhrequarz drauf, damit sollte es 
sogar reichen das ding einmal am tag... oder weniger abzugleichen...


ich mein die muss ja etz ne prezise sekundenweise was steuern...


wird nur ne röhrenuhr :)

Autor: Martin Kreiner (maart)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Bei der steigenden stell ich nen variablenwert auf 0, dieser wird im 1ms
>interrupt hochgezählt.

>bei der fallenden schau ich obs 100 oder 200ms sind... dann wirds ins
>array geklopft...

Bei dieser Vorgehensweise wird es aber problematisch alle 59 Bits 
einwandfrei zu empfangen.

>bei der fallenden schau ich obs 100 oder 200ms sind... dann wirds ins
>array geklopft...

und wenn es nur 50ms waren (da Störung)? Beim nächsten Flankenwechsel 
wird die Zählvariable doch wieder auf null gesetzt.

Gruß, Martin

Autor: Christopher Schirner (schinken)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zu vermutung 1:

warum sollte es da probleme geben?

zu vermutung 2:

Soll doch ne störung kommen... wenn die parität meint das stimmt net, 
kann mir die sequenz am a*+* vorbeigehen :PPP

Autor: Martin Kreiner (maart)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@schinken: zu Vermutung 1: Ergibt sich aus Vermutung 2:
>Soll doch ne störung kommen... wenn die parität meint das stimmt net,
>kann mir die sequenz am a*+* vorbeigehen

Eine Sequenz dauert immerhin 60 Sekunden....

Gruß, Martin


PS: ich muß jetzt weg, schaue später noch mal rein.

Autor: Christopher Schirner (schinken)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hab heute meine Auswertung programmiert.
Funktioniert erste Sahne :)

Erkennt auch ohne probleme fehler bei der übertragung......

andere frage, konnte nichts dazu finden, welches BIT gibt an, das ein 
minutenwechsel stattfindet? Und wenn das auftritt, muss ich sofort beim 
empfang darauf reagieren, oder erst am ende der sequenz?

Autor: Martin Kreiner (maart)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was meinst du  denn mit Minutenwechsel?

Autor: Schinken (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja nach irgendwas muss ich ja meine sekunden synchronisieren, und ich 
glaub mich daran erinnern zu können das es ein bit gibt, das einen 
minutenwechsel ... also sekunde 59 auf 00 signalisiert.

jetzt ist die frage ob ich direkt beim empfang des bits reagieren muss, 
oder am ende der sequenz...

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Du hättest vielleicht doch die Beschreibung des DCF77-Formates zu Ende 
leden sollen... ;)

Der Beginn der neuen Minute ist der erste Sekundenimpuls. Der erste 
Sekundenimpuls ist der nach dem FEHLENDEN 59. Sekundenimpuls...

Übertragen wird jeweils die folgende Minute, Du mußt also Deine Uhr mit 
Beginn der neuen Sequenz auf die schon übertragene Zeit setzem.

Gruß aus Berlin
Michael

Autor: Martin Kreiner (maart)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was hat denn die Variable "iDCFSequenz" für eine Funktion? Wird die jede 
Millisekunde hochgezählt?

Autor: Schinken (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael U.

Also wenn ich den ersten impuls empfang, stell ich meine Sekunden auf 
null, und meine Minute +1?

Martin:

Ja die wird im Millisekundenbereich hochgezählt, und dann beim ende der 
sequenz geprüft wie groß die zahl ist... dadurch wird 1 und 0 
entschieden :)

Autor: Martin Kreiner (maart)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ja die wird im Millisekundenbereich hochgezählt, und dann beim ende der
> sequenz geprüft wie groß die zahl ist... dadurch wird 1 und 0
> entschieden :)

Diese Entscheidung wird doch mit "iSignalLength" gefällt?


Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

@Schinken:

Du kiest (wie auch immer) die Impulse ein und wertest aus. Beginn der 
Impulsfolge ist ja der erste Impuls nach dem fehlenden 59. Impuls.
Wenn alle 59 Impulse richtig empfangen wurden und dekodiert wurden und 
alle Prüfungen ok sagen, dann ist der nächste Impuls die 0te Sekunde und 
die empfangenen Daten enthalten Tag/Datum/Stunde/Minute, die eben da 
beginnt.

Also Sekunde (und evtl. Vorteiler) auf 0 und die dekodierte Minute und 
Stunde in die Uhrzeit.

Gruß aus Berlin
Michael

Autor: Schinken (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael U.

ich verstehe ^^ mit-einbau

 Martin Kreiner:

ja, bei 200ms ist es eine 1, bei 100ms eine 0.
Ich hab die Entscheidung mit <150 gefällt, da es durch die erkennung 
etc.  leicht variieren kann (is aber an sich egaaal :))

Autor: Günter R. (galileo14)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zur DCF77-Uhrenanwendung kann ich euch noch ein paar Tipps geben. Man 
hat praktisch zwei Uhren im System: eine RTC und eine DCF77. Beide 
führen ihre Zeitdaten vorzugsweise in je einer Struktur vom gleichen 
Typ. Die RTC baut man so auf, daß sie im Sekundentakt oder im 
Minutentakt aufgerufen werden kann, mit ihrer Zeitstruktur als 
Parameter. Die DCF77 schreibt ihre Zeitdaten nach jeder Minute auch in 
ihre (eigene) Zeitstruktur (Sekunden sind 0).

Das Synchronisieren sollte man wie folgt machen: man benötigt eine 
Funktion, die die Zeitdifferenz zwischen zwei solchen Strukturen 
berechnet, in Sekunden. Dann läßt man bei jeder vollen Minute der DCF77 
diese Differenz ausrechnen; wenn die Abweichung größer als ein 
Schwellenwert ist (z.B. größer als 2 Sekunden - soviel sollte man 
tolerieren), läßt man - gesteuert über Flags - die RTC schneller oder 
langsamer laufen, und zwar für soviele Timer-Ticks, wie die Abweichung 
ergeben hat - das kann man ja vorher schon ausrechnen (man kann z.B. die 
Timer-Ticks doppelt so schnell oder halb so schnell laufen lassen, je 
nach Richtung der Abweichung). Nach dieser vorausberechneten Zahl von 
Timer-Ticks ist die Abweichung exakt ausgeglichen.

Das ist ein großer Vorteil gegenüber der Primitiv-Synchronisierung durch 
Kopieren der DCF77-Zeitstruktur auf die RTC-Zeitstruktur, und zwar aus 
folgendem Grund: oftmals will man ja eine Funkuhr auch als Schaltuhr 
verwenden. Dabei hat man dann eine Zeittabelle, in der die Schaltzeiten 
stehen (u.U. sekundengenau aufgelöst) und die bei jedem Timer-Tick (also 
bei jeder vollen Sekunde) komplett durchgearbeitet wird. Bei Gleichheit 
wird ein Schaltvorgang ausgelöst. Wenn man die Primitiv-Synchro 
verwendet, könnte es theoretisch passieren, daß durch Überschreiben der 
RTC-Zeitstruktur eine Tabelleneintragung der Alarmtabelle überhaupt 
nicht "drankommt", weil ihre Zeit übersprungen wird, oder sie wird 
doppelt ausgeführt (wenn die RTC nämlich zu schnell geht, dann würde sie 
ja zurückgesetzt werden). Bei der von mir beschriebenen Methode des 
Schneller- oder Langsamer-Laufenlassens kommt jedoch "jede Zeit dran", 
nichts wird übersprungen oder doppelt ausgeführt (ist halt aufwendiger).

Das Problem der Störungen der DCF77 kann man wie folgt lösen:

Man sollte die RTC als Funktion programmieren, die als Parameter einen 
Zeiger auf eine Zeitstruktur übergeben bekommt, und die pro Aufruf die 
angepeilte Zeitstruktur um eine Sekunde oder um eine Minute erhöht, 
gesteuert durch einen zusätzlichen Parameter (bei Erhöhung um eine 
Minute setzt sie die Sekunde auf 0). Dann kann man diese RTC-Funktion 
immer dann, wenn die DCF77 eine volle Minute meldet, auf eine Kopie der 
DCF77-Zeitstruktur vom vorigen Mal anwenden (mit der 
Minuten-Inkrementierung), danach muß sie die gleiche Zeit wie die der 
DCF77 führen, wenn die DCF77 das richtige empfangen hat (d.h. man 
überprüft, ob die DCF77 nach jedem Minutenempfang auch wirklich eine um 
genau eine Minute erhöhte Zeit ausweist). Das muß die DCF77 z.B. 10-mal 
hintereinander ohne Unterbrechung bringen (Zähler setzen!). Gibt es eine 
Störung und ein Empfang fällt aus (das merkt man am Vergleich sofort), 
so fängt der Vorgang wieder von vorne an. Erst dann, wenn die DCF77 
10-mal in Folge eine korrekte (d.h. um immer genau eine Minute erhöhte) 
Zeit hervorgebracht hat, wird nach dem 10. Mal diese Zeit als "gültig" 
erachtet und die RTC dann erstmals durch Kopieren der Zeitstrukturen 
gesetzt (nach dem Einschalten des Systems), und ein Gültigkeitsflag wird 
gesetzt, sodaß frühestens jetzt Schaltuhrfunktionen laufen.

Ab diesem Zeitpunkt kann nun die DCF77 wieder ausfallen - die 
10-Mal-Regel läuft aber immer mit und bewirkt, daß Resynchronisationen 
nur laufen, wenn die DCF77-Zeit 10-fach richtig war, siehe oben.

(Nebenbei: wird bei einem Zeitvergleich eine zu große Abweichung 
festgestellt, dann wird ausnahmsweise doch kopiert statt der 
Schneller/Langsamer-Methode, unter Inkaufnahme ausgefallener 
Schaltvorgänge.)

Parallel dazu läuft ein zweiter Zähler, der zählt, wie lange die DCF77 
ausgefallen war und aufgrund von Störungen keine gültige Zeit erbracht 
hat. Bei meinen Systemen habe ich diesen Zähler auf äquivalent 10 
Stunden gesetzt; d.h. wenn 10 Stunden lang die DCF77-Zeit nicht 
synchronisiertauglich war (nach der obigen 10-Mal-Regel), wird das 
Gültigkeitsflag wieder heruntergeschraubt und kritische 
Schaltuhrfunktionen werden u.U. verhindert - aber das muß man von 
Anwendung zu Anwendung entscheiden, ob soetwas sinnvoll ist.

Das Gültigkeitsflag steuere ich so: nach dem Einschalten (die 
RTC-Zeitstruktur steht dann auf 0,0,0,0...) ist das Gültigkeitsflag '0'. 
Sobald der erste Empfang der DCF77 eintrifft, wird durch Kopieren die 
RTC gesetzt und das Gültigkeitsflag auf '1'; nun kann die Zeit bereits 
am Display angezeigt werden, ist aber noch nicht 100%-ig zuverlässing, 
und Schaltfunktionen finden noch nicht statt. Erst nach dem 10. gültigen 
Empfang (siehe oben) wird das Gültigkeitsflag auf '2' gesetzt und 
Schaltfunktionen können stattfinden sowie Synchronisationen mit der 
Schneller/Langsamer-Methode. Wenn 10 Stunden lang kein DCF77-Empfang 
nach der 10-Mal-Regel stattfand, wird das Gültigkeitsflag wieder auf '1' 
zurückgesetzt (ein Indikator im Display weist das aus).

Noch ein Wort zu der Zeittoleranz von 2 Sekunden oder so: ich finde, man 
sollte von einer Funkuhr keine "Atomgenauigkeit" fordern. Ihr Vorteil 
liegt doch ganz woanders, nämlich darin, daß sie unbeachtet und 
bedienerlos nach dem Einschalten (oder einem Wieder-Einschalten nach 
einem Stromausfall) automatisch wieder ihre Zeit (und das Datum!) 
findet. Ob sie 2 Sekunden vor- oder nachgeht, ist doch meistens 
bedeutungslos.

Das sind meine Gedanken, und meine Erfahrungen, zum Umgang mit 
DCF77-Systemen (klar, es gäbe noch mehr zu sagen).

Günter



Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>
> Dabei hat man dann eine Zeittabelle, in der die Schaltzeiten
> stehen (u.U. sekundengenau aufgelöst) und die bei jedem Timer-Tick (also
> bei jeder vollen Sekunde) komplett durchgearbeitet wird. Bei Gleichheit
> wird ein Schaltvorgang ausgelöst. Wenn man die Primitiv-Synchro
> verwendet, könnte es theoretisch passieren, daß durch Überschreiben der
> RTC-Zeitstruktur eine Tabelleneintragung der Alarmtabelle überhaupt
> nicht "drankommt", weil ihre Zeit übersprungen wird, oder sie wird
> doppelt ausgeführt (wenn die RTC nämlich zu schnell geht, dann würde sie
> ja zurückgesetzt werden). Bei der von mir beschriebenen Methode des
> Schneller- oder Langsamer-Laufenlassens kommt jedoch "jede Zeit dran",
> nichts wird übersprungen oder doppelt ausgeführt (ist halt aufwendiger).

Oder aber man speichert sich beim Zeiteintrag ein zusätzliches
Flag mit der Bedeutung: wurde schon abgearbeitet und vergleicht
die Zeiten nicht auf Gleichheit, sondern auf Größer. Nachts
um Mitternacht, wenn die bereits DCF korrigierte Zeit 00:00
anzeigt, werden alle Flags zurückgesetzt.

Dann braucht man nicht mehr diese 'komplizierte' Synchronisierung
und kann zu jeder vollen Minute die RTC mit der DCF korrigieren.

Rein Interessehalber:
Wie funktioniert dein Schema eigentlich in der Nacht der
Sommerzeitumstellung? Wie lange braucht die RTC bis sie
den Gangunterschied von 1 Stunde ausgeglichen hat?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Nebenbei: wird bei einem Zeitvergleich eine zu große Abweichung
> festgestellt, dann wird ausnahmsweise doch kopiert statt der
> Schneller/Langsamer-Methode, unter Inkaufnahme ausgefallener
> Schaltvorgänge.)

Das beantwortet dann meine Frage.
Hatte vorhin noch nicht soweit gelesen.


Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.