Dienstag, 22. Februar 2011

Das ewige DCF77-Problem

Stefan hat mich auf ein Problem mir dem DCF77-Empfänger aufmerksam gemacht, das ich anfangs nicht nachvollziehen konnte. Er sagte, bei ihm käme (wenn DEBUG eingeschaltet ist) immer "Checkbit P3: Date failed" und die Zeit würde nie übernommen werden. Interessanterweise kam das bei mir nie.

Zum Hintergrund: In der Originalversion der DCF77-Library von J. M. Lietaer wurden die Check-Bits, die im DCF77-Telegramm enthalten sind, nicht ausgewertet. Diese Funktionalität habe ich dann nachgerüstet, da ich immer wieder schlechte Zeitstempel empfangen habe.

Nach vielen Versuchen und mit viel Herumprobieren (inzwischen habe ich den Empfänger auf dem Steckbrett nachgebaut, das ist handlicher als eine ganze QLOCKTWO) habe ich festgestellt, daß wir irgendwie beide recht haben. Der Aufbau der Library bewirkt, daß das letzte Bit im Telegramm nicht gelesen wird und immer 0 ist. Dadurch werden Telegramme an bestimmten Tagen als gültig angsehen (wenn das Bit 0 sein soll) und an anderen als ungültig (wenn es 1 sein müsste).

Weitere Nachforschungen haben ergeben, daß das ganze Telegramm verschoben empfangen wird:

0011000110110010001010110010101000101000011000100010001000
_bitCount: 58
Decoding telegram...
Minutes: 26
Hours: 22
Date: 21
Day of week: 1
Month: 2
Year: 2011
Check-bit P3: date failed.
--------------RAZZASMMMMMMMPSSSSSSPDDDDDDWWWMMMMMYYYYYYYYP
0011000110110010001010110010101000101000011000100010001000


In den letzten beiden Zeilen wird das Telegramm nochmal mit Bedeutung ausgegeben. Wer sich etwas mit dem Aufbau des Telegramms (siehe einen der älteren Posts hier) beschäftigt hat, kann erkennen, daß alle Bits um 1 nach links gehören. J. M. Lietaer hat das einfach ausgeglichen, in dem er die Bits verschoben auswertet. Und damit wurde mir auch klar, warum er die Check-Bits nicht eingebaut hat. Es funktioniert einfach nicht.

Die Library einfach mal eben anpassen geht wegen ihres Aufbaus nicht. Ich werde nicht darum herumkommen, zumindest den Bit-Empfangsteil neu zu schreiben. Bis dahin hat man entweder nicht jeden Tag eine DCF77-genaue Zeit, oder man muß die Zeile, in der das Check-Bit P3 geprüft wird, auskommentieren.

Keine Kommentare:

Kommentar veröffentlichen