Go Down

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

MueThoS

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

maverick1509

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?

klik

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.

Udo Klein

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

jurs


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.


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.


Das Conrad Modul hingegen hat laut Datenblatt "300Hz Bandbreite". Deshalb muß es zappeliger sein.


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)

Udo Klein

Hmmm, bei Gelegenheit schaue ich mal per FFT nach wie hoch die Bandbreite denn jetzt wirklich ist. Ich hatte jedenfalls irgendwo in einem Datenblatt dazu was von 300Hz Bandbreite gelesen. Ich finde das nur nicht mehr. Die Wahrheit zeigt am Ende aber sowieso nur eine Messung.

Klar, daß ein digitaler Ausgang keine "Bandbreite" hat. Die Frage ist aber wie denn das Signal intern aufbereitet wird. Beim C Modul vermutlich nur per Trigger und bei den Pollins per RC + Trigger. So zumindest meine Vermutung. Wenn die Vermutung stimmt, dann muß das C Modul zappeliger sein.

Sag bescheid wenn Du vor mir was rauskriegst.
Check out my experiments http://blog.blinkenlight.net

jurs


Klar, daß ein digitaler Ausgang keine "Bandbreite" hat. Die Frage ist aber wie denn das Signal intern aufbereitet wird. Beim C Modul vermutlich nur per Trigger und bei den Pollins per RC + Trigger. So zumindest meine Vermutung. Wenn die Vermutung stimmt, dann muß das C Modul zappeliger sein.

Sag bescheid wenn Du vor mir was rauskriegst.


So ich habe hier mal eine erste Version meines DCF-Modul-Testprogramms am Laufen.
Direkter Vergleich Pollin vs. Conrad DCF-Modul.

Die Auswertung erfolgt "traditionell", also zu kurze (<50 ms) Impulse werden verworfen, Impulse von 50...150 ms als 0-Bit und Impulse von 150...250 ms als 1-Bit interpretiert.

Anbei die Datenausgabe, normalerweise je Modul eine Zeile pro Sekunde.
Anbei 61 Sekunden Auswertung, von einem Minuten-Sync zum nächsten Minuten-Sync.

Erklärung der sechs Spalten wie folgt:

1. Spalte: P/C
Impuls vom Pollin oder Conrad DCF-Modul

2. Spalte: 0/1
Impuls wurde als 0-Bit oder 1-Bit decodiert

3. Spalte: Millisekunden des gültigen Impulses
Traditionelle Auswertung, 50...150 ms bei 0-Bit, 150...250 ms bei 1-Bit

4. Spalte: Anzahl der zu kurzen Impulse zwischen zwei gültigen Impulsen
Kurze Impulse unter 50 ms werden verworfen, die Zahl der verworfenen Impulse aufaddiert
und als Summe hier angezeigt, wenn der nächste gültige Impuls als Zeile ausgegeben wird

5. Spalte: millis()-Timer von Arduino beim Beenden des Impulses, nur die letzten 5 Stellen angezeigt
Die beiden ersten Ziffern der fünfstelligen Zahl kann man als Sekundenwerte interpretieren

6. Spalte: SYNC
Falls länger als 1500 ms kein gültiger Impuls empfangen wurde, wird beim Anzeigen
des nächsten gültigen Impulses SYNC angezeigt. Normalerweise sollte das nur beim
Minutenimpuls alle 60 Sekunden passieren. Wenn es "Zwischendurch" passiert, dann
ist aufgrund von Empfangsstörungen ein Impuls bei der Auswertung verlorgengegangen.
(In diesem Fall nicht, Störlevel gering)

Also
P/C 0/1 xxx yy millis() SYNC
mit xxx= Dauer des gültigen Impulses
yy= Anzahl der verworfenen zu kurzen Impulse vor diesem gültigen Impuls
millis()= die letzten fünf Stellen des millis()-Timers
SYNC= Falls 1500ms lang vorher kein gültiger Impuls empfangen wurde

Code: [Select]

