www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DCF77, die 100ste..


Autor: Dummie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forianer,

ich möchte gern einen DCF Empfänger mit PIC-Controller lösen.
Nach einiger Suche hier im Forum habe ich zwar relativ oft dieses Thema
gefunden, jedoch meist nur mit AVR spezifischen ASM-Beispielen.
Ich programmiere (hobbymässig) leider nur in C und bin deswegen des ASM
nicht so mächtig.
Jedoch habe ich zur Umsetzung eines DCF77 Empfängers mit MC noch einige
Grundsatzfragen.

1) wie löst ihr die Anbindung des DCF Modules an den MC? Nutzt Ihr
dabei Interrupteingänge mit Flankenerkennung oder Pin-Change und
entsprechende ISR's?

2) Wie syncronisiert man am sinnvollsten das DCF Signal mit den eignen
Routinen auf den Minutenstarttakt? ..eigentlich bleibt da ja nur das
59'igste (nicht gesendete) Bit, oder?

3) welche Möglichkeiten zur Fehlererkennung nutzt Ihr?

Für grundlegende, verständliche Informationen wäre ich sehr dankbar.
Ich brauche keine konkreten Codebeispiele, jedoch wäre, im Grundsatz,
verständlicher Pseudocode sehr hilfreich.

beste Grüße

Autor: tsetse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/forum/read-1-181962...

Für den Anfang würde ich es einfacher machen, damit sich
Erfolgserlebnisse einstellen.
ja, die fehlende 59. Sekunde ist am einfachsten zu finden, dann die
Sekunden mitzählen.

Die Herausforderung für mich war damals, möglichst schnell Information
zu bekommen, ich warte also nicht erst die 59. Sekunde ab und fange
dann zu zählen / dekodieren an, sondern speichere die Bits in einen
Ringpuffer und prüfe nach jeder Sekunde, ob das Telegramm gültig ist
(Parität und Plausibilität).
So habe ich im Idealfall nach 40, spätestens nach 60 Sekunden, die
komplette Info.
Bei schlechtem Empfang verwerte ich nur die korrekten Daten.
Wenn z.B. in der ersten Minute nur die Zeit korrekt war, in der zweiten
nur das Datum, lasse ich dasjenige gelten und habe nach diesen 2 Minuten
(trotz Empfangsfehlern) die vollständige Info.

Man könnte das sogar noch erweitern, indem man das falsche Bit
isoliert, habe ich aber nicht gemacht.


Mit welchem Prozessor Du das machst... geht mit einem PIC genauso gut.
Es ist so gut wie keine Rechenleistung erforderlich.

Autor: Peter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal hier in der Zip. Ich habe auch lange etwas in C gesucht,
vieles war in Assembler.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist was in C:

http://home.tiscali.de/peterd/appl/soft/c51/thcloc...

Ne Portierung nach AVR hätte ich dazu auch, ist ja nur der Timer
anzupassen.


Peter

Autor: Dummie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke Euch für die Infos, damit wird die Sache schon ein bisschen
klarer.

@P. Dannegger:
interessanter, compakter Code..jedoch verstehe ich Ihn noch nicht so
wirklich komplett :(
Könntest Du evtl. die Funktionsweise nochmal grob erläutern?

Wie ist das eigentlich mit dem Parity-Bit?
parity ^= pulse;        // calculate parity
..
  ..
    if( parity )
      dcf77error = 1;
..
Du gehst scheinbar davon aus, das wenn das Parity Bit nicht gesetzt ist
ein Fehler vorliegt? Ist das Parity-Bit denn immer logisch 1 wunder?

beste Grüße

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

  if( i == 0xFF ){        // test parity
    if( parity )
      dcf77error = 1;
    parity = 0;
    return;
  }

D.h. Parity wird immer nur dort ausgewertet, wo in der Aktion-Tabelle
ein 0xFF drinsteht.

Die Tabelleneinträge bedeuten entweder, es wird Wert x an Adresse y
addiert oder es wird das Paritybit geprüft.

Mir war das einfach zuviel Schreibarbeit, Unmengen an cases in eine
switch-Anweisung zu schreiben, deshalb die Steuerung der Auswertung
über eine Tabelle.


Peter

Autor: Mario Richter (mario001) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

[werbung]
Die Funkuhrsoftware für meine Nixie-Uhr hab ich auch selbst
geschrieben, nach Anregungen hier im Forum (vor allem von Peter und
seiner Methode der Auswertung zweier aufeinanderfolgener Datensätze).

Eine Beschreibung der Uhr gibt's auf meiner HP, den Quellcode
(Testversion für ein 2x16-LCD) häng ich euch mit ran (bitte nicht
wundern, das war mein erstes größeres Projekt und vielleicht noch etwas
rookie-mäßig - aber es funktioniert bestens).
[/werbung]

Grüße, Mario

Autor: Dummie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke
..das mit der Tabelle war mir soweit klar.

Was das Parity-Bit betrifft, stand wohl jemand auf meiner Leitung.
Die Parity Auswertung muss man schon im Zusammenhang mit allen
auszuwertenden Bits sehen, dann klappts auch mit dem Nachbarn, ähm
Verständniss :)

nochmals danke, Ihr habt mir sehr geholfen

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.