Forum: Mikrocontroller und Digitale Elektronik DCF77 Code von Peter Dannegger?


von eagle user (Gast)


Lesenswert?

Joachim B. schrieb:

> Aber ich nutze viel aus dem Netz, Fleury Dannegger (Danke an diese)
> und lerne davon auch mal mehr mal weniger.
>
> Erste Versuche selbst DCF77 entschlüsseln am PC, später nutze ich nur
> noch den genialen Code von PeDa.

Hast du / hat jemand evt. einen Link zu diesem Code, bitte? Meine 
Suchmaschine findet ungefähr eine Zillion DCF-Dekoder, aber welcher ist 
der geniale?

von Bernd (Gast)


Lesenswert?

eagle user schrieb:
> Joachim B. schrieb:
>
>> Aber ich nutze viel aus dem Netz, Fleury Dannegger (Danke an diese)
>> und lerne davon auch mal mehr mal weniger.
>>
>> Erste Versuche selbst DCF77 entschlüsseln am PC, später nutze ich nur
>> noch den genialen Code von PeDa.
>
> Hast du / hat jemand evt. einen Link zu diesem Code, bitte? Meine
> Suchmaschine findet ungefähr eine Zillion DCF-Dekoder, aber welcher ist
> der geniale?

Warte nur ein Weilchen, dann kommt der höchst geniale Schöpfer selbst, 
um sein Werk zu loben.

von Harald W. (wilhelms)


Lesenswert?

eagle user schrieb:

> Hast du / hat jemand evt. einen Link zu diesem Code, bitte?

Falls Du Peter Danegger meinst, frag ihn doch selbst.
Er ist regelmäßiger Besucher dieses Forums.

von Joachim B. (jar)


Lesenswert?

Beitrag "DCF77 Uhr in C mit ATtiny26"

lese den ganzen Thread!
Korrekturen könnten noch drin sein:
Beitrag "Re: DCF77 Uhr in C mit ATtiny26"

ich lese die in der ISR mit der Tastenentprellroutine alle 10ms bullet 
proof von Dannegger ein, dann ergibt sich 6-12 Impulse für 0 Bit und 
17-25 Impulse für 1 Bit in die scan Routine bis alle Bits gesammelt sind

von eagle user (Gast)


Lesenswert?

Danke für die prompte Antwort!

Mir scheint, dieser Dekoder ist für seine Größe ziemlich zuverlässig, so 
weit, so gut. Dafür braucht er aber einen ziemlich guten Empfang.

Ich suche eigentlich einen, der nur alle paar Sekunden mal ein richtiges 
Bit braucht. Erstens sollte er auch zerstückelte Impulse erkennen, zum 
Beispiel ist (90ms = 1, 10ms = 0, 80ms = 1) ziemlich sicher eine 1. Dann 
müsste man irgendwie die extrem hohe Redundanz in den Daten nutzen. 
Ungefähr die Hälfte aller Bits ändert sich ja nur alle 60 Minuten.

Es kommt noch schlimmer: die eigene Uhr wird ja höchstens um wenige 
Minuten falsch gehen (sonst ist sie kaputt). Man kennt also alle Bits 
bis auf die Minuten-Bits und ca. 14 am Anfang schon, bevor man sie 
empfangen hat. Selbst die Minuten-Bits kennt man ungefähr. Wenn man ±3 
Minuten Uhren-Fehler zulässt, gibt es nur 7 gültige Bitkombinationen. 
Damit müsste doch auch bei schlechtem Empfang noch was gehen.

Gute RTC-Chips speichern den Zeitpunkt des Stromausfalls. Damit könnte 
man den max. Fehler von der Dauer der stromlosen Zeit abhängig machen. 
Jetzt aber nichts wie weg hier...

von Stefan F. (Gast)


Lesenswert?

Welches Problem willst du eigentlich lösen?

Wenn der Funkempfang schlecht ist, dann macht man was anderes.