P 0 108   0  79416 SYNC
C 0 150   5  79464 SYNC
P 1 212   0  80522
C 1 213   1  80544
P 0 107   0  81417
C 0 118   2  81438
P 0 103   0  82415
C 0 130   2  82458
P 1 209   0  83517
C 1 241   1  83558
P 0 110   0  84416
C 0 142   1  84457
P 0 116   0  85426
C 0 114   1  85438
P 1 203   0  86514
C 1 207   2  86535
P 1 204   0  87517
C 1 236   7  87560
P 0 111   0  88418
C 0 120   2  88440
P 0 103   0  89415
C 0 114   5  89443
P 1 209   0  90516
C 1 205   2  90529
P 0 101   0  91413
C 0  83  10  91424
P 0 102   0  92412
C 0 116   1  92437
P 0 107   0  93415
C 0 112   2  93433
P 0 108   0  94417
C 0 120   1  94435
P 0 115   0  95421
C 0 126   5  95448
P 0 107   0  96418
C 0 125   1  96455
P 1 212   0  97521
C 1 241   2  97568
P 0 105   0  98413
C 0 149   2  98469
P 1 215   0  99520
C 1 249   1  99555
P 0 112   0    419
C 0 131   5    458
P 0 103   0   1409
C 0 143   2   1454
P 1 206   0   2515
C 1 221   4   2537
P 0 108   0   3419
C 0 112   2   3440
P 1 211   0   4519
C 1 215   2   4532
P 0 107   0   5412
C 0 108   6   5425
P 1 210   0   6521
C 1 230   1   6569
P 1 210   0   7515
C 1 243   1   7555
P 1 208   0   8517
C 1 213   3   8535
P 0 113   0   9420
C 0 114   2   9429
P 0 111   0  10419
C 0 134   0  10448
P 1 206   0  11514
C 1 219   3  11543
P 1 207   0  12518
C 1 225   3  12546
P 0 112   0  13419
C 0 115   3  13444
P 1 206   0  14514
C 1 198   3  14527
P 1 216   0  15523
C 1 227   3  15546
P 0 104   0  16415
C 0 138   1  16459
P 1 207   0  17514
C 1 215   0  17534
P 0 103   0  18412
C 0  93   0  18421
P 0 103   0  19412
C 0 104   3  19438
P 0 107   0  20417
C 0 102   3  20439
P 1 206   0  21517
C 1 218   2  21544
P 1 204   0  22513
C 1 233   4  22555
P 0 106   0  23414
C 0 123   2  23448
P 0 116   0  24419
C 0 121   2  24430
P 1 213   0  25517
C 1 244   0  25557
P 0 109   0  26415
C 0 116   3  26436
P 0 109   0  27415
C 0 150   1  27466
P 1 207   0  28514
C 1 239   6  28552
P 0 108   0  29417
C 0 142   1  29472
P 1 205   0  30516
C 1 227   1  30540
P 0 101   0  31412
C 0 136   9  31458
P 0 109   0  32414
C 0 123   2  32444
P 1 210   0  33516
C 1 216   4  33534
P 0 107   0  34413
C 0 129   2  34452
P 0 106   0  35414
C 0 112   1  35431
P 0 107   0  36412
C 0 134   7  36451
P 0 109   0  37419
C 0 121   3  37443
P 0 110   0  39418 SYNC
C 0 129   2  39461 SYNC


Drei Dinge kann man an der Auswertung sehr schön sehen:

1. Das Conrad-Modul hinkt immer etwas hinterher!

Wenn das Pollin-Modul seinen Impuls bereits als "fertig eingelesen" anzeigt, braucht das Conrad-Modul immer noch ca. 10 bis 50 ms extra, bevor der Pegel denselben Status annimmt.

2. Die Conrad-Impulse sind im Schnitt länger als die Impulse des Pollin-Moduls!

3. Bei geringen Störpegeln wie zum Zeitpunkt dieser Auswertung liefert das Pollin-Modul noch ein völlig fehlerfreies Ausgangssignal. Die vierte Spalte mit der Anzahl der verworfenen zu kurzen Impulse zwischen zwei ausgewerteten Impulsen ist beim Pollin-Modul hier immer bei 0, während das Conrad-Modul da meist eine einstellige Zahl von Fehlimpulsen als Störzappler am Ausgang stehen hat.

