C DCF77 Signal auswerten schlägt fehl...

Janiiix3

Aktives Mitglied
28. Sep. 2013
1.333
10
38
Hannover
Sprachen
  1. ANSI C
  2. C#
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.

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?
 
Ich habe eine andere Routine gefunden, leider noch ein Problem dazu. Ein Timer "1ms" ruft mir eine Routine auf & soll prüfen wie lange der Eingang auf einen gewissen Pegel ist. Leider klapppt das nicht ganz. Wenn eine neue Minute anfängt, sollte die Low Phase ja ca 2000ms lang sein. Diese kann ich mit meinem AVR leider nicht zählen / empfangen.

/* >1500 ms low? */ if( dcf_cntL >= 1500 ) { dcf_available = true; dcf_value = DCF_START; dcf_cntL = 0; PORTB |= (1<<PB7); }



wenn ich 1500 jedoch auf 800 setze, empfange ich den neubeginn der Minute sauber. Was kann das blos sein? Habe ich evtl. doch den Timer falsch konfiguriert?
 

Anhänge

  • DCF77_Encode.zip
    69,8 KB · Aufrufe: 0
Crossposting

Falls sich jemand mit dem Thema befassen und helfen möchte, bei mikrocontroller.net ist das Crossposting zum zweiten Beitrag.


Bitte immer einen Hinweis geben, wenn in anderen Foren das Thema zeitgleich eingestellt oder behandelt wird. Einige User haben leider wenig Freitzeit und diese wird ggf. durch den Hinweis auf das parallele Thema nicht unnötig verschwendet.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)