colmans:
hi jurs, dein angebot würde ich dankend annehmen!
Ich hänge das Testprogramm mal als ZIP-Archiv zum Downloaden dran.
Installation:
Den in der ZIP-Datei enthaltenen Ordner "DCF_PulseTest" in den Arduino-Sketchordner kopieren.
Dann kann ein Arduino-Sketch mit gleichem Namen geöffnet werden, der drei Tab-Fenster enthält.
Konfiguration:
Für DCF-Module mit Push-Pull Ausgang wie das Pollin-Modul:
#define DCFPULLUP false
Für DCF-Module, die einen aktiven PullUp-Widerstand benötigen wie das Conrad-Modul:
#define DCFPULLUP true
Es können bis zu zwei LEDs angesteuert werden, auf denen das DCF-Signal zur optischen Signalkontrolle ausgegeben wird. Auf dem mit DCFLEDRAW konfigurierten LED-Pin wird das Rohdaten-Signal ausgegeben und auf dem mit DCFLEDFILTERED konfigurierten Pin wird das gefilterte Signal ausgegeben. Vorkonfiguriert ist die Ausgabe des Rohdatensignals auf der Board-LED an Pin-13:
#define DCFLEDRAW 13
Der Empfängerpin ist frei wählbar.
Die Testausgabe erfolgt auf Serial. Und zwar wird einmal pro Sekunde eine Zeit ausgegeben. Falls die Zeit noch nicht synchronisiert wurde, ist ein Sternchen vorangestellt, z.B. acht Sekunden nach Programmstart, nicht synchronisiert:
*00:00:08
Die Synchronisierung auf die aktuelle Zeit dauert 1 bis 2 Minuten bei ungestörtem Signal. Bei gestörtem Signal ist es nicht vorhersehbar. Nach der ersten Synchronisierung wird die Zeit ohne führendes Sternchen angezeigt, z.B:
08:52:13
Das Kalenderdatum wird bei diesem Testprogramm derzeitig nicht ausgewertet und nicht angezeigt.
Wenn DCF-Impuise empfangen werden, werden diese wie folgt angezeigt (Beispiel), immer im Wechsel die aktuelle Zeit und die Information zum empfangenen Sekunden-Impuls:
H 115 L 886 P 1001 14
08:52:14
H 205 L 794 P 999 15
08:52:15
H 113 L 880 P 993 16
08:52:16
H 114 L 880 P 994 17
08:52:17
H 230 L 777 P 1007 18
08:52:18
H - Signaldauer HIGH in Millisekunden (typisch 100 oder 200ms)
L - Signaldauer LOW in Millisekunden
P - Impulsdauer (Summe der beiden vorstehenden)
Bitnummer (zählt bei korrekt erkannten Signal-Bits hoch bis 59, und springt bei der Minutenmarke auf 1)
Wenn die Bitnummer nicht bis 59 zählt, sondern vorher zurück auf 1 springt, konnte ein Bit nicht korrekt ausgewertet werden oder es wurde eine Minutenmarke erkannt.
Probier's mal aus!
Ist wie gesagt nur ein Testprogramm. Allerdings eins, das aufgrund einer speziellen Signalfilterung gestörte DCF-Signale vom DCF-Empfänger besonders gut auswerten kann. Allerdings bringt das bei "schnellen" DCF-Modulen wie dem Conrad-DCF-Empfänger mehr als bei den bereits "tiefpassgefilterten" Empfängern wie dem Pollin-Modul.
Für reale Anwendungen muß das Konzept noch umgestellt werden: Das Testprogramm sampelt das Signal einmal pro Millisekunde und synchronisiert dazu die loop-Funktion so, dass diese einmal pro Millisekunde läuft. Du kannst daher in der loop nur Code einfügen, der unter 1ms läuft, sonst bricht der Empfang zusammen. Falls Du vorhast, eine reale Anwendung mit Code dranzustricken, der länger braucht, bitte Bescheidgeben, ich kann dann mal überlegen, wie ich das am besten dranstricke.
(Angehängte Datei wegen inzwischen erkannten Programmfehlern entfernt,
Fehler- und Korrekturhinweise siehe Reply #16.)