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


von Mike (Gast)


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

von Sebastian (Gast)


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

von Mike (Gast)


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ß

von Uwe Nagel (Gast)


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...

von Mike (Gast)


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ß

von peter dannegger (Gast)


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/thclock/index.htm


Peter

von Mike (Gast)


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ß

von Hubert (Gast)


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.

von peter dannegger (Gast)


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

von Karl Grampert (Gast)


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

von Werner Boellmann (Gast)


Lesenswert?

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

von Klaus W. (Firma: privat) (texmex)


Lesenswert?

Ganz verstehe ich das nicht:
1
^50d88a4 48) void clock(void)
2
^50d88a4 49) {
3
^50d88a4 50)   uchar code MDAYS[] = {
4
^50d88a4 51)     29, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
5
^50d88a4 52)   uchar i;
6
^50d88a4 53) 
7
^50d88a4 54)   time.second++;
8
^50d88a4 55)   if( time.second == 60 ){
9
^50d88a4 56)     time.second = 0;
10
^50d88a4 57)     one_minute = 1;                        // to correct deviation 
11
^50d88a4 58)     time.minute++;
12
^50d88a4 59)     if( time.minute == 60 ){
13
^50d88a4 60)       time.minute = 0;
14
^50d88a4 61)       time.hour++;
15
^50d88a4 62)       switch( time.hour ){
16
^50d88a4 63)    case 24:
17
^50d88a4 64)      time.hour = 0;
18
^50d88a4 65)      time.day++;
19
^50d88a4 66)      time.wday++;
20
^50d88a4 67)      if( time.wday == 8 )
21
^50d88a4 68)        time.wday = 1;
22
^50d88a4 69)      i = time.month;
23
^50d88a4 70)      if( i == 2 && (time.year & 3) == 0 )  // leap year
24
^50d88a4 71)        i = 0;
25
^50d88a4 72)      if( MDAYS[i] == time.day ){
26
^50d88a4 73)        time.day = 1;
27
^50d88a4 74)        time.month++;
28
^50d88a4 75)        if( time.month == 13 ){
29
^50d88a4 76)          time.month = 1;
30
^50d88a4 77)          time.year++;
31
^50d88a4 78)          if( time.year == 100 )
32
^50d88a4 79)            time.year = 0;                  // next century
33
^50d88a4 80)        }
34
^50d88a4 81)      }
35
^50d88a4 82)      break;
36
^50d88a4 83) // case 2:
37
^50d88a4 84) // case 3: summertime(); break;
38
^50d88a4 85)       }
39
^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

von Klaus W. (Firma: privat) (texmex)


Lesenswert?

Klaus W. wrote:

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

Also "<" wenn dann....

von oszi40 (Gast)


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 !

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.