mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DCF77 probleme bei decodierung


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich bin gerade dabei mir eine DCF77-Uhr mit LCD zu bauen. Leider 
bekomme ich das Bit-Signal nicht decodiert. Die Auswertung des Signals, 
das Finden der Startposition usw. funktioniert. Bei dem unten stehenden 
Quelltext-Auszug sollen die Signale von Sekunde 21-27 erfassen und 
anschließend auf das LCD ausgeben. Aber irgendwie funktioniert das 
nicht. Kann mir jemand einen Tip geben? Muss mir die funktion 
get_signal() etwas anderes liefern?
Die Funktion get_signal() liefert mir jede Sekunde eine 1 oder 0 als 
int.
char buffer;
unsigned char minute=0x00;

for (int i=1; i<=7; i++)
{
get_signal();       // sendet 1 oder 0         

minute |= signal;   // Signal in minute schreiben
minute >>= 1;       // Inhalt um eine Stelle verschieben
}

stunde >>= 1;       // 1x verschieben um auf 8bit zu kommen

utoa( minute, buffer, 10 );   // in ascii umwandeln
lcd_string(buffer);           // auf dem LCD ausgeben

Autor: Helmut -dc3yc (dc3yc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann das sein, dass >>= die Daten aus dem Byte schiebt? Ich würde es mal 
mit << probieren! Ausserdem kommen zuerst die niederwertigen Bits, 
sodass du am Schluss das Ganze noch umdrehen musst.
Andere Möglichkeit wäre, ins MSB zu schreiben und dann nach unten (>>) 
zu verschieben.

Helmut.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Variable "Signal" wird in der Funktion get_signal() verändert? 
(liefert 1 oder 0 zurück?)

Mein Vorredner hat recht mit >> schiebst du alles um eine Stelle nach 
rechts (also raus).

Alternative:
  minute |= (1 << i);

Kannst dir auch mal folgendes programm anschauen. Funktioniert bei mir 
recht gut.
Beitrag "AVR DCF-77 Codereview"

Grüße

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt eine Lösung: Warum nicht gleich so:

Die Funktion „get_signal() gab mir bei einem 1-Signal des DCF eine 1 
raus, bei einem 0-Signal eine 0. Die Funktion habe ich nun so 
umgeschrieben, dass sie mir bei einem 1-Signal des DCF eine 0x80 
ausgibt.

0x80 => 0b1000 000

Dieses Bit-Muster kann ich nun problemlos nach recht verschieben, sodass 
am Ende die Bits automatisch in der richtigen Reihenfolge in der 
Variablen stehen.

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.