Bei Gelegenheit werde ich das Programm nochmal um Deinen Filter erweitern und etwas allgemeiner halten, so dass man nicht nur zwei verschiedene Module gegeneinander testen kann, sondern auch beim selben Modul den ungefilterten gegen den gefilterten Ausgang darstellen kann.

Udo Klein

Merkwürdig. Wenn das C Modul ungefiltert wäre sollte es vor dem Pollin Modul anschlagen. Kannst Du die Modulanschlüsse mal vertauschen und schauen ob das C Modul immer noch hintendran ist?
Check out my experiments http://blog.blinkenlight.net

jurs

#23
Dec 06, 2012, 07:54 am Last Edit: Dec 06, 2012, 10:33 am by jurs Reason: 1

Merkwürdig. Wenn das C Modul ungefiltert wäre sollte es vor dem Pollin Modul anschlagen. Kannst Du die Modulanschlüsse mal vertauschen und schauen ob das C Modul immer noch hintendran ist?


Anbei mal ein Datenauszug einer Minute, wo ich mitten in der Minute die Anschlüsse Pin2 und Pin3 der beiden Module am Arduino-Board vertauscht habe.

Code: [Select]

A 0 107   0  18886 SYNC
B 0 124   3  18916 SYNC
A 0 112   0  19890
B 0 128   4  19916
A 0 117   0  20893
B 0 131   5  20920
A 1 208   0  21986
B 1 212   2  22001
A 0 107   0  22883
B 0 112   0  22907
A 0 103   0  23883
B 0 134   1  23913
A 1 205   0  24986
B 1 222   2  25031
A 0 103   0  25884
B 0 113   2  25909
A 1 204   0  26983
B 1 197   3  26990
A 0 108   0  27888
A 0 100   0  28881
B 0 118  24  28908 SYNC
A 0 112   0  29887
B 0 117   3  29917
A 1 212   0  30988
B 1 204   1  30991
A 0 102   0  31883
B 0 118   8  31910
A 1 208   0  32985
A 0 105   0  33887
A 0 104   0  34884
B 0 123  19  34913 SYNC
A 0 113   0  35887
B 1 229   1  36007
A 1 202   0  36986
B 1 212   4  37010
A 0 105   0  37883
B 0 114   2  37903
A 1 202   0  38984
B 1 234   1  39028
A 1 210   0  39987
B 1 218   2  40007
A 0 101   0  40882
B 0  94   5  40898
A 0 115   0  41895
B 0 126   1  41931
A 0 111   0  42888
B 0 101   2  42896
A 1 210   0  43991
B 1 241   1  44029
A 0 110   0  44887
B 0 130   2  44938
A 0 108   0  45884
B 0 144   2  45933
A 0 112   0  46888
B 0 128   4  46910
A 1 207   0  47989
A 1 205   0  48984
A 1 207   0  49985
A 0 100   0  50880
B 0  77   3  52853 SYNC
B 1 205   1  53983
B 0 110   0  54888
B 1 211   0  55988
B 1 201   0  56982
A 1 209   0  57004 SYNC
B 0 106   0  57883
A 0 121   0  57908
B 0 106   0  58883
A 0 107   0  58895
B 0 103   0  59885
A 0  97   0  59897
B 0 107   0  60884
A 0 122   0  60911
B 0 108   0  61885
A 0 125   0  61919
B 1 203   0  62984
A 1 204   0  62995
B 0 109   0  63883
A 0 144   0  63931
B 1 209   0  64986
A 1 205   0  64996
B 0 102   0  65883
A 0 109   0  65896
B 0 103   0  66880
A 0 124   0  66913
B 1 209   0  67988
A 1 207   1  68006
B 0 111   0  68886
A 0 113   0  68897
B 1 202   0  69984
A 1 193   0  69992
B 0 107   0  70886
A 0  94   0  70895
B 0 112   0  71890
A 0 120   0  71914
B 1 208   0  72983
A 0  93   0  73671 SYNC
B 0 105   0  73882
A 1 158   1  73932
B 0 102   0  74881
A 0 104   6  74905
B 0 107   0  75883
A 0 117   2  75908
B 1 202   0  76984
A 1 210   0  77008
B 0 111   0  78889 SYNC
A 0 134   0  78919 SYNC


