Go Down

Topic: Binäre DCF77 Uhr mit exponentiellem Filter und Blinkenlighty (Read 20782 times) previous topic - next topic

Udo Klein

Wie versprochen ist Ausbaustufe 1 meiner DCF77 Uhr fertig. Das Projekt findet Ihr hier: http://blog.blinkenlight.net/2012/12/01/dcf77-project/ und Ausbaustufe 1 hier: http://blog.blinkenlight.net/binary-clock/. 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.
Check out my experiments http://blog.blinkenlight.net

jurs


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.



Udo Klein

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 ;)

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.
Check out my experiments http://blog.blinkenlight.net

jurs

#3
Dec 03, 2012, 09:21 pm Last Edit: Dec 03, 2012, 09:41 pm by jurs Reason: 1

Die Frage ist ob jemand mit dieser Version bessere Ergebnisse hat als vorher.


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!



MaFu

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.
_______
Manfred

jurs

[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.







klik

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.

maverick1509

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

jurs


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.



bello12

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

uwefed


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

jurs


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.




Udo Klein

#12
Dec 05, 2012, 12:47 am Last Edit: Dec 05, 2012, 12:57 am by Udo Klein Reason: 1
@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.
Check out my experiments http://blog.blinkenlight.net

maverick1509

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.

Go Up