es wäre ja schön, wenn der RP6 die Funkuhrzeit benutzen könnte.
Dazu habe ich 2 Libraries (für die RP6 Robot Base und für die RP6 Control M32) geschrieben, die ich mir so gedacht habe:
1. Es sollte eine "Task" für den RP6 sein, d.h. eine Funktion, die in der Hauptprogrammschleife mehr oder weniger regelmäßig aufgerufen wird.
2. Auf Assembler-Anteile sollte komplett verzichtet werden.
3. Die vorhandenen RP6-Libraries sollten unverändert bleiben.
4. Es sollten keine Timer umprogrammiert oder im Fall der RP6Control M32 nicht der freie Timer benutzt werden.
5. Es sollte auch eine "Softclock" integriert werden, also eine Uhr, die auch ohne die DCF77-Informationen weiter läuft.
Die beiden Libraries (RP6BaseDCFLib.c und RP6ControlDCFLib.c) kommen mit je einem kurzen Demo-Programm, dass nur die Zeit anzeigt.
In der zugehörigen Header-Datei kann man die Definition "DEBUG" aktivieren. Nach Neukompilierung werden dann Informationen über die Pausenlängen der DCF77-Impulse ausgegeben. In den Header-Dateien können anhand der Werte die Definitionen der Pausenlängen (PAUSE_xxxxMS) angepasst werden.
Die Definition CLOCK_ADJUST kann in den Header-Dateien ebenfalls angepasst werden, um die Ganggenauigkeit der "Softclock" zu verbessern (ist bei meinem RP6 so gut eingestellt).
In den Demos kann anstelle der eigentlichen Anzeigefunktion (showCLOCK) die Funktion showSTATUS aktiviert werden, wenn man den Decoder bei der Arbeit beobachten will: Es werden dann die Status-Bits und die Uhrzeit dargestellt.
Achtung beim Anschluß eines DCF-Empfängers an die RP6 Base:
Es wird noch ein 2,2 kOhm Pullup-Widerstand benötigt. Ich habe ihn direkt zwischen +5V und dem DCF-Empfänger-Ausgang angeklemmt.
Viel Spaß damit!
Wenn ihr Verbesserungen einbaut, wäre es schön, das immer hier auch zu posten! Ich mache daraus dann ggf. neue Versionen.
der DCF-Decoder für den RP6 konnte in der 1. Version nur die "Intaktheit" des DCF-Telegramms erkennen:
- Z1 <> Z2
- Bit20 = 1
- P1..P3 haben gerade Parität
- 58 Bits wurden decodiert
- Fall Schaltsekunde: Bit59 = 0 und A2 = 1
In der leicht überarbeiteten Version 1.50 kann er zusätzlich die Plausibilität (z.B. Stunde < 24 oder Minute < 60 ...) erkennen und es wurde ein "Validitäts-Zähler" eingebaut.
Mit dem kann man festlegen, das wievielte intakte und plausible Telegramm er nach einem defekten Telegramm (oder nach dem Neustart) erst wieder akzeptiert. Die Variable validity_limit macht's möglich.
Die Libs benutzen jetzt auch den neuen 100us Timer (Variable timer) der RP6 Library ab V 1.3.
Viel Spaß
Gruß Dirk
Geändert von Dirk (15.01.2015 um 21:51 Uhr)
Grund: Neue Version
Lesezeichen