18xxx ... 46xxx => A=Pollin, B=Conrad
47xxx ... 57xxx => 10 Sekunden für das händische Umstecken der Arduino-Anschlüsse
58xxx ... 78xxx => A=Conrad, B=Pollin

Das ist schon so: Die Conrad-Impulse dauern im Schnitt länger und sie sind später zuende als die Pollin-Pulse. Das kann natürlich auch an der Beschaltung liegen.

Das Pollin-Modul betreibe ich nur an 3.3V vom Uno-Board, da es laut Spezifikation nur bis max 3.5 V betrieben werden soll. Das Conrad-Modul hängt an 5 V mit einem 10K PullUp-Widerstand.
Pegel des Pollin-Moduls also 3.3 V und Pegel des Conrad-Moduls 5 V am Arduino-Eingang.

Jedenfalls bei dieser Beschaltung produziert das Conrad-Modul bei leichten Empfangsstörungen schon kurze Störimpulse am Ausgang, bei einem Störpegel, bei dem das Pollin-Modul noch völlig fehlerfreie Impulse am Ausgang liefert. In Sekunde 28xxx, 34xxx und 73xxx hat das Conrad-Modul sogar je einen Empfangsfehler (die Empfangsfehler während ich die Module umgesteckt habe außen vor).

Trotz des bei leichten Empfangsstörungen besseren Ausgangssignals scheint das Pollin-Modul keinen Filter eingebaut zu haben, der extra Zeit benötigt, sondern im Gegenteil: Beim Durchgang durch das Conrad-Modul scheint das Signal eher ein paar mehr Millisekunden extra zu benötigen als beim Durchgang durch das Pollin-Modul.

Ich bohre mein Testprogramm nochmal ein bisschen weiter auf, es fehlt noch
- Erkennung gedrehter Bits (wenn beide Module verschiedene Bits in derselben Sekunde auswerten)
- Möglichkeit zum Testen mit Deinem Filter gegen ein ungefiltertes Signal

Noch ein beobachteter Unterschied zwischen Pollin- und Conrad-Modul: Unterschiedliche Zeit bis zur Impuls-Synchronisation nach einer Störung. Wenn ich mal durch Einschalten einer Energiesparlampe in 60 cm Entfernung von den Antennen eine plötzlich auftretende, starke Empfangsstörung simuliere, dann verhalten sich die Module wie folgt:
- Pollin: Der Impuls kommt noch einige Sekunden lang normal, danach gar nichts mehr
- Conrad: Impulse am Ausgang werden sofort zappelig, wenn die starke Störung kommt

Beim Abschalten der starken Störung beobachte ich folgendes Verhalten:
- Pollin: Es dauert nach dem Entfernen der Störung ca. 15 Sekunden, bis wieder Impulse kommen
- Conrad: Sofort nach dem Entfernen der Störung wieder normale Impulsausgabe

Es sieht für mich so aus, als wenn das Conrad-Modul am Ausgang genau das anzeigt, was gerade empfangen wird. Das Ausgangssignal wird nur vom gerade aktuellen Eingangssignal beeinflußt.

Und das Pollin-Modul scheint einen Speicher zu haben, mit Hilfe dessen das Timing vergangener Impulse mit dazu herangezogen wird, um den aktuellen Impuls zu bewerten und auf den Ausgang zu geben. D.h. die Flankenanstiege vor 1, 2, 3, 4, 5 etc. Sekunden führen jeweils eine Sekunde später auch unmittelbar zum Flankenanstieg am Ausgang, wenn ein Flankenanstieg empfangen wird. Und das Modul muß dann quasi anhand des Signals nur noch entscheiden, ob die Flanke nach 100 oder 200 ms wieder runtergeht. Der Start des Signals wird dagegen nicht nur direkt vom aktuellen Empfang gesteuert, sondern auch vom Empfang 1, 2, 3, 4, 5 Sekunden davor, rein über eine Fortschreibung des Timings, wann der Impuls in den Sekunden davor anfing.

