Hallo liebe Gemeinde,
Aus gegebenen Anlass, möchte ich gerne das "DCF77" Signal auswerten.
Als Empfänger habe ich mir das Board von Pollin.de besorgt. Hat jemand damit schon Erfahrungen?
Laut Oszi, kommt das Signal sauber bei meinem Empfänger an.
Eine "passende" Routine habe ich unter...
http://www.gjlay.de/software/c-code/dcf77.html
gefunden.
Mein Problem ist jetzt ganz einfach, dass ich das Gefühle habe, dass die Routine nicht richtig arbeitet.
Dies habe ich via. LED festgestellt.
Die ISR ist auch richtig eingestellt (10ms)...
Hat jemand schon mal was mit dieser Routine gemacht?
Habt ihr eine Idee, was ich falsch mache?
Aus gegebenen Anlass, möchte ich gerne das "DCF77" Signal auswerten.
Als Empfänger habe ich mir das Board von Pollin.de besorgt. Hat jemand damit schon Erfahrungen?
Laut Oszi, kommt das Signal sauber bei meinem Empfänger an.
Eine "passende" Routine habe ich unter...
http://www.gjlay.de/software/c-code/dcf77.html
gefunden.
Mein Problem ist jetzt ganz einfach, dass ich das Gefühle habe, dass die Routine nicht richtig arbeitet.
Dies habe ich via. LED festgestellt.
Code:
#include <stdint.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include "dcf77.h"
// Merkt alle 10 Millisekunden den Portzustand des DCF-Ports
uint8_t volatile dcf77_bit = 0xff;
static void job_dcf77_10ms (void);
// Alle 10 Millisekunden aus einer ISR heraus aufrufen
// Macht alle 10ms einen Schnappschuss vom DCF-Port (hier an Port B1).
void job_dcf77_10ms (void)
{
uint8_t bit = 0;
if (PINB & (1 << PB1))
bit = 1;
dcf77_bit = bit;
}
// Definition von ISRs etc
ISR (...)
{
...
// Alle 10ms
job_dcf77_10ms();
...
}
time_t time;
int main (void)
{
// Initialisierung: IRQs aktivieren, Hardware initialisieren, etc.
// ...
dcf77.ptime = &time;
// Hauptschleife
while (1)
{
uint8_t bit = dcf77_bit;
// Andere Aufgaben in der Hauptschleife
// ...
// Sind 10ms vergangen, also dcf_bit in { 0, 1 }?
if (bit < 2)
{
// Ja:
// Schnappschuss zurücksetzen
dcf77_bit = 0xff;
// Die Zeit tickt 10ms weiter
dcf77_tick (&dcf77, bit);
// DCF-Abgleich erfolgreich?
if (dcf77.time_changed)
{
// Neue Zeit ist in time angekommen!
[B]// Merker zurücksetzen (hier sollte die LED angehen )[/B]
dcf77.time_changed = 0;
// Zeit in dcf77.ptime auswerten
// ...
}
} // DCF
// Andere Aufgaben in der Hauptschleife
// ...
} // Hauptschleife
} // main
Die ISR ist auch richtig eingestellt (10ms)...
Hat jemand schon mal was mit dieser Routine gemacht?
Habt ihr eine Idee, was ich falsch mache?