Forum: Mikrocontroller und Digitale Elektronik DCF77 Dekodierung mittels AVR


von Daniel H. (danyag)


Lesenswert?

Hey,
aktuelle beschäftige ich mich damit das DCF77-Signal zu empfangen, zu 
dekodieren und bei "Plausibilität" die Zeit an eine RTC zu übertragen.

Soweit klappt das alles schon ganz gut.. aber natürlich hätte ich da 
auch noch Fragen ;).

1. Wie kann man am geschicktesten überprüfen, ob die empfangenen und 
dekodierten Daten auch wirklich korrekt sind?
Die Parität-Bits werden natürlich überprüft. Sollte ich ansonsten 
einfach nur schauen, dass die neu empfangenen Daten zu denen passen die 
bereits vorliegen?

2. Dienen die Bits 17 und 18, die sich auf die MEZ/MESZ beziehen, nur 
der Information?
- ist die übertragene Uhrzeit bereits korrekt (in Deutschland geltende 
Zeit) oder muss ggf. eine Art Offset hinzugezogen werden?


Mit freundlichen Grüßen
Daniel

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Daniel H. schrieb:
> Sollte ich ansonsten
> einfach nur schauen, dass die neu empfangenen Daten zu denen passen die
> bereits vorliegen?

Ja, einfach gegen die letzte empfangene Minute gegenchecken.

> 2. Dienen die Bits 17 und 18, die sich auf die MEZ/MESZ beziehen, nur
> der Information?

Ja.

> - ist die übertragene Uhrzeit bereits korrekt (in Deutschland geltende
> Zeit) oder muss ggf. eine Art Offset hinzugezogen werden?

Ist bereits korrekt - müsstest Du eigentlich schon selbst bemerkt haben 
;-)

Also ist kein Offset hinzuzurechnen.

von Stefan F. (Gast)


Lesenswert?

> Wie kann man am geschicktesten überprüfen, ob die
> empfangenen und dekodierten Daten auch wirklich korrekt sind?

Zum einen sind da natürlich die Prüfbits. Zum Anderen solltest du die 
empfangene Zeit mit einer bekannten Zeit vergleichen. Ist die Abweichung 
mur wenige Sekunden, dann hast du warscheinlich korrekt empfangen. Ist 
die Abweichung >1 Minute, dann gehe einen Schritt weiter:

Empfange zwei aufeinanderfolgende Telegramme, und vergleiche, um wie 
viele Minuten sie sich unterscheiden. Das müsste exakt eine Minute sein. 
Wenn das der Fall ist, kannst du diesen Wert zur Anzeige bringen.

Oder (für ganz paranoide) machst du das halt dreimal oder fünf mal. 
jedes telegramm muss genau eine Minute weiter sein, als das von davor.

Es gibt auch geschicktere Methoden, die bei heftigen 
Übertragungsstörungen schneller zum Erfolg führen. Doch in der Praxis 
bin ich sicher, dass das so ausreicht.

> Dienen die Bits 17 und 18, die sich auf die MEZ/MESZ beziehen,
> nur der Information?

Ja. Alle Bits dienen nur der Information - genau genommen.

> ist die übertragene Uhrzeit bereits korrekt

Ja, die übermittelten Zahlen entspechen dem, was man auf der 7-Segemtn 
Anzeige sehen will. Das Sommer/Winterzeit Flag zeigen Uhren 
normalerweise nicht an. Du wirst es aber brauchen, wenn du die 
empfangenen Daten durch Vergleich mit der aktuellen uhrzeit validieren 
willst. Denn nach der Umstellung ist die Zeitabweichung ja nicht kleiner 
als 1 Minute, sondern größer als 1 Stunde.

von Peter D. (peda)


Lesenswert?

Störungen sind asynchron zum Nutzsignal, d.h. die Pulsbreite (100ms, 
200ms) oder die Pulsfolge (1000ms, 2000ms) sowie die Pulsanzahl (59) 
stimmen nicht mehr. Man legt also Fehlerbereiche fest, in denen die 
Zeiten liegen müssen.

von Daniel H. (danyag)


Lesenswert?

Alles klar.. vielen Dank ;)

Frank M. schrieb:
> Ist bereits korrekt - müsstest Du eigentlich schon selbst bemerkt haben
> ;-)

Jap, mir ist wohl aufgefallen dass die Zeit zu stimmen scheint. Wollte 
nur sichergehen, dass die Uhrzeit auch bei der nächsten Zeitumstellung 
korrekt ist und ich jetzt gerade nicht einfach "Glück" hatte ;).

von Daniel H. (danyag)


Lesenswert?

Stefan U. schrieb:
> Empfange zwei aufeinanderfolgende Telegramme, und vergleiche, um wie
> viele Minuten sie sich unterscheiden. Das müsste exakt eine Minute sein.
> Wenn das der Fall ist, kannst du diesen Wert zur Anzeige bringen.