mkl0815

@jurs: Könntest Du evtl. Dein Testprogramm zur Vergfügung stellen. Es wäre sicher für einige interessant, wie Du den Vergleich / die Auswertung umgesetzt hast.
Mario (ist einer der Interessierten :) )

jurs


@jurs: Könntest Du evtl. Dein Testprogramm zur Vergfügung stellen. Es wäre sicher für einige interessant, wie Du den Vergleich / die Auswertung umgesetzt hast.
Mario (ist einer der Interessierten :) )


Eigentlich schrieb ich ja, dass ich es erst noch fertigstellen möchte, aber wem unkommentiertes Programmlisting reicht, mit der Funktionsbeschreibung aus diesem Thread, für den kann ich es auch jetzt schon mal posten.

Wie gesagt, bisher nur "Standardauswertung" (alle Impulse <50ms als Störimpulse betrachten), Udos Filter ist noch nicht eingebaut, so dass nur zwei DCF-Module gegeneinander verglichen werden können, momentan aber nicht auch ein Modul mit seinem gefilterten Ausgang. Das kommt erst noch.

So wie der Code unten eingefügt ist:
Ausgang DCF-Modul A an Pin-2
Ausgang DCF-Modul B an Pin-3
(PullUp-Widerstände bei den Modulen nicht vergessen, die einen benötigen)

Ach ja: Ich habe keine zusätzliche LED als Empfangskontrolle angeschlossen, es blinkt nur die Pin13 LED, im Code könnt ihr Umstellen, ob sie im Takt des Modul-A oder des Modul-B blinken soll.

Code: [Select]


#define DCF_A_MODULE 2
#define DCF_B_MODULE 3
#define LED 13

char error[]="SYNC";
char noerror[]="";

void setup() {
Serial.begin(9600);
Serial.println();
pinMode(DCF_A_MODULE, INPUT);
pinMode(DCF_B_MODULE, INPUT);
pinMode(LED, OUTPUT);
}


boolean
  BdcfState,AdcfState,
  lastBdcfState=false,
  lastAdcfState=false;

long
  looptime,
  lastBdcfH,lastBdcfL,
  lastAdcfH,lastAdcfL,
  BdcfShortPulses,AdcfShortPulses,
  BdcfLastPulse,AdcfLastPulse,
  BdcfHighcycle,
  AdcfHighcycle;

void loop() {
  looptime=millis()%100000L; // last 5 digits
  AdcfState=digitalRead(DCF_A_MODULE);
  BdcfState=digitalRead(DCF_B_MODULE);
  digitalWrite(LED,BdcfState);
  CheckForHighCycle(looptime, AdcfState, lastAdcfState, AdcfHighcycle, lastAdcfH, lastAdcfL, AdcfShortPulses);
  CheckForHighCycle(looptime, BdcfState, lastBdcfState, BdcfHighcycle, lastBdcfH, lastBdcfL, BdcfShortPulses);
  printIfValidPulse('A', looptime, AdcfHighcycle, AdcfLastPulse, AdcfShortPulses);
  printIfValidPulse('B', looptime, BdcfHighcycle, BdcfLastPulse, BdcfShortPulses);
}

void printIfValidPulse(char c, long ltime, long &Highcycle, long &LastPulse, long &ShortPulses)
{
  char *msg;
  char buf[32];
  int bitval;
  if ((Highcycle>=50)&&(Highcycle<=250))
  {
   if (looptime>LastPulse+1500) msg=error; else msg=noerror;
   LastPulse=looptime;
   if (Highcycle>150) bitval=1; else bitval=0;
   sprintf(buf,"%c %d %3ld %3ld %05ld %s", c,bitval, Highcycle, ShortPulses,looptime,msg);
   Serial.println(buf);
   Highcycle=0;
   ShortPulses=0;
}
}