Für eine gewöhnliche Uhr genügt es doch locker, wenn sie einmal pro 
Woche die Zeit synchronisieren kann.

Wenn dein Empfang so schlecht ist, dass nicht einmal dies ohne 
großartige Tricks gelingt, dann lass es besser ganz bleiben.

Es gibt auch andere Methoden, langzeit-stabile Uhren zu bauen. Nur um 
ein Beispiel zu nennen: Du kannst die Netzfrequenz aus der Steckdose als 
Taktgeber verwenden.

von eagle user (Gast)


Lesenswert?

Stefan U. schrieb
:
> Welches Problem willst du eigentlich lösen?

Halbwegs genaue Uhrzeit ohne NTP (es gibt keine Verbindung nach außen) 
und GPS (vernünftiger Blitzschutz für die Außenantenne ist zu 
aufwendig).

> Für eine gewöhnliche Uhr genügt es doch locker, wenn sie einmal pro
> Woche die Zeit synchronisieren kann.

Eben, immer dann, wenn der Empfang nicht ganz so schlecht ist.

> Wenn dein Empfang so schlecht ist, dass nicht einmal dies ohne
> großartige Tricks gelingt, dann lass es besser ganz bleiben.

Nachdem das nur Software-Tricks sind, kann man die doch ruhig 
spendieren.

> Es gibt auch andere Methoden, langzeit-stabile Uhren zu bauen. Nur um
> ein Beispiel zu nennen: Du kannst die Netzfrequenz aus der Steckdose als
> Taktgeber verwenden.

Im Prinzip ja, aber
 * addieren sich die Fehler durch Netzausfälle
 * braucht es ziemlich gute Filter gegen Störungen
 * braucht es Filter mit Zeitkonstanten von Tagen gegen die täglichen 
Schwankungen der Netzfrequenz. Und selbst dann bleibt schon mal ein 
Fehler von 16 Sekunden. Benutzer haben sich schon mal an einem Fehler 
von 2 Sekunden gestört.

http://www.netzfrequenz.info/allgemein/abweichungen-der-netzfrequenz-2.html

von Peter D. (peda)


Lesenswert?

eagle user schrieb:
> Ich suche eigentlich einen, der nur alle paar Sekunden mal ein richtiges
> Bit braucht.

Dann sollte es reichen, wenn Du die fehlende 59 Sekunde sicher erkennst.
Meine Erfahrung mit den standard Empfängern ist, daß der Unterschied 
zwischen gestörtem Empfang und totalem Chaos sehr gering ist. D.h. man 
kann einen riesen Aufwand treiben, ohne eine merkbare 
Empfangsverbesserung.
Am besten synchronisiert man nachts zwischen 2.00-4.00 Uhr und ein 
LCD/TV in der Nähe sollte tunlichst aus oder in Standby sein.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

> Meine Erfahrung mit den standard Empfängern ist, daß der Unterschied
> zwischen gestörtem Empfang und totalem Chaos sehr gering ist.

Meine auch. Wenn der Empfang nicht ausreicht, brauchst du eine ganz 
andere Lösung.

Schonmal daran gedacht, eine erheblich größere Antenne zu verwenden? Zum 
Beispiel eine Luftspule statt eine mit Ferritkern.

http://forum.db3om.de/ftopic8801.html
https://sophisticatedcircuits.wordpress.com/category/empfangerbasteln-dcf77/

von Stefan F. (Gast)


Lesenswert?

Ich zittiere mal von der zweiten Seite:

"Das DCF77-Signal zu empfangen ist nicht schwer, weil bereits eine 
einfache kleine Ferritspule etwa 1mV Empfangsspannung macht. Mit einer 
großen Luftspule bekommt man locker 5mV. Ich habe 100m Draht so 
aufgewickelt, dass sich ein Durchmesser von ca. 16cm ergab. Damit hat 
man dann auch eine gute Richtwirkung, man dreht die Antenne so, dass die 
Empfangsspannung maximal oder eventuelle Störungen minimal werden."

von Oldie (Gast)


Lesenswert?

Ist schon niedlich, was da für Hoffnungen in die Software
eines "genialen Codes" gesetzt werden, wenn es keinen
vernünftigen Empfang gibt.

Im Endeffekt kommt immer noch der 80...100 Jahre alte
Amateurfunkerspruch zum Tragen:
Der beste Verstärker ist eine gute Antenne.

Wobei DCF in Deutschland und den Nachbarländern nun wirklich
keine hohen Antennen-Ansprüche stellt!
Die Ferritantenne aus dem billigsten Supermarkt-DCF-Wecker kann
man über zig Meter Kabel IRGENDWIE außerhalb eines geschirmten,
oder störverseuchten Gebäudes anbringen. Schon gehts.

Schau dir doch einfach mal auf dem Oszilloskop ein DCF-
Empfängersignal im gut abschwächenden Stahlbetonbau mit einem
Dauerstörer und einigen Breitband-Pulsstörungen an.

Der Dauerstörer kehrt ab und zu die Puls-Polarität um,
Die Breitbandstörer fügen "Füllimpulse" ein...

Die geniale Lösung wird dann genialste Korrelationsrechnungen
über Stunden erfordern. Wobei die Korrelation sich schon auf
eine GUTE Zeitbasis verlassen muss...

von c-hater (Gast)


Lesenswert?

Oldie schrieb:

> Ist schon niedlich, was da für Hoffnungen in die Software
> eines "genialen Codes" gesetzt werden, wenn es keinen
> vernünftigen Empfang gibt.

Das ist Unsinn. Natürlich kann man mit einem guten Code die reichlich 
vorhandene temporale Redundanz des DCF77-Signals sehr wohl vorteilhaft 
verwenden, weit jenseits der üblichen Implementierungen, die nur ein 
Telegramm auswerten und dabei oft nichtmal für dieses eine Telegramm 
alle möglichen Plausibilitäts-Checks durchführen (also nichtmal die 
gesamte implizite Redundanz nutzen).

> Im Endeffekt kommt immer noch der 80...100 Jahre alte
> Amateurfunkerspruch zum Tragen:
> Der beste Verstärker ist eine gute Antenne.

Das ist wohl wahr. Aber: das eine schliesst doch das andere nicht aus. 
Was spricht deiner Meinung nach dagegen, sowohl eine gute Antenne als 
auch guten Code zu verwenden?

> Wobei DCF in Deutschland und den Nachbarländern nun wirklich
> keine hohen Antennen-Ansprüche stellt!

Eben. Das Problem hier sind vor allem Störungen aus dem Nahfeld, gegen 
die man außer der Ausnutzung der Richteigenschaften der Antenne 
hardwaremäßig leider nur relativ wenig tun kann. Gerade hier wird eine 
sinnvolle Implementierung des Decoders umso wichtiger.

> Die Ferritantenne aus dem billigsten Supermarkt-DCF-Wecker kann
> man über zig Meter Kabel IRGENDWIE außerhalb eines geschirmten,
> oder störverseuchten Gebäudes anbringen. Schon gehts.

Wenn die Störung z.B. nicht gerade vom Telekom-Schaltkasten vor dem 
Gebäude kommt...

> Die geniale Lösung wird dann genialste Korrelationsrechnungen
> über Stunden erfordern. Wobei die Korrelation sich schon auf
> eine GUTE Zeitbasis verlassen muss...

Ach watt, das ist doch Unsinn. Die lokale Zeitbasis darf über den 
Empfangszeitraum nicht mehr als eine Minute abweichen. Wenn man also 
z.B. 8 Telegramme als Basis nehmen will, muss der Fehler der lokalen 
Zeitbasis nur kleiner als 1/8=12,5% sein. Das ist nichtmal für die 
werksseitig nur mäßig vorkalibrierten RC-Oszillatoren der ollen AVRs ein 
ernsthaftes Problem.

Und die ausführliche "Korrelationsanalyse" über 8 Telegramme dauert auf 
'nem AVR8 irgendwas in der Größenordnung von 10.000 Takten. Bei 8Mhz 
Systemtakt sind das 1,25ms. Das ist sehr weit weg von den Stunden, die 
du hier behauptest.

von eagle user (Gast)


Lesenswert?

Oldie schrieb:

> Im Endeffekt kommt immer noch der 80...100 Jahre alte
> Amateurfunkerspruch zum Tragen:
> Der beste Verstärker ist eine gute Antenne.
Ich will die Störungen aber nicht verstärken ;)

> Schau dir doch einfach mal auf dem Oszilloskop ein DCF-
> Empfängersignal im gut abschwächenden Stahlbetonbau mit einem
> Dauerstörer und einigen Breitband-Pulsstörungen an.
>
> Der Dauerstörer kehrt ab und zu die Puls-Polarität um,
> Die Breitbandstörer fügen "Füllimpulse" ein...
So sieht es im wirklichen Leben wohl aus.

> Die geniale Lösung wird dann genialste Korrelationsrechnungen
> über Stunden erfordern. Wobei die Korrelation sich schon auf
> eine GUTE Zeitbasis verlassen muss...
Wo wäre das Problem? 1Hz mit max. 5ppm kommt aus dem RTC-Chip für 2.95 
Euro und solange es nur Stunden dauert -- wir haben doch Zeit. Im 
Wirklichkeit sollte es natürlich kontinuierlich laufen.

Übrigens will man die lokale Uhr garnicht stellen, sondern nur langsam 
nachziehen. Das geht schon, sobald man das Vorzeichen des Fehlers 
einigermaßen sicher erkennen kann.

c-hater schrieb:

> Ein aufwendiger Dekoder könnte bessere Ergebnisse liefern.

Das hört sich gut an, danke. Schade, das es nur in Assembler geht ;)

von Oldie (Gast)


Lesenswert?

c-hater schrieb:
> Und die ausführliche "Korrelationsanalyse" über 8 Telegramme dauert auf
> 'nem AVR8 irgendwas in der Größenordnung von 10.000 Takten. Bei 8Mhz
> Systemtakt sind das 1,25ms. Das ist sehr weit weg von den Stunden, die
> du hier behauptest.

Eine vertrauenswürdige Standardlösung wartet auf 2 komplette
Telegramme, die auf Fehlerfreiheit UND Plausibilität der
aufeinanderfolgenden Zeitangaben geprüft wurden, bevor es eine Uhr
nachstellt. Dauert schon mal 2...3 Minuten.

Mag ja sein, dass das Auswerten von 8 leicht gestörten
Telegrammsequenzen in 1,25 ms erledigt ist und zum Erfolg führt.
Insgesamt hast du aber 8 Minuten (+ 1,25 ms) gebraucht!

Nützt aber nix, wenn es schwer verstümmelte Signale sind.
Da musst du über Stunden nach Regelmäßigkeiten suchen, die dir
im Vergleich mit möglichen (!) Telegrammsequenzen eine
ausreichende Wahrscheinlichkeit liefern.
Für die Auswertung ALLER Signalflanken über eine Stunde brauchst
du eine Zeitbasis, die nach 3600 s noch deutlich besser, als
100 ms (1/36000 = 28 ppm) ist, also vielleicht 3 ppm.
Und ne Menge SRAM.

Das meinte ich mit "genialste Korrelationsrechnungen".

von holger (Gast)


Lesenswert?

>> Ein aufwendiger Dekoder könnte bessere Ergebnisse liefern.
>
>Das hört sich gut an, danke. Schade, das es nur in Assembler geht ;)

Wie kommst du zu dieser schwachsinnigen Erkenntnis?

von chris (Gast)


Lesenswert?

Wenn es dir egal ist, dass der code ca 2k ist,  dann Kann ich den code 
posten.

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.