www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DCF77 - Signallängenüberprüfung


Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo @ll,

Ich programmiere einen µC um einen DCF77 - Empfänger auszulesen.
Um die ankommenden Signale auf Plausibilität zu kontrollieren, wollte
ich die Zeiten mit einer Toleranz von +/-10% überprüfen.

Bei der Darstellung des Signals auf dem Oszi hab ich festgestellt, daß
die Signallängen doch ziemlich stark von den überall angegebenen 100
bzw. 200ms abweichen.

Meine Frage an die DCF77 Experten ist nun, ändert sich diese
Signallänge öfters, oder ist diese Abweichung ok, bzw. gleichbleibend.
(möglicherweise Unterschiede zum "Ersatzsender")

Gruß und Dank von Mike

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie groß ist denn die abweichung?
ich hatte auch so meine probleme damit. auf digital hobby gab es ein
beispiel projekt.
die abweichungen könnte auch vom schlechten empfang kommen.
beispiel hin oder her... am besten hatte es bei mir funktioniert wenn
ich mit dem int vom der uhr einen timer gestartet hab und dann nach
sagen wir 150 ms geguckt hab ob ein high oder low am pin anliegt

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Sebastian,

ähnlich hab ichs auch vor, trotzdem dachte ich an eine etwas
gründlichere Überprüfung, da der letztentliche Einsatz in einer
etwas"verseuchten" Umgebung stattfindet. Da die Signale aber recht
gut aussehen (von der Signalform her), halt nur ca. 10% zu kurz sind
wollt ich mal Langzeiterfahrungen einholen, um die Funktionalität auch
in ein paar Monaten / Jahren noch zu gewährleisten.

Gruß

Autor: Uwe Nagel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deutliche Abweichungen in der Signallänge sind je nach Empfänger leider
normal. Es sollten jedoch zwei deutlich unterscheidbare Längen
vorkommen. Davon den Mittelwert nehmen und auf kürzer oder länger
vergleichen...

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es vom Empfänger abhängt, solls mir auch recht sein, die
Signallänge bleibt dann ja immer gleich. Somit kann ich sehr genau
meine Überprüfung durchführen.

Gruß

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Abweichungen enstehen warscheinlich durch den Tiefpaß im
Empfängermodul und werden auch von der Signalstärke abhängig sein.

Wichtig ist daher auch die Impulsabstände zu testen und auch die Anzahl
der Pulse je Minute (59).

Denn Störungen sind ja asynchron zum Nutzsignal, d.h. sie erzeugen
zusätzliche Pulse an falscher Stelle oder überdecken Pulse.

Eine sehr zuverlässige Fehlererkennung kannst Du auch in meinem
Codebeispiel finden:

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


Peter

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

Ich hab mir dein Programm mal in Ruhe angeschaut, ehrlich gesagt ich es
mir noch etwas zu hoch, da ich zwar meine ersten Gehversuche in C schon
absolviert habe, trotzdem aber vorwiegend in Assembler programmiere,
und zudem noch ziemlich weit am Anfang mit meinen "Künsten" stehe.