void CheckForHighCycle(long looptime, boolean &State, boolean &lastState, long &Highcycle, long &lastH, long &lastL, long &ShortPulses)
{
  if (State!=lastState)
  {
    if (State==LOW)
    {
      Highcycle=looptime-lastH;
      if (Highcycle<50) ShortPulses++;
      lastL=looptime;
    }
    else lastH=looptime;
    lastState=State;
  }
}


Soweit ich das überblicke, gibt es handelsüblich vier DCF-Module in Deutschland:
- Conrad-DCF-Modul
- Pollin-DCF-Modul
- ELV-DCF-Modul
- Reichelt-DCF-Modul

Hast Du auch zwei verschiedene Module zum Testen?
Oder möchtest Du sogar zwei identische Module gegeneinander testen?

Udo Klein

@Jurs: das was Du beschreibst deutet darauf hin, daß das Pollin Modul bei 1 Hz mit dem Signal phasenverriegelt. Das ist genau das, was ich in der nächsten Ausbaustufe auch tun werde. Die Preisfrage ist was das Modul danach damit anfängt. Auf jeden Fall ist das ein guter Ansatz.

So wird man den Phasenfehler / die Phasenverschiebung durch einen einfachen Tiefpassfilter los.
Check out my experiments http://blog.blinkenlight.net

mkl0815


Hast Du auch zwei verschiedene Module zum Testen?
Oder möchtest Du sogar zwei identische Module gegeneinander testen?

Aktuell habe ich gerade einen alten Conrad-Wecker beim Wickel, dem ich mal versuchen werde das DCF-Modul zu entlocken. Die Schaltung ist auf der Platine recht gut separiert und läuft mit 3V (2xAA Batterie). Zum MC des Weckers gehen 2 Leiterbahnen. Die größte Herausforderung wird wohl, an die 0,2mm Leiterbahnen einen Draht zu löten :-)
Dann kann ich anfangen zu testen. Ich werde auf jeden Fall berichten.

jurs


@Jurs: das was Du beschreibst deutet darauf hin, daß das Pollin Modul bei 1 Hz mit dem Signal phasenverriegelt.


OK, dann habe ich wieder einen Fachbegriff zu einem Sachverhalt gelernt, den ich mühsam per Wortschwall umschrieben habe:
Phasenverriegeltes Signal

But anyway, jetzt wo ich anfange, das Signal und das mit Deinem Filter gefilterte Signal mal etwas näher auszuwerten (nur per Arduino-Sketch, ein Oszilloskop habe ich nicht), kommen mir bei Deinem Filter doch immer mehr Zweifel, auch beim Conrad-Modul.

Mal eine kurze Rückfrage zu diesem Bild:
http://blinkenlightblog.files.wordpress.com/2012/11/c05_simple_pulse_train_noise_60_1000.png

Hast Du ein Oszilloskop und mit Deinem Conrad-Modul tatsächlich bei DCF-Störungen einen solchen Signalverlauf am Ausgang per Oszilloskop zu sehen bekommen?

Oder ist das ein rein von Dir angenommener Signalverlauf bei Störungen, der nicht mit einem Oszilloskop an einem realen DCF-Modul verifiziert wurde?


sth77


Hast Du ein Oszilloskop und mit Deinem Conrad-Modul tatsächlich bei DCF-Störungen einen solchen Signalverlauf am Ausgang per Oszilloskop zu sehen bekommen?

Oder ist das ein rein von Dir angenommener Signalverlauf bei Störungen, der nicht mit einem Oszilloskop an einem realen DCF-Modul verifiziert wurde?


Hallo, ich bin fleißiger Mitleser, allerdings beruflich bedingt noch nicht viel zum Testen meiner DCF-Module (von Pollin und Conrad) gekommen. Ein 2-Kanal-50MHz-Oszilloskop hätte ich, wenn es konkrete Signalverläufe (z.B. beide Module an jeweils einem Kanal) darzustellen gilt, könnte ich die wohl auch liefern.

Meine damaligen Erkenntnisse habe ich hier festgehalten: http://sth77.blogspot.de/2012/06/projekt-analoguhr-teil-3.html Auf den viel zu kleinen Bildern erkennt man den Signalverlauf nicht besonders gut, das Video im Vollbildmodus scheint mir da besser geeignet.
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Go Up