Dann werde ich das mal implementieren.

Stefan U. schrieb:
> Ja. Alle Bits dienen nur der Information - genau genommen.

Da stimmt natürlich - verzeih mir bitte die sprachliche Ungenauigkeit ;)

Stefan U. schrieb:
> Du wirst es aber brauchen, wenn du die
> empfangenen Daten durch Vergleich mit der aktuellen uhrzeit validieren
> willst.

Gut, so hatte ich mir das auch gedacht.

Peter D. schrieb:
> Man legt also Fehlerbereiche fest, in denen die
> Zeiten liegen müssen.

Ich habe es momentan so gelöst, dass ich die folgenden Bereiche 
akzeptiere:
  40 -  130ms
 140 -  230ms
1500 - 2500ms

Wenn nach der Synchronisations ein kürzerer oder längerer Puls liegt 
oder die Pulszahl zwischen 2 Synchronisationen nicht genau 59 beträgt, 
wird der empfangene Teil verworfen.

von Peter D. (peda)


Lesenswert?

Daniel H. schrieb:
> Ich habe es momentan so gelöst, dass ich die folgenden Bereiche
> akzeptiere:
>   40 -  130ms
>  140 -  230ms
> 1500 - 2500ms

Da fehlt noch ne Zeitprüfung. Auch die Abstände der Datenpulse müssen 
stimmen.
Ich würde die Bereiche enger setzen.

von Stefan R. (1994rstefan)


Lesenswert?

Daniel H. schrieb:
> die Pulszahl zwischen 2 Synchronisationen nicht genau 59 beträgt

Achtung: In manchen Fällen können es auch 60 sein und zwar immer dann, 
wenn es eine Schaltsekunde eingefügt werden muss.

> Bei einer Minute ohne Schaltsekunde wird zur 59. Sekunde keine Sekundenmarke 
gesendet. Bei einer Minute mit Schaltsekunde wird zur 59. Sekunde eine „0“ und zur 
60. Sekunde keine Sekundenmarke gesendet.
https://de.wikipedia.org/wiki/DCF77

von Cube_S (Gast)


Lesenswert?

> Zum einen sind da natürlich die Prüfbits. Zum Anderen solltest du die
> empfangene Zeit mit einer bekannten Zeit vergleichen.

Wozu das. Macht nur Probleme beim Start und bei der Zeitumstellung. Ich 
prüfe die 100/200ms Signale auf Plausiblität, die ausfallende 59. 
Sekunde, die obligatorischen Einsen und die Paritätsbits. Wenn das alles 
stimmt, stimmt's auch. Ich habe noch nie eine falsche Uhrzeit auf meiner 
Uhr gesehen (seit 2-3 Jahren)

von Stefan F. (Gast)


Lesenswert?

> Wozu das?

Wenn der Empfang auf diese Weise schon nach einer Minute erfolgreich 
ist, kann man danach den Funkempfänger aus schalten und spart 
Batteriestrom.

Ist natürlich nur bei Batteriebetrieb von Bedeutung.

von Joachim B. (jar)


Lesenswert?

Daniel H. schrieb:
> 1. Wie kann man am geschicktesten überprüfen, ob die empfangenen und
> dekodierten Daten auch wirklich korrekt sind?

mit Verstand?

gibt es 27:66 Uhr?
gibt es den 30.2.Jahr?(beliebig)
gibt es einen Wochentag8?

das ist ja neben den Paritätsbits leicht zu prüfen.

Ich hatte durch Störungen und falschen low high Grenzen solche Werte 
empfangen können, verschliffene Syncronsignale.

ausserdem ist eine empfangene Zeit die 2-3 mal in plausiblen Abständen 
kommt dann vermutlich passend

Zeitempfang Uhrzeit 1
5 Minuten später mit timer gezählt ergibt diese Zeit auch 5 Minuten plus

und noch mal 3 Minuten später (Timer) ist es wieder 3 Minuten später 
Empfang, dann sollte der Empfang doch stimmen.

: Bearbeitet durch User
von Cube_S (Gast)


Lesenswert?

> Ich hatte durch Störungen und falschen low high Grenzen solche Werte
> empfangen können, verschliffene Syncronsignale.

Das ist mir nie gelungen. Wenn der Empfang schlecht war (keine 
Seltenheit), dann scheiterte es meist schon an der 100ms-Grenze. Die 
Signale waren fast immer kürzer.

Wenn nicht (weil man ja zwangsweise irgendwo in der Minute anfängt zu 
empfangen) dann scheiterte es an einem der Prüf- oder Paritätsbits.

Nie beobachtet habe ich ein Scheitern an der 59. Sekunde (was die letzte 
Station wäre).

Von daher sehe ich keinen Grund für weitere Plausibilitätsprüfungen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.