Was die Signalabstände betrifft, die sind natürlich schön 1sec. bzw.
einmal 2sec. auseinander, wie`s halt soll. Störungen kann man doch am
besten ausblenden, wenn man das Nutzsignal auf die bestimmten
erwarteten Eigenschaften (z.B.Signallänge) überprüft, oder? Und wenn
die vom jeweiligen DCF - Modul abhängen, dann muß die Programmierung
doch an die einzelnen Module angepasst werden.

Gruß

Gruß

Autor: Hubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal in der Codesammlung unter DCF77 und Temperatur. Das war mein
erstes größeres C-Programm. Sicher noch nicht optimal, aber die
Impulslängenüberwachung zum einstellen.

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An die Module muß nichts angepaßt werden.
Wenn Du 10ms Abweichung festgestellt hast, dann nimm einfach ein etwas
größeres Toleranzfenster.

Ich taste mit 64Hz (=15,6ms) ab, dadurch ergeben sich in meinem
Programm folgende magische Zahlen:

4: 62ms (min)
20: 312ms (max)
10: 156ms (0/1-Erkennung)
60: 0,94s (min 1s)
70: 1,09s (max 1s)
120: 1,87s (min 2s)
140: 2,18s (max 2s)



Peter

Autor: Karl Grampert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

was mich mal interessiert, werden die Daten von Minute x auch in Minute
x übertragen? Oder sind es die Daten der folgenden Minute??

Karl

Autor: Werner Boellmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es sind die Daten der folgenden Minute. Ich habe im Moment keinen Link,
aber am besten danach Googeln (oder M$M-en) :)

Autor: Klaus W. (Firma: privat) (texmex)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ganz verstehe ich das nicht:
^50d88a4 48) void clock(void)
^50d88a4 49) {
^50d88a4 50)   uchar code MDAYS[] = {
^50d88a4 51)     29, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
^50d88a4 52)   uchar i;
^50d88a4 53) 
^50d88a4 54)   time.second++;
^50d88a4 55)   if( time.second == 60 ){
^50d88a4 56)     time.second = 0;
^50d88a4 57)     one_minute = 1;                        // to correct deviation 
^50d88a4 58)     time.minute++;
^50d88a4 59)     if( time.minute == 60 ){
^50d88a4 60)       time.minute = 0;
^50d88a4 61)       time.hour++;
^50d88a4 62)       switch( time.hour ){
^50d88a4 63)    case 24:
^50d88a4 64)      time.hour = 0;
^50d88a4 65)      time.day++;
^50d88a4 66)      time.wday++;
^50d88a4 67)      if( time.wday == 8 )
^50d88a4 68)        time.wday = 1;
^50d88a4 69)      i = time.month;
^50d88a4 70)      if( i == 2 && (time.year & 3) == 0 )  // leap year
^50d88a4 71)        i = 0;
^50d88a4 72)      if( MDAYS[i] == time.day ){
^50d88a4 73)        time.day = 1;
^50d88a4 74)        time.month++;
^50d88a4 75)        if( time.month == 13 ){
^50d88a4 76)          time.month = 1;
^50d88a4 77)          time.year++;
^50d88a4 78)          if( time.year == 100 )
^50d88a4 79)            time.year = 0;                  // next century
^50d88a4 80)        }
^50d88a4 81)      }
^50d88a4 82)      break;
^50d88a4 83) // case 2:
^50d88a4 84) // case 3: summertime(); break;
^50d88a4 85)       }
^50d88a4 86)     }

In Zeile 72 wird anhand der MDAYS Tabelle geprüft ob ein 
"Kalendertagüberlauf" für das
jeweilige Monat stattgefunden hat. Aber bedeutet das nicht, dass der 
jeweilige Grenzwert
(also der 30. bzw. 31 des Monats) gar nicht mehr erreicht wird, sondern 
dann sofort
auf den 1. des Monats umgeschaltet wird? Müsste es statt == nicht <= 
heissen?

Was in Zeile 57 gemacht wird, verstehe ich auch noch nicht ganz, aber da 
muss ich mir
den restlichen Code erst noch etwas angucken :-).

Viele Grüße,
Klaus

Autor: Klaus W. (Firma: privat) (texmex)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus W. wrote:

> auf den 1. des Monats umgeschaltet wird? Müsste es statt == nicht <=
> heissen?

Also "<" wenn dann....

Autor: oszi40 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schiebt mal zum Test die Daten längere Zeit in eine Datei.
Bei mir kam da durch Fremdstörungen ziemlicher Müll vom Empfänger.
Statt 11:11 Uhr 11:$$ usw. .... jedenfalls auch Zeichen die todsicher 
keine Zahlen waren! Deshalb gut prüfen !

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.