Forum: Mikrocontroller und Digitale Elektronik DCF77 an Atmega32


von Tobias (Gast)


Lesenswert?

Hallo,

ich habe versucht mit der Library von ulrichradig.de einen DCF77 an 
einem Atmega 32 ans laufen zu bekommen. Leider läuft das nicht.
Die Empfängerplatine habe ich von Conrad. Wie folgt habe ich die 
Empfängerplatine angeschlossen:
PIN1 --> Ground
PIN2 --> VCC(5V)
PIN3 --> nichts
PIN4 --> an den INT0 des Atmega32 und Parallel einen 10k Pullup

In der clock.h habe ich den Eintrag SIG_INTERRUPT0 zu INT0_vect 
geändert, da mein Compiler SIG_INTERRUPT0 nicht mehr kennt...

Wenn ich das ganze jetzt Teste bekomme ich in Putty aber nur:

0-0-0 Time: 0:1:27 Sync: 0  Rx: 1

bzw.

0-0-0 Time: 0:1:27 Sync: 0  Rx: 0

zusehen und die Zeit wird einfach nur hochgezählt. Kann mir jemand bei 
dem Problem helfen?

Danke schon mal!

Tobias

von Karl H. (kbuchegg)


Lesenswert?

Tobias schrieb:

> zusehen und die Zeit wird einfach nur hochgezählt. Kann mir jemand bei
> dem Problem helfen?

Da würde ich als erstes mal das Pferd ganz vorne aufzäumen und 
kontrollieren, ob da überhaupt Pulse aus dem Empfänger rauskommen, ob 
die beim Mega ankommen und ob die reichen um damit einen Eingangspin zu 
treiben.

DCF Empfänger sind oftmals nicht die stromstärksten.

Und ach ja. Wenn da Pulse rauskommen, ob die dann auch so sind, dass sie 
mit der Annahme des Codes übereinstimmen. Hast du
* Ruhepegel ist 0, der Puls ist 1
* Ruhepegel ist 1, der Puls ist eine Absenkung nach 0
Welches liegt hardwarebedingt vor, wovon geht die Software aus?

: Bearbeitet durch User
von Georg G. (df2au)


Lesenswert?

Bist du sicher, dass die Polarität des DCF Ausgangs stimmt? Aus dem 
"Datenblatt" bei C geht das leider nicht hervor. Versuch einfach mal 
Pin3 statt Pin4

von Karl H. (kbuchegg)


Lesenswert?

> 0:1:27

Ist das 1 Minute 27 Sekunden nach dem Einschalten?

Das ist zu kurz.
Meistens dauert es so um die 3 Minuten, bis übliche DCF-Empfangscodes 
eine gültige Zeit rausrücken.

Um ein Zeittelegramm zu empfangen, benötigt man 1 komplette Minute.
Jetzt weiß man aber nicht, an welcher Stelle des gerade laufenden 
Telegrams man sich nach dem Einschalten befindet, d.h. da muss erst mal 
abgewartet werden, bis im Telegramm erkenbar ist, dass ein neues 
beginnt. Das kann schlimmsten Falls schon mal 58 Sekunden dauern. D.h. 
im Worst Case hat man erst nach 2 Minuten das erste mal ein komplettes 
DCF-Telegram zur Auswertung vorliegen. Und meistens warten die Codes 
dann auch noch, bis ein 2-tes Telegramm vorliegt, um aus dem Vergleich 
der beiden eine Plausibilitäts-Entscheidung treffen zu können. 
Ausgenommen der Umschaltung auf Sommerzeit kann sich ja die Zeit 
zwischen 2 Telegrammen um nicht mehr als 1 Munte unterscheiden. Hat man 
größere Differenzen, dann stimmt was nicht.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Allerdings:

Du hast den Code ja vor dir. Und putty arbeitet auch.
Was hindert dich daran, da noch in den AVR-Code ein paar Ausgaben 
einzubauen, so dass du am putty siehst, was im Programm vor sich geht?

: Bearbeitet durch User
von Tobias (Gast)


Lesenswert?

Georg G. schrieb:
> Versuch einfach mal Pin3 statt Pin4

Habe ich beide schon getestet, leider hat das nichts gebracht...

Karl Heinz Buchegger schrieb:
> Ist das 1 Minute 27 Sekunden nach dem Einschalten?

Ja das stimmt, aber ich habe auch schon habe ca. 15 min gewartet und es 
hat nicht gebracht...


Ich hab die Vermutung, dass das DCF Modul kapput ist...

von holger (Gast)


Lesenswert?

>Ich hab die Vermutung, dass das DCF Modul kapput ist...

Oder es empfängt nichts. Das kann so Ursachen wie Monitore,
LED Stripes mit PWM oder Multiplexanzeigen haben. Auf eine
Eisenplatte sollte man die Module auch nicht legen.

von Karl H. (kbuchegg)


Lesenswert?

Tobias schrieb:

> Ja das stimmt, aber ich habe auch schon habe ca. 15 min gewartet und es
> hat nicht gebracht...
>
>
> Ich hab die Vermutung, dass das DCF Modul kapput ist...

Muss janicht gleich kaputt sein.
Genau deswegen hab ich ganz am Anfang gesagt, ich würde mir halt mal 
ansehen, ob da überhaupt Pulse rauskommen.

Aber das scheint irgendwie zu einfach zu sein. Stochern im Nebel ist ja 
viel interessanter.

von Georg G. (df2au)


Lesenswert?

holger schrieb:
> Oder es empfängt nichts. Das kann so Ursachen wie Monitore

Die Dinger sind besser als manch einer glaubt. Ich betreibe das Ding im 
Keller, 2m neben zwei Monitoren, 300km von Frankfurt entfernt.
Man sollte es nur richtig ausrichten, quer nach Frankfurt.

von holger (Gast)


Lesenswert?

>2m neben zwei Monitoren, 300km von Frankfurt entfernt.

2m ist ja ok. Ich habe im Moment eins 50cm neben meinem Laptop liegen.
Direkt daneben empfängt es nichts mehr. Auch direkt neben meinem
Oscilloscope nicht. Also immer schön Abstand halten.

>Man sollte es nur richtig ausrichten, quer nach Frankfurt.

Genau. Das bringt ne Menge.

von Tobias (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Genau deswegen hab ich ganz am Anfang gesagt, ich würde mir halt mal
> ansehen, ob da überhaupt Pulse rauskommen.

Oszilloskop oder Logic Analyser habe ich leider nicht. Ich habe aber 
jetzt einmal eine LED an den Ausgang vom DFC gehängt. Die LED blinkt 
relativ gleichmäßig. Also habe ich wohl einen Puls?

holger schrieb:
> Also immer schön Abstand halten.

Habs jetzt mal mit ein ca. 30cm Kabel ans Fenster gelegt, immer noch 
nichts...
Ich hab jetzt auch mal so eine fertige Funkuhr daneben gestellt, die 
braucht ca. 3 min um ein Signal zubekommen.


Ich bin echt am verzweifeln und mit meinem Latein am Ende...

von m. keller (Gast)


Lesenswert?

Schau doch erstmal ob dein Empfänger überhaupt was tut. :

Einfach den Pinstatus an einen anderen Pin kopieren, daran eine LED ran 
damit du das blinken siehst.

von Matthias K. (mkeller)


Lesenswert?

Ja das bedeutet du hast schonmal prinzpiell ein Signal.

von holger (Gast)


Lesenswert?

>Ich habe aber
>jetzt einmal eine LED an den Ausgang vom DFC gehängt. Die LED blinkt
>relativ gleichmäßig. Also habe ich wohl einen Puls?

Ja, dein Modul ist völlig in Ordnung.
Ulrichs Code steigt aber bei der kleinsten Störung aus.
Hab ich selbst mal probiert. Achte mal drauf ob bei dem
regelmäßigen Blinken evtl kurze Doppelblinker bzw. Aussetzer
dabei sind.

von holger (Gast)


Lesenswert?

>Ulrichs Code steigt aber bei der kleinsten Störung aus.

Was nicht bedeutet das er abstürzt! Der kleine Unterschied.
Wollte ich nur mal anmerken. Sorry Ulrich;) Er funktioniert
schon ganz gut wenn auch guter Empfang gegeben ist.

von bko (Gast)


Lesenswert?

Also mein Selbstbau DFC77 Empfängter (Al*i Ausschlacht-Uhr und FPGA)
zeigt seit ca 40 Minuten auch kein störungsfreies Signal mehr an.
Und auch Funkwecker am Fenster hat zu Zeit auch nur sporadisch Signal
(hier in München).

Der hier aber hat scheints ein brauchbares Signal (siehe Log von heute)
http://www.dcf77logs.de/logfiles.aspx

Sch...wetter?

von Karl H. (kbuchegg)


Lesenswert?

Tobias schrieb:

> Oszilloskop oder Logic Analyser habe ich leider nicht. Ich habe aber
> jetzt einmal eine LED an den Ausgang vom DFC gehängt. Die LED blinkt
> relativ gleichmäßig. Also habe ich wohl einen Puls?

Sieht wohl so aus.
Das DCF Signal sind Pulse die im 1 Sekunden Abstand kommen. Der Puls ist 
entweder 0.1 Sekunden lang oder 0.2 Sekunden. Je nachdem ob eine 0 oder 
eine 1 übertragen werden soll. Mit ein wenig Übung kann man die 
unterscheiden. Der jeweils 59.te Puls muss fehlen. Das ist das Signal, 
dass mit dem nächsten Puls die nächste Minute anfängt.

Wenn du das so beobachten kannst, dann wird wohl das Signal in Ordnung 
sein.

> Ich bin echt am verzweifeln und mit meinem Latein am Ende...

ok.

VOn der Kette
1
   Input  ->  Verarbeitung  ->  Ausgabe

dürfte somit der Teil 'Input' abgehakt sein. Das DCF-Signal sieht ok 
aus.

Dann gehts eben weiter mit der nächsten Komponente. Verarbeitung.

Die Pulse werden per Interrupt eingelesen. Also ist dort dein nächster 
Ansatzpunkt. Die Interrupt Routine hergeholt und dort mal ein paar Tests 
eingebaut. Wenn du jetzt eine LED an einem Pin deines Megas hängen hast, 
dann ist genau jetzt der Zeitpunkt gekommen, die auch zu benutzen.
Wenn der Code den Anfang des Pulses festgestellt hat schaltest du die 
LED ein, wenn der Code das Ende des Pulses festgestellt hat, schaltest 
du sie aus.
Und dann schaun wir mal, ob die Pulse am Eingang des Mega immer noch da 
sind und vom Programm auch verstanden werden.

Wenn die Pulse dort auch noch da sind, dann sehen wir uns an, ob die 
Pulslängen-Erkennung funktioniert. Der Code muss ja letzten Endes 
feststellen, ob der Puls jetzt 100 oder 200ms lang war. Und auch das 
kann man sich ja wieder in irgend einer Form ausgeben lassen.

Du hast den Code vor dir. Du hast einen Editor. Du hast Möglichkeiten, 
wie du dir aus dem Programm heraus Dinge ausgeben lassen kannst, sei es 
mit einer LED oder sei es in dem du über die UART einzelne Buchstaben 
oder Zeichen schickst (damit die UART Übertragung schnell geht). Ran ans 
Gerät, du hast alles was du brauchst um dem Problem auf die Spur zu 
kommen.

: Bearbeitet durch User
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.