Hallo Bertl,
Grundsätzlich ist die neue implementierte Funktion eine Interrupt-Routine, welche das an einem Input-Pin anliegende DCF77 Signal auswertet und damit eine Soft-Clock stellt (synchronisiert). Die Routine arbeitet nach dem gleichen Prinzip wie die von Albundy vorgestellte Library (verwendet aber einen anderen eigenen Code).
Die Routine wird durch einen Timer-Interrupt aufgerufen (möglich zwischen 32 und 128 mal pro Sekunden, idealerweise 40 mal pro Sekunde) und liest den Pegel des DCF-Signals ein.
Im CONFIG-Befehl können folgende Optionen eingestellt werden:
• invertiertes oder nicht invertiertes DCF77-Signal
• 3 Varianten zur Überprüfung des empfangenen DCF77 Zeit-Signals
• Fortlaufende, stündliche oder tägliche Zeit/Datum Synchronisation
• Einstellung der Minute/Stunde bei stündlicher/täglicher Synchronisation
• Abschalten der Spannungsversorgung des DCF77-Moduls in der synchronisationsfreien Zeit (bei stündlicher/täglicher Synch.)
• Zurückschalten des Timers auf einen ISR-Aufruf pro Sekunde in der synchronisationsfreien Zeit (bei 16Bit-Timern bzw. 32.768Hz Quarz an 8Bit Timer)
Zum Beispiel-Programm in der Hilfe:
Die Schleife ist so aufgebaut, dass zumindest einmal pro Sekunde eine Ausgabe erfolgt, falls auch der Timer nicht funktionert z.B. wenn der Interrupt deaktiviert ist.
Ändert sich _Sec (Soft-Clock Zeit) oder DCF_Sec (ausgewertetes DCF-Signal) wird die Schleife verlassen. Mit WAITMS 220 wird noch das Ende des Impulses (100 oder 200 mSec) abgewartet, damit auch dieser in der Ausgabe zur aktuellen DCF-Sekunden berücksichtigt wird.
Eine Ausgabe erfolgt, wenn sich die Soft-Clock Sekunde oder die DCF-Sekunden ändert. Nach Synchronisation fallen diese beiden Zeitpunkte zusammen. Sofern die Soft-Clock nicht synchron läuft, können pro Sekunden 2 Zeilen erscheinen.
Diese Bespiel dient lediglich dazu die Funktion zu überprüfen. In der Applikation genügt das CONFIG ..... Statement und alle Zeitfunktionen können wie von "CONFIG Clock = Soft" gewohnt verwendet werden.
Lesezeichen