Hi,
ich hab gerade mal eins von den DCF77-Modulen von Reichelt in Betrieb
genommen. Als erstes habe ich mal das Signal im uC direkt auf ne LED
ausgegeben. Schließlich ist es immer ne gute Idee, wenn man einen
Algorithmus zum dekodieren eines Signals schreiben will, sich erstmal
ein Bild von der zu erwartenden Signalqualität zu machen ;-)
Aber was ich da gesehen habe, was schlimmer, als ich erwartet hab. Man
erkennt deutlich den 1 Hz Takt. Aber hin und wieder sind deutlich
Störungen zu sehen. Und für die Dekodierung auf eine ganze Minute ohne
eine falsche Flanke zu hoffen scheint mir mehr als gewagt. Nun eine
Dekoderroutine für ein ideales DCF Signal zu schreiben, dürfte ohne
große Probleme gehen. Aber wie könnte ich die Dekodierung etwas robuster
gestalten? Welche Filtermaßnahmen könnten sich realisieren lassen?
Kommerzielle Funkuhren empfangen schließlich auch eine Zeit in
Umgebungen, in denen mein DCF Modul definitiv kein sauberes Signal mehr
liefert.
Wenn ich nun einfach die Checksummen und Patity-Bits auswerte und
ungültige Datensätze verwerfe, könnte es unter umständen ziemlich lange
dauern, bis endlich mal ne gültige Zeit empfangen wurde.
Zuerst dachte ich daran, für jedes empfangene Bit einen IIR Filter zu
implementieren. Also für jedes Bit an einer bestimmten Position den
Mittelwert über mehrere Wiederholungen berechnen. Würde 60 Byte RAM
kosten, also noch machbar. Aber der Ansatz hat ein großes Problem
(abgesehen von dem Problem mit den Spatzen und Kanonen): Nämlich sich
erst einmal korrekt auf die Bitpositionen zu synchronisieren. Außerdem
wird ja nicht immer das gleiche Signal wiederholt, sondern die Bits
verändern sich. Ein Tiefpass wäre also kontraproduktiv, wenn ich
wirklich die aktuelle Uhrzeit dekodieren möchte.
Hat noch jemand weitere Ideen, was man machen könnte? Wie machen das
normale Funkuhren?
Also mein Eigenbau-DCF-Wecker habe ich folgendermassen programmiert:
Bei einer etwas längeren Signalpause wird ein Reset ausgeführt. Dann
müssen alle 59 Pulse im Bereich von ca. 0,05 bis 0,25 Sekunden liegen
(weiss nicht mehr genau wie eng ich die Grenzen gelegt habe). Liegt auch
nur ein einziges ausserhalb von diesem Bereich, wird das ganze Paket
verworfen. Waren alle Signale gültig, wird ausgewertet. Zuerst werden
die Parity-Bits überprüft und ggf. abgebrochen. Dann wird überprüft, ob
die empfangene Zeit genau eine Minute vom letzten empfangenen Wert
abweicht. Ist es nicht exakt eine Minute, wird das Paket verworfen.
Zusätzlich müssen auch noch 3 aufeinanderfolgende Pakete all diese
Kriterien erfüllen.
Du siehst, es ist eine extrem strikte Implementation. Ich wollte ganz
sicher gehen, dass mich der Wecker niemals zu einer Falschen Zeit weckt
:-)
Tagsüber siehts mit dem Empfang ziemlich kacke aus, da kann es schonmal
vorkommen dass eine Stunde nicht genügt um sich zu synchronisieren.
In der Nacht, wenn alle Geräte im näheren Umkreis ausgeschaltet sind,
dauert es aber kaum mehr als diese drei notwendigen Minuten, nach 5
Minuten klappts eigentlich immer. Die Change, dass mal einen Tag lang
kein gültiges Signal reinkommt, ist praktisch Null.
Kommt aber natürlich auch drauf an wie gut du Empfang hast. Ich würde
dir aber mal raten, dir das Signal in der Nacht anzuschauen.
Übirgens verwende ich den Empfänger von Conrad, aber ich vermute mal das
ist in etwa der selbe wie deiner(?).
Urban B. schrieb:> Du siehst, es ist eine extrem strikte Implementation. Ich wollte ganz> sicher gehen, dass mich der Wecker niemals zu einer Falschen Zeit weckt> :-)
dafür brauch ich kein dcf77.
n halbwegs genau schwingender quarz tut´s auch.
mfg
dolf schrieb:> Urban B. schrieb:>> Du siehst, es ist eine extrem strikte Implementation. Ich wollte ganz>> sicher gehen, dass mich der Wecker niemals zu einer Falschen Zeit weckt>> :-)>> dafür brauch ich kein dcf77.> n halbwegs genau schwingender quarz tut´s auch.> mfg
Ja, stimmt schon. Aber ich finde DCF einfach genial, man braucht sich
nie um die Uhr zu kümmern, die läuft jahrelang immer auf die Sekunde
genau und stellt Sommer/Winterzeit automatisch um. Klar kriegt man ohne
DCF auch eine relativ genaue Uhr hin, aber ich sehe bei DCF eigentlich
nur Vorteile (sofern der Empfang vorhanden ist), also warum nicht?
Über den ganzen Tag habe ich den DCF-Empfang übrigens eh deaktiviert
weils da nicht viel bringt. Es wird nur Nachts um 3 Uhr kurz
synchronisiert, und dann erst nächste Nacht wieder. Deshalb wäre ein
einziges falsch empfangenes Signal auch so gravierend, dann würde die
Zeit einen ganzen Tag lang falsch laufen :-)
Aber man hat da ja relativ viel Spielraum wie man das genau realisieren
will. Dem einen genügt es wenn alle paar Wochen mal synchronisiert wird,
der andere will kontinuierlicher Empfang haben...
mfg
Innerhalb eines Zeitfensters werden Samples genommen und innerhalb eines
Gültigkeitsbereichs entschieden, ob eine 0 oder 1 erkannt wurde. Also
10ms Timer, innerhalb eines 300ms Fensters wird gezählt. 5-14 gültige
Null, 15-25 gültige Eins, Rest ungültig. Kurze Störimpulse und kurze
Aussetzer (<30ms) haben so keinen Einfluss auf die Auswertung.
Werden über mehrere Bits nur ungültige Werte empfangen, wird das Fenster
neu so synchronisiert, dass die vordere Flanke des Signals auf dem 5.
Sample liegt. Wenn das Signal sich nur langsam im Fenster verschiebt
(ungenauer Quarz), wird das Fenster durch Auslassen oder hinzufügen
eines Samples nachgeführt. Dies kann auch gleichzeitig zum Nachjustieren
des Timers benutzt werden, und damit die Genauigkeit der Uhr bei Ausfall
des DCF-Signals verbessern.
Paritätsprüfung und Plausibilitätsprüfung über zwei Zeittelegramme
sorgen für zusätzliche Sicherheit.
Die beste Maßnahme wäre eigentlich, einen Empfänger zu verwenden, der
die Phasenmodulation des DCF-Signales auswertet. Die billigen Dinger
nutzen nur die AM, und die lässt sich beliebig leicht stören.
om pf schrieb:> Die beste Maßnahme wäre eigentlich, einen Empfänger zu verwenden, der> die Phasenmodulation des DCF-Signales auswertet. Die billigen Dinger> nutzen nur die AM, und die lässt sich beliebig leicht stören.
Hast Du da einen passenden Applikationsbericht?
Im Prinzip funktioniert die normale AM aber auch bis zu den Kanarischen
Inseln (Selbst ausprobiert mit einem käuflichen Wecker).
Gruss
Harald
Hi, Klaus,
nach der Engpassorientierten Strategie: "Wo ist der engste Engpass gegen
höhere Qualität der Uhrzeit?" (Ich ergänze: "und gegen eine
Normalfrequenz und -zeit am Basteltisch?")
1. Langes Kabel - und die Antenne samt Empfänger unter das Dach
schrauben oder an das Geländer Deines Balkons.
Oder wo auch immer, nur weit weg von PC, TV, Arbeitsplatz und
Netzspannung.
2. Quarzfilter - eher nicht, die Module haben schon ein einfaches
Quarzfilter, manche auch zwei in Serie.
3. Ofenoszillator, von DCF77 nachgesteuert: Nachsteuerung in den ruhigen
Morgenstunden. Das steht noch auf meiner Agenda.
4. Mit Atmega und Ofenoszillator die 77,5 kHz runtermischen auf 625 Hz,
quadraturdemodulieren, Betrag vom Real- und Imaginärteil speichern und
über eine Minute akkumulieren - müsste eine dolle Empfindlichkeit
ermöglichen.
Und wenn es wirklich genau sein soll, dann muss ich vom Ofenoszillator
eine 77,5 kHz-Schwingung zum Vergleich erzeugen und in die Ferritantenne
einspeisen zum Vergleich. Wegen der temperatuabhängigen
Phasenverschiebung der Quarzfilter.
Noch Ideen?
Ciao
Wolfgang Horn
Wolfgang Horn schrieb:> Noch Ideen?
Meine Idee war mal zwei RFM12 oder ein RFM01/02 Sender/Empfänger-Duo mit
DCF-Modul und µC außerhalb des Hauses zu platzieren und die Zeit dann
über Funk zu übertragen. Die Idee kam daher, dass ich im Freien nie
Empfangsprobleme hatte.
Eine andere Idee wäre, eine RTC mit µC (ggf. direkt als RTC) und
DCF-Modul als eine Art eigenständiges DCF-Modul aufzubauen. Der µC
wertet die Daten des DCF-Moduls aus und sendet wahlweise die RTC-Zeit
oder die Funkgenaue Zeit.
Karl schrieb:> Wolfgang Horn schrieb:>> Noch Ideen?>> Meine Idee war mal zwei RFM12 oder ein RFM01/02 Sender/Empfänger-Duo mit> DCF-Modul und µC außerhalb des Hauses zu platzieren und die Zeit dann> über Funk zu übertragen. Die Idee kam daher, dass ich im Freien nie> Empfangsprobleme hatte.
Man hat für solche Zeitzeichensender absichtlich Langwelle
genommen, da es da ziemlich egal ist, ob Du draussen oder
drinnen bist. Und eine Funklösung durch eine andere abzu-
lösen, macht auch keinen Sinn, da diese Funkverbindung ja
auch gestört sein kann. Dein Problem ist anscheinend eine
extreme Störverseuchung in der Nähe des Standortes Deiner
Uhr. Da müsste es reichen, entweder die Antenne irgendwo
anders innerhalb Deiner Wohnung zu plazieren oder eine
verbesserte Signalauswertung zu verwenden. Vorschläge hats
da ja schon genug gegeben.
Gruss
Harald
Kann man die 77,5kHz eigentlich nicht direkt mit einem Mikrocontroller
abtasten? Hmm, einen externen Wandler bräuchte man bei den Meisten
Controllern noch, aber sonst müsste das doch funktionieren.
Dann kann man mit der >digitalen Keule< auf das Signal losgehen und sich
austoben.
Simon K. schrieb:> Kann man die 77,5kHz eigentlich nicht direkt mit einem Mikrocontroller> abtasten? Hmm, einen externen Wandler bräuchte man bei den Meisten> Controllern noch, aber sonst müsste das doch funktionieren.>> Dann kann man mit der >digitalen Keule< auf das Signal losgehen und sich> austoben.
Einschliesslich Phasendemodulation?
Gruss
Harald
Hi, Simon,
> Kann man die 77,5kHz eigentlich nicht direkt mit einem Mikrocontroller> abtasten?
Klar.
Der ADC der Atmegas ist dafür zu langsam.
Der ADC eines STM32 ist - im Prinzip - schnell genug für die
Vierfachabtastung in Real- und Imaginärteil.
Aber - ist der innere RC-Oszillator, dessen 168 MHz von einem 8 MHz-Takt
nachgeregelt wird, dafür auch stabil genug?
Ciao
Wolfgang Horn
Wolfgang Horn schrieb:> Noch Ideen?
Mit einem Schaltnetzteil zur Spannungsversorgung fängt man sich schnell
die Seuche ein. Keine Ahnung, wie man die wieder los wird...
Ich bin kein Profi und hab eher ziellos Drosseln, Filter, Ferrite etc.
getestet, aben nix half.
Das einzige was geholfen hat war Erdung — nicht wirklich praktikabel.
Vielleicht hat ein Profi brauchbare Tipps?
Hallo Klaus (Gast)
wie weit bist du von Darmstadt entfernt?
Innerhalb von Deutschland dürften deine Probleme
A - von einer falsch ausgerichteten Antenne,
B - Standort im Stahlskelett-Bau,
C - deinem schlecht enstörtem Schaltungsaufbau,
D - oder von nahen Störquellen.
kommen.
Habe schon Con.., Rei.. und Pol.. Module getestet:
Ohne A, B, C, oder D funktionieren die üblicherweise
auch in 500 km Entfernung und synchronisieren
bei pingeligster Empfangsroutine in < 5 Minuten.
Test: Packe einen billigen DCF-Wecker daneben!
Die meisten funktionieren auch in den Nachbarländern.
Aber wahrscheinlich nicht neben deinem Versuchsaufbau.
Hi, Johann,
> Mit einem Schaltnetzteil zur Spannungsversorgung fängt man sich schnell> die Seuche ein. Keine Ahnung, wie man die wieder los wird...
Steckerschaltnetzteile sind praktisch und billig, aber hätten wir ein
Hörvermögen bis 100 kHz, hört ich schon an meinem Arbeitsplatz eine
Kakophonie.
Nimm zum Testen erstmal eine Bleibatterie.
Oder ein Labornetzteil mit Linearregler.
Halte Abstand zwischen Antenne und anderem Gerät.
Ah ja, dazu bedaure ich den Ausfall meines Pegelmessplatzes mit
Wobbelfunktion bis herab zu 10 kHz. Damit könnte ich wenigstens das
Spektrum dieser Kakophonie sehen.
Messe zu können ist immer besser als Blindheit oder Taubheit.
Ciao
Wolfgang Horn
Simon K. schrieb:> Die theoretisch beste Methode dürfte das sein, was Georg Johann auf> seiner Seite hat. Mittels einer Art Faltung.> http://gjlay.de/software/dcf77/konzept.html
Das ist ja ziemlich genial! Mal sehn, ob ich mal versuche das zu
implementieren.
Klaus2m5 schrieb:> Innerhalb eines Zeitfensters werden Samples genommen und innerhalb eines> Gültigkeitsbereichs entschieden, ob eine 0 oder 1 erkannt wurde. Also> 10ms Timer, innerhalb eines 300ms Fensters wird gezählt. 5-14 gültige> Null, 15-25 gültige Eins, Rest ungültig. Kurze Störimpulse und kurze> Aussetzer (<30ms) haben so keinen Einfluss auf die Auswertung.
Jap, das dürfte die Methode der Wahl sein, um die Bits zu dekodieren.
Mit Flankenauswertung kommt man nahzu ohne Zeitverzögerung in Teufels
Küche ;-)
Johann L. schrieb:> Mit einem Schaltnetzteil zur Spannungsversorgung fängt man sich schnell> die Seuche ein. Keine Ahnung, wie man die wieder los wird...
Jap, Schaltnetzteil... Hab ich auch. Ich probier nachher mal ne 9V
Batterie aus.
Bernd schrieb:> wie weit bist du von Darmstadt entfernt?
So weit es in Deutschland möglich ist, Schöne Grüße aus dem hohen Norden
;-)
>> Innerhalb von Deutschland dürften deine Probleme> A - von einer falsch ausgerichteten Antenne,
Nein, Antenne habe schon ausgerichtet.
> B - Standort im Stahlskelett-Bau,
Nein, normales Einfamilienhaus und Antenne liegt nahe am Fenster.
> C - deinem schlecht enstörtem Schaltungsaufbau,
Ja, gut möglich.
> D - oder von nahen Störquellen.> kommen.
Auch möglich. Aber wenn mein Funkwecker mit den Störungen klar kommt,
will ich das auch ;)
Mein Aufbau verwendet ein Schaltnetzteil und zur Anzeige der Uhrzeit
sitzen da ca. 50 LEDs im PWM Betrieb. Also erstmal schlechte
Ausgangsbedingungen. Ich hab jetzt den Empfänger auf eine kleine
Extraplatine mit 1 m Kabel dran gepackt. Zusätzlich nen LC-Filter,
eigenen Spannungsregler und Pufferkondensatoren am Modul. Am Ausgang hab
ich dann noch nen CMOS Buffer hängen um mir auf dem Signal zurück zum uC
nicht wieder Störungen einzufangen. Das ist nötig, weil das Modul nur
einen verdammt kleinen Strom am Ausgang liefern kann. Ich meine +/- 5 uA
irgendwo gelesen zu haben.
Das war der erste Schritt. Wie ich die Störabstrahlung meiner LEDs
verringern kann, hab ich allerdings bisher keine Ahnung.
Der nächste Schritt sind nun die Fehlerkorrekturmaßnahmen auf
Softwareebene. Wenn ich auf die Bitpositionen und Minutenstart
synchronisiert bin, kann man ne ganze Menge machen. Aber erstmal muss
man sich darauf einsynchronisieren. Mal sehn, wie ich das mache. Denn
die Minutenmarke kann ja auch gestört sein. Das heißt, wenn ich nicht
erfolgreich dekodieren kann, muss ich wieder zurück auf los, und die
Minutenmarke suchen.
Klaus schrieb:> Mein Aufbau verwendet ein Schaltnetzteil und zur Anzeige der Uhrzeit> sitzen da ca. 50 LEDs im PWM Betrieb. Also erstmal schlechte> Ausgangsbedingungen.
Oooh ja, das ist bestimmt eine ganz schlechte Ausgangslage. Ich habe in
meinem Wecker ein 4x16 LCD mit dimmbarer (PWM) Hintergrundbeleuchtung.
Ich habe mit Blockbatterie, Stürzkondensatoren, Induktivitäten (planlos)
herumexperimentiert und kam auf keinen grünen Zweig. Solang das PWM
aktiv war, konnte ich den Empfang vergessen. Schlussendlich habe ich es
aufgegeben und während der Synchronisation (die eh nur in der Nacht und
nach dem Einschalten stattfindet) die Hintergrundbeleuchtung einfach
ganz deaktiviert :-)
Das schaltnetzteil (Traco Printnetzteil) verursacht dagegen keine
Störungen. Ist aber auch mit einem ca. 1,5m langen Kabel etwas
abgeschottet und nicht direkt im Weckergehäuse untergebracht.
mfg
Klaus schrieb:> So weit es in Deutschland möglich ist, Schöne Grüße aus dem hohen Norden> ;-)
Ich kann nicht klagen, auf Usedom (549,068km) habe ich einwandfreien
Empfang mit dem Conrad-Modul.
Klaus schrieb:> Mein Aufbau verwendet ein Schaltnetzteil und zur Anzeige der Uhrzeit> sitzen da ca. 50 LEDs im PWM Betrieb.
Ich hatte ähnliche Probleme. wenn der Emfänger direkt hinter der
Multiplexanzeige sitzt (MAX7219), geht garnichts.
Mit 20cm Abstand gehts wieder.
Ich wollte aber beides in ein Gehäuse setzen, daher wird der MAX7219
gegen 3:17 für etwa 3min abgeschaltet, bis das Paket gültig ist.
Peter
Abdul K. schrieb:> Irgendwie hat man nahe am Salzwasser besseren Empfang. Das habe ich> schon mehrfach gehört.
Schälchen mit Salzwasser neben das Empfanfmodul? Muss ich mal testen!
Naja. Vorletztes Jahr war ich auf dem Darß, um mir eine ordentliche
Enttäuschung reinzuholen. Von wegen Urwald.
Also Usedom ist daneben und nicht sonderlich groß. Wenn man da nach dem
wilden Elektronikschrauber fragt, ist man sicherlich schnell beim
Richtigen ;-)
Da gibts doch tatsächlich noch Laubfrösche. Unglaublich.
Wohnst du da? Wir haben da Verwandte.
Hi,
Nochmals zurück zum eigentlichen Thema:
Bei mir funktioniert DCF77 mit PIC16F628, ca. 200km von Mainflingen
entfernt östlich von Stuttgart seit längerer Zeit einwandfrei. Ich hatte
damals das Programm im Zuge meiner Einarbeitung in die
Assembler-Programmierung des PIC über einige Monate hinweg entwickelt
(natürlich habe ich dazu wo ich konnte "gespickelt" z.B. auf er Seite
[http://www.stefan-buchgeher.info/elektronik/dcf/dcf.html]
Hier die Basisdaten:
Pollin-Modul direkt im Uhrgehäuse, ca. 5cm entfernt vom µC eingebaut.
Antenne ist ca. Nord-Süd ausgerichtet
Uhr-Standort: Fenstersims, ca. 50cm entfernt von meinem Tower-PC
Filtermaßnahmen:
Low-Bit zulässige Pulsbreite +-20ms also 80 - 120ms
High-Bit " " " " 180 - 220ms
Synchronisationspause (zwischen Sek. 58 und Sek 0) mindestens 1024ms
Dauer
Zwischen 2 aufeinanderfolgenden Sync-Pausen müssen in Folge exakt 58
Pulse mit zulässiger Pulsbreite empfangen worden sein.
Das empfangene DCF-Telegramm wird als "TAG_Alt", "Monat_Alt" usw..
gespeichert.
Das aktuell empfangene, dekodierte DCF-Telegramm wird in der
Synchronisationspause mit den "Alt-Daten" verglichen. Die Aktuell- /
Alt-Daten müssen bis auf den Unterschied von 1 Minute exakt
übereinstimmen. Nur dann wird das Datum übernommen, angezeigt und die
frei laufende interne Quarzuhr bei Bedarf sekundengenau nachgestellt.
Ich nehme es hin, dass z.B. beim Datumswechsel, welcher ja von 24 nach
00 Uhr erfolgt, die Uhr kurzfristig beim alten Datum verharrt.
Vielleicht habe ich noch mal Lust, das Verfahren zu verfeinern.
Auf die Auswertung der Paritätsbits habe ich verzichtet.
Mit dem o.g. Verfahren synchronisiert meine Uhr ca. 3-4 Minuten nach dem
Einschalten mit dem DCF77-Signal.
mfg Ottmar
Johann L. schrieb:> Abdul K. schrieb:>> Irgendwie hat man nahe am Salzwasser besseren Empfang. Das habe ich>> schon mehrfach gehört.>> Schälchen mit Salzwasser neben das Empfanfmodul? Muss ich mal testen!
Bringt 40dB, wenn du die Schale groß genug machst:
DG9WF_Iono_lang.pdf