Binäre DCF77 Uhr mit exponentiellem Filter und Blinkenlighty

Wie versprochen ist Ausbaustufe 1 meiner DCF77 Uhr fertig. Das Projekt findet Ihr hier: DCF77 Project | Blinkenlight und Ausbaustufe 1 hier: Binary DCF77 Clock | Blinkenlight. In der jetzigen Ausbaustufe ist die Rauschunterdrückung schon ganz brauchbar.

Ich würde mich freuen wenn Forumsteilnehmer die bisher mit DCF77 Uhren Empfangsprobleme hatten ausprobieren würden ob mein Code bei Ihnen bessere Ergebnisse liefert.

Viele Forenteilnehmer scheinen hier ja nicht gerade auf Deinen Filter für verbesserte DCF77-Auswertung gewartet zu haben.
Bei der "grossen" Resonanz!

Ich habe noch irgendwo zwei verschiedene DCF-Module herumliegen, eins mit Push-Pull-Ausgang und eins mit Open-Collector-Ausgang. Ich habe mit DCF77 zwar keine großen Probleme, finde die Fragestellung aber interessant - und: DCF Empfangsstörungen lassen sich ja leicht simulieren, einfach irgendein Schaltnetzteil näher als zwei Meter an das Modul bringen und fertig. Da braucht man heute ja gar keinen Röhrenmonitor, moderne LCD-Monitore stören DCF genauso wie Handyladegeräte, Steckernetzteile, Computer, Energiesparlampen und vieles andere mehr.

Hast Du die Parameter Deines Filters denn schon optimiert? Oder sind die momentan "einfach so" gewählt?

50 samples mit 1ms Zeitabstand? Oder sollte man eventuell auch mal mit 100 samples und 0,5ms Zeitabstand testen?

Gesamte Sampling-Zeit 50ms, oder könnte man vielleicht auch 100ms lang Werte sampeln und filtern?

Anyway, ich werde jedenfalls mal was testen und melde mich dann.
Wäre ja irgendwie schade, wenn es gar kein Feedback dazu gibt.

Das mit der Resonanz ist so eine Sache. Gelesen haben den Artikel schon einige. Zumindest hat mein Blog Gestern fast 600 Page Hits bekommen. Ich würde sage: alle schreibfaul außer Dir :wink:

Empfangsstörungen kann ich problemlos selber simulieren. Die Frage ist ob jemand mit dieser Version bessere Ergebnisse hat als vorher.

Was den Filter angeht: ja, er ist optimiert. Die nächste Ausbaustufe wird allerdings sehr viel besser. Ich fange nur mit diesem an weil der leichter zu verstehen ist. Ich bin jedenfalls mal auf Deine Ergebnisse gespannt.

Vorher?
Gab's schon vorher eine andere Filterfunktion von Dir?
Wenn ja, kenne ich diese nicht.
Oder "vorher" im Vergleich zu "kein Filter"?

Also hier mein Test. Testaufbau:
Arduino Uno
Pollin DCF-Modul mit Push-Pull Ausgang
Conrad DCF-Modul mit Open Collector Ausgang

Störungen: Bei mir auf dem Tisch neben dem Computer, auf dem dieselben beiden DCF-Module noch im Sommer störungsfrei liefen, kann ich jetzt leider erhebliche Störungen beim DCF-Empfang feststellen. OK, im Keller läuft nun die Heizung, aber momentan kann ich mir den hohen Störpegel nicht erklären, auf demselben Tisch auf dem im Sommer alles fehlerfrei lief. Vielleicht hat sich einer der Nachbarn Powerline-Adapter gekauft und sein Stromnetz funkt nun Störungen. Keine Ahnung, was los ist.

Pollin DCF-Modul: Zickt bei der Inbetriebnahme - mehr dazu später.

Conrad DCF-Modul: Inbetriebnahme des Moduls möglich, aber starke DCF-Störungen im Signal, wie es original vom Modul geliefert wird. Auswertung mit der DCF-Library völlig unmöglich. Das DCFPulseLength Testprogramm zeigt extrem kurze Impulse am Ausgang an. Gefiltert mit Deinem Exponentialfilter: Die vom DCFPulseLength Testprogramm gelieferten Impulse sehen zwar nicht aus wie die von einem einwandfreien DCF-Signal, es sind schon Schwankungen der Impulsbreiten sichtbar. Aber offenbar alles im Bereich von +/-50ms, so dass das Zeittelegramm fehlerfrei ausgewertet werden kann.

Also ich kann nur sagen: Dein DCF-Filter funktioniert spitzenmäßig, jedenfalls zusammen mit dem Conrad DCF-Modul!

Ich hab auch das Conrad-Modul. Wenn ichs zeitlich schaffe (und schlechtes Wetter ist, ansonsten bin ich nicht da) werde ich am Wochenende Deinen Filter testen.

[Nachtrag zum Pollin-DCF-Modul]
Also mein Pollin-Modul funktioniert auch noch, ich konnte es inzwischen testen. Das Modul verhält sich jedoch insbesondere bei Störungen des DCF-Empfangs komplett anders als das Conrad-Modul. Mein Problem mit der Inbetriebnahme gestern abend hängt offenbar damit zusammen: Das Pollin-Modul liefert bei sehr starken Empfangsstörungen überhaupt kein Signal mehr am Ausgang! Da ich gestern abend einen zeitweise gestörten Empfang hatte, konnte ich es daher nicht im Betrieb nehmen, keine Ahnung ob zwischen Frankfurt und S-H gestern abend ein Gewitter das DCF-Signal beeinträchtigt hat.

Jedenfalls scheint das Pollin-Modul bereits einen eigenen Signal-Filter eingebaut zu haben, denn durch schwache Empfangsstörungen läßt es sich (im Gegensatz zum Conrad-Modul) überhaupt nicht aus dem Tritt bringen.

Meine Störungssimulation:
Eine eingeschaltete Energiesparlampe, die ich mehr oder weniger nah an die Empfangsschaltung stelle.

Keine Störungen:
Pollin-Modul: keine Störungen
Conrad-Modul: keine Störungen

Schwache Störungen:
Pollin-Modul: keine Störungen
Conrad-Modul: schwache Störungen

Mittelstarke Störungen:
Pollin-Modul: keine Störungen
Conrad-Modul: mittelstarke Störungen

Extrem starke Störungen:
Pollin-Modul: keine Signal am Ausgang mehr vorhanden
Conrad-Modul: extrem starke Störungen

In einem ganz kleinen Bereich zwischen "mittelstarke Störungen" und "extrem starke Störungen" liefert das Pollin-Modul noch kurzfristig ein wirres Gezappel am Signalausgang, mit dem aber auch Dein Filter nichts mehr anfangen kann. Dann ist das Pollin-Modul tot, kein auswertbares DCF-Signal, dann bleibt der Ausgang auf LOW.

Also ist mein Fazit:

Das Pollin DCF-Modul hat einen eigenen Störfilter eingebaut, der Störungen in gewissem Maße herausfiltert und für ein einwandfreies Signal sorgt. Werden die Störungen aber zu groß, geht der Ausgang am Pollin-Modul auf "Wahnsinns-Gezappel" (nur in einem kleinen Bereich) oder "ständig LOW" (Normalfall) und gibt gar kein Signal mehr aus. Eine Filterung mit Deinem Filter bringt überhaupt nichts, auch nicht in dem kleinen "Wahnsinns-Gezappel" Bereich, das ist dann bereits vollständig Datenmüll.

Das Conrad DCF-Modul liefert Empfangsstörungen mit einem ziemlichen Gezappel am Signalausgang weiter. Dieses Gezappel am Signalausgang des Conrad-Moduls läßt sich mit Deinem Filter sehr gut auf ein einwandfreies DCF-Signal filtern. Und das auch noch in einem Bereich an Störungen, in dem das Pollin-Modul schon nichts mehr liefert.

Also: Dein Filter bringt beim Pollin-Modul angewendet gar nichts. Aber "Dein Filter plus Conrad-Modul" liefert super-gute Ergebnisse, und auch noch bei einem so hohen Störpegel ein einwandfreies Signal, bei dem das Pollin-Modul schon längst aus dem Empfang ausgestiegen ist. Also Dein Filter ist besser als der im Pollin-Modul eingebaute Filter, und liefert mit dem Conrad-Modul hier bei mir die besten Empfangsergebnisse in stark gestörter Umgebung.

Also auch ich habe sehnsüchtig auf den Filter gewartet, da auch mich Empfangsprobleme plagen.

Sobald es meine Zeit zuläßt werde ich den Filter zusammen mit meinem Reichelt Modul testen.

Hallo,
also ich hab auch noch ein Pollin Modul welches ich jetzt mal angeschlossen habe.
Kann aber noch nichts mit der Ausgabe anfangen
was bedeutet denn beispielsweise das:
Cycle, Pulse: 977, 411 X
Cycle, Pulse: 560, 390 X
Cycle, Pulse: 538, 966 X
Cycle, Pulse: 1659, 1207 X
Cycle, Pulse: 1357, 1927 X
Cycle, Pulse: 2075, 410 X m
Cycle, Pulse: 560, 350 X
Cycle, Pulse: 497, 430 X
Cycle, Pulse: 580, 351 X
Cycle, Pulse: 499, 2840 X
Cycle, Pulse: 3416, 5157 X m

maverick1509:
Kann aber noch nichts mit der Ausgabe anfangen
was bedeutet denn beispielsweise das:
Cycle, Pulse: 977, 411 X
Cycle, Pulse: 560, 390 X
Cycle, Pulse: 538, 966 X
Cycle, Pulse: 1659, 1207 X
Cycle, Pulse: 1357, 1927 X
Cycle, Pulse: 2075, 410 X m
Cycle, Pulse: 560, 350 X
Cycle, Pulse: 497, 430 X
Cycle, Pulse: 580, 351 X
Cycle, Pulse: 499, 2840 X
Cycle, Pulse: 3416, 5157 X m

Das bedeutet, dass es mit DCF-Empfang Essig ist.

Das DCF-Funkprotololl besteht pro Minute aus 59 Sekundenimpulsen mit einer Zyklendauer von einer Sekunde (Cycle 1000 ms) und darin enthaltenen Bit-Pulsen von 100 oder 200 ms Dauer.

Bei einem perfekten Empfang mit einem perfekten Modul in einer perfekten Welt sähe der Empfang bei 59 Sekunden in der Minute so aus:
Cycle, Pulse: 1000, 100 .
Cycle, Pulse: 1000, 200 X
Cycle, Pulse: 1000, 100 .
Cycle, Pulse: 1000, 100 .

Also immer Zyklendauer 1000 ms und Impulse von 100 oder 200 ms. Punkt steht für 0-Bit und X für 1-Bit.

In der Praxis siehst Du das natürlich NIE!
Aber solange die Zyklendauer "in der Nähe von 1000" ist und die Impulse immer schwischen 50 und 250ms liegen, ist der Empfang wohl OK.

Und der sechzigste Impuls ist der Minutenimpuls, der ist doppelt so lang, weil kein Bit-Impuls gesendet wird.

Was Du da oben zeigst, sieht nach einem sehr gestörten Empfang aus.

DCF-Empfang wird übrigens durch alle möglichen elektrischen Geräte gestört, als da wären Computer, Monitor, Steckernetzgeräte, Energiesparlampen etc.

Also wenn Dein Arduino-Board nur mit dem kurzen USB-Kabel am Computer angeschlossen ist, das mit dem Board mitgeliefert wurde, wirst Du damit nicht aus dem Störnebel von PC und Monitor rauskommen. Probier mal mit einer 3m USB-Verlängerung und lege das DCF-Modul beim Testen mindestens 2m weg von PC, Monitor und anderen elektrischen Gerätschaften.

Hallo,
Also bei mir sieht es mit Filter genauso aus Cycle und Puls irgend ein wirrwarr.
Aber ohne Filter, also Sketch aus Beispieldatei, läuft ohne probleme.
DCF Modul ist von ELV.
gruß bello12

jurs:
Und der sechzigste Impuls ist der Minutenimpuls, der ist doppelt so lang, weil kein Bit-Impuls gesendet wird.

Soviel ich weiß fehlt der Impuls für die 59.Sekunde und der erste Impuls nacher (Minutenimpuls) ist immer 0,1Sekunde lang.
http://www.ptb.de/cms/fileadmin/internet/fachabteilungen/abteilung_4/4.4_zeit_und_frequenz/4.42/dcf77.pdf Seite 8.
Grüße Uwe

bello12:
Also bei mir sieht es mit Filter genauso aus Cycle und Puls irgend ein wirrwarr.
Aber ohne Filter, also Sketch aus Beispieldatei, läuft ohne probleme.

Ich hab's ja kommen sehen, als ich mir das alles durchgelesen habe: Alles wunderbar kommentiert mit dem Filter, aber es sind keine ausführlichen Hinweise zur Schaltung dabei. Und wer nicht versteht, wie es läuft, hat eine mehr als 50%-Chance, es falsch zu machen.

Steht aber alles im Quelltext:

const uint8_t dcf77_sample_pin = 19; // A5
const uint8_t dcf77_analog_sample_pin = 5;

Der "Sample Pin" ist derjenige, auf dem die Samples von der DCF-Uhr eingelesen werden.
Das DCF-Modul gehört bei diesem Sketch an den Analog A5 Pin.

const uint8_t filtered_dcf77_pin = 2;
Der "Filtered Pin" ist in dem Fall ein "Hilfs-Pin", der unbeschaltet bleibt!

Tatsächlich wird dieser Pin im Sketch sogar als OUTPUT deklariert:

pinMode(filtered_dcf77_pin, OUTPUT);

An Pin2 wird bei dem Filter-Sketch nichts angeschlossen, sondern an dem Pin wird das gefilterte Signal AUSGEGEBEN, so dass die DCF-Library von dort das gefilterte Signal bekommen kann, SO ALS OB dort ein DCF-Modul angeschlossen wäre!

Das hat Udo so gemacht, weil ihr dann eine unveränderte DCF-Library verwenden könnt und er das Filter nicht in eine veränderte Library einbauen musste, sondern damit er das Filter in den Sketch packen konnte.

Also achtet bitte mal drauf, was ihr wo angeschlossen habt!

Wer wirre Eingangswerte bekommt, der holt sich die Eingangswerte wahrscheinlich vom offenen und unbeschalteten A5 Eingang ab. Und damit kann kein Filter was anfangen.

@jurs: erst mal besten Dank für Deine detailierte Analyse.

Was das Polling Modul vs. Conrad Modul angeht. Vermutlich (ich kann es nicht überprüfen) hat das Pollin Modul einen Tiefpassfilter am Ausgang. Beliebt sind 20Hz Tiefpassfilter. Und wenn da nicht viel sehr viel Mühe reinging, dann sind die Grenzfrequenz und die Filtersteilheit eher Pi mal Daumen bestimmt. Das reicht bei gutem Empfang ja auch und man muß keinen Mikrocontroller für die digitale Filterung spendieren.

Das Conrad Modul hingegen hat laut Datenblatt 300Hz Bandbreite. Deshalb muß es zappeliger sein. Als Konsequenz davon hat man dann aber überhaupt die Möglichkeit die Filterung selber zu erledigen und den Filter dann optimal zu rechnen. Da ich nur das Conrad Modul hier habe dachte ich, die anderen billigen Module verzichten (aus Kostengründen) auch auf den Tiefpass. Dem ist aber offensichtlich nicht so. --> Meine Konstruktion funktioniert zwangsläufig besser mit dem scheinbar schlechteren Modul von Conrad.

So hab das Modul einfach mal über Nacht dran gelassen (mit 1,5m Kabel neben dem Rechner ans Fenster gestellt).
Heute Morgen zeigt es mir die korrekte Zeit und das Datum an.
Zumindest funktioniert das Pollin Modul.

Cycle, Pulse: 998, 92 .
Cycle, Pulse: 1000, 90 .
Cycle, Pulse: 997, 90 .

DCF sync good
5.12.2012 07:38:00
5.12.2012 07:38:01

Gruß
Bernward

Hi, ist eigentlich keine Schreibfaulheit, versprochen! Ich bin über Hackaday.com auf Deinen Thread gekommen, und den Artikel gab es erst heute.
Auf jeden Fall ein nettes Projekt, das mich sehr interessiert, weil bei mir von drei DCF77-Uhren zwei einfach nicht funktionieren. Und es ist etwas frustrierend, dass sie keinerlei Auskunft darüber geben, wieso nicht. Eine Empfangsanzeige (db) wäre für den Zweck nicht schlecht. Vielleicht kann man mit Deiner Lösung die Signalqualität in der jeweiligen Ecke ermitteln, wo die nicht funktionierenden Uhren stehen und eine bessere Position / Ausrichtung finden.

Hallo zusammen,
ich verfolge das hier und finde es vielversprechend.

Ich hatte da vor langer zeit mal eine Idee, die so wie ich meine sicher sehr interessant wäre für viele.
Oft hört man das Bastler eine Uhr machen wollen und Probleme mit der Zeit haben.
"Brauch ich eine RTC"
"Wo bekomme ich die Zeit her" (Netz, DCF77, GPS)
Meine Idee war ein Shield mit einem kleinen Mikrocontroller und einer RTC und einem Anschluss und Platz für ein DCF77 Modul.
Der Mikrocontroller wertet das DCF77-Signal aus (mit diesem Filter vielleicht :sunglasses: ) und schreibt diese Zeit in die RTC.
Über I2C oder so kann dann der Arduino einfach die Zeit abfragen mit vielleicht noch ein paar Bits in denen steht
woher denn jetzt die Zeit kommt (also war der Sync erfolgreich?)

Fände ich zumindest Praktisch.
Leider bin ich noch nicht weit genug um so was um zu setzen.
Vielleicht versuche ich das doch nochmal an zu gehen

Was ich nicht ganz verstehe, warum haben die Module (Pollin, Conrad....) so eine große Ferritantenne
und einen relativ schlechten Empfang.
Jeder Funkwecker von Aldi, Lidl oder wie auch immer für 10€ kann das besser, und mit viel geringerer Baugröße.
Warum?

Wie versprochen mein Update zum Nutzen in Verbindung mit dem Reichelt DCF77 Modul.

Der praktische Nutzen ist hier eher gering, da auch dieses Modul offensichtlich eine sehr starke Vorfilterung macht.
Spikes auf dem Signal habe ich praktisch gar nicht, allerdings ist die Bandbreite der gültigen Pulsbreiten extrem groß.

Laut Datenblatt
0: 100 +30 -60 ms
1: 200 +30 -60 ms

Dies zu ergründen hat mir dieser Versuch auf jeden Fall schon mal geholfen.
Jetzt muß ich wohl eine Anpassung der DCF77 Lib für das Reichelt-Modul machen, damit diese Pulse auch korrekt verarbeitet werden.

Des weiteren ist der direkte Anschluß am Analogpin suboptimal, da der Eingangswiderstand beim Sampling offenbar für das Modul zu klein ist und der Spannungshub somit recht klein ist. (Der Analogeingang liest Werte um 800 und 1000 für Low und High.)

Zum Schluß noch herzlichen Dank für diese gute Arbeit, die mich zumindest in der Theorie deutlich weitergebracht hat, und mir sicherlich an anderer Stelle noch helfen kann.

@maverick: das Conrad Modul hat keinen schlechten Empfang. Es hat eine große Bandrbreite und nimmt deshalb Störungen stärker auf. Das ist normal. Die von Dir genannten Wecker haben keinen besseren Empfang als das Conrad Modul, wie kommst Du zu der Annahme, daß dem so wäre? Was sie haben ist ein Tiefpassfilter und eine sehr simple "Fehlererkennung". Ich bekomme mit dem Conrad Modul und dem Prototyp jedenfalls bessere Ergebnisse als mit den genannten Weckern.

@klik: beim Blinkenlighty hängt auf dem Pin noch eine LED, deshalb ist der Analogeingang in meinem Fall die Beste Lösung. Wenn er bei Dir unbelastet ist, dann ist digitales Auswerten auf jeden Fall besser.

[quote author=Udo Klein link=topic=135153.msg1020382#msg1020382 date=1354664834]
Was das Polling Modul vs. Conrad Modul angeht. Vermutlich (ich kann es nicht überprüfen) hat das Pollin Modul einen Tiefpassfilter am Ausgang. Beliebt sind 20Hz Tiefpassfilter. Und wenn da nicht viel sehr viel Mühe reinging, dann sind die Grenzfrequenz und die Filtersteilheit eher Pi mal Daumen bestimmt. Das reicht bei gutem Empfang ja auch und man muß keinen Mikrocontroller für die digitale Filterung spendieren.[/quote]

Ich tüftele mal an einem DCF-Modul-Vergleichsprogramm, mit dem man zwei DCF-Module an zwei verschiedenen Pins gleichzeitig betreiben kann und die Software wertet die Unterschiede der beiden Module aus. Ich muß mal schauen, wie das am besten ausgewertet und dargestellt werden kann.

Bei ersten Versuchen in diese Richtung sieht es jedenfalls danach aus, als wenn ich es nicht aufrecht erhalten kann, dass das Pollin-Modul bei nur mäßigen Störungen gar kein Gezappel am Ausgang liefert. Es hat bei mäßigen Störungen nur weniger Gezappel am Ausgang als das Conrad-Modul. Was aber bestehen bleibt: Beim Conrad-Modul zappelt es um so mehr am Ausgang, je mehr Störungen auftreten, und das Pollin-Modul stellt sich einfach tot und läßt den Ausgang auf Ground, wenn die Störungen zu groß werden.

Das DCF-Modul-Vergleichsprogramm kann ich dann sicher auch leicht um Deinen Filter erweitern, dann kann man statt zwei DCF-Module einfach das ungefilterte und das gefilterte Signal direkt miteinander vergleichen. Mal schauen, da fällt mir bestimmt noch was ein.

[quote author=Udo Klein link=topic=135153.msg1020382#msg1020382 date=1354664834]
Das Conrad Modul hingegen hat laut Datenblatt "300Hz Bandbreite". Deshalb muß es zappeliger sein. [/quote]

Ich glaube, da liegt ein Irrtum vor. Die Angabe von "300Hz Bandbreite" bei so einem Modul bezieht sich mit Sicherheit nicht auf den Ausgang, sondern auf die Bandbreite des Eingangs. Im Datenblatt des Conrad-Moduls konnte ich dazu gar nichts finden, im Datenblatt des Pollin-Moduls wird es völlig klar:

  • Empfangsfrequenz KHz typisch 77,5
  • Frequenztoleranz (Antenne) Hz Minimal -300 Maximal +300
    Das ist einfach die Frequenzabstimmung des Eingangskreises aus Ferritantenne und Kondensator.
    Empfangsbereich des Moduls von 77,2 bis 77,8 KHz Empfangsfrequenz (77,5 KHz +/-300 Hz)