Probleme um das DCF77-Signal zu lesen

OP #1908877
Lesenswert?

Hallo, Leute!

Nachdem ich mit dem Display klar gekommen bin, habe ich das nächste 
Problem auf dem Tisch, und zwar: die Zeit von einem DCF77-Modul 
(Reichelt) zu lesen.

Ich habe die PIN "Signal" an PB1 und VDD an PB0 eines ATMega32 
verbunden.

Nun schalte ich das Ding ein:
1
#define DCF77_SIGNAL_PORT     PORTB
2
#define DCF77_SIGNAL_DDR      DDRB
3
#define DCF77_SIGNAL_PIN      PINB
4
#define DCF77_SIGNAL          1
5

6
#define DCF77_UB_PORT         PORTB
7
#define DCF77_UB_DDR          DDRB
8
#define DCF77_UB_PIN          PINB
9
#define DCF77_UB              0
10

11
  DCF77_UB_DDR |= _BV(DCF77_UB);
12
  DCF77_SIGNAL_DDR &= ~_BV(DCF77_SIGNAL);
13
  DCF77_UB_PORT |= _BV(DCF77_UB);

Und in einer Schleife werde ich die Daten lesen...
Laut Doku wenn ein Signal 100ms lang ist, ist eine 0, wenn 200ms lang 
ist, eine 1.
Hier meine Schleife:
1
  while(1)
2
  {
3
    lcdGotoXY(2, 2);
4
    if (PORTB & (1<<PB1))
5
    {
6
      PORTB = ~(1<<PB1) & ~(1<<PB0);
7
      len = getUptime() - start;
8
      if(len > 100)
9
        c = '1';
10
      else
11
        c = '0';
12
    }
13
    else
14
    {
15
      PORTB = (1<<PB1) | (1<<PB0);
16
      start = getUptime();
17
    }
18
    sprintf(str, "%ld - %c - %ld", (getUptime() / 1000), c, len);
19
    lcdPuts(str);
20
  }

Leider ist c immer 0... len ist gerade 97 (immer! Es ändert sich NICHT).

Was mache ich denn jetzt falsches?

Danke euch!
Luca Bertoncello
OP #1908894
Lesenswert?

Ich schrieb:
> Versuch mal das DCF-Signal ungeändert auf einer LED auszugeben. Du
> müsstest lange und kurze Impulse sehen. Schreib eine Minute mit und
> berechne die Zeit daraus.

Ich habe kein LED...

Ich habe schon probiert die Hintergrundbeleuchtung des Displays an- und 
auszuschalten, aber flackert SO schnell, daß man nur beim sehr 
aufmerksam gucken verstehen kann, daß es doch flackert...

Das war mein Code:
1
  while(1)
2
  {
3
    lcdGotoXY(2, 2);
4
    if (PORTB & (1<<PB1))
5
    {
6
      PORTB = ~(1<<PB1) & ~(1<<PB0);
7
      lcdBacklightOff();
8
    }
9
    else
10
    {
11
      PORTB = (1<<PB1) | (1<<PB0);
12
      lcdBacklightOn();
13
    }
14
  }

Ideen?

Grüße
Luca Bertoncello
OP #1908921
Lesenswert?

Ich schrieb:
> Irgendeine 5mm 20mA 2V rote LED (mit Vorwiderstand natürlich).
> Es sollte genau einmal pro Sekunde blinken,
> entweder 100ms (Binäre 0) oder 200ms (Binäre 1).
> Den Unterschied sieht man (kurz oder lang).

Na gut, die Hintergrundbeleuchtung des Displays ist nix anderes als ein 
LED.

Aber eine Sache (sehr komisch!) was ich gerade gesehen habe...

Wenn ich den DCF77 AUSSchalte, geht alles weiter wie vorher... Ist es 
normal?

Ich denke, das Ding kriegt sein Strom über ein PIN des ATMegas, aber 
sieht nicht so aus...

Einschalten tue ich mit:
1
DCF77_UB_PORT |= _BV(DCF77_UB);

Ausschalten mit:
1
DCF77_UB_PORT |= _BV(DCF77_UB);

In beide Fälle passiert das gleiche (LED flackert immer gleich lang). 
Warum denn?

Danke
Luca Bertoncello
#1909036
Lesenswert?

Wie ist denn das Modul von Reichelt angeschlossen? Wenn ich mich recht 
entsinne konnten die nur 5 µA am Ausgang treiben...

Ausserdem reagieren DCF-77-Empfänger, egal welcher Lieferant, 
empfindlich auf Störquellen, kann also sein das du einfach keinen 
Empfang hast. Nachts ist besserer Empfang als Tagsüber.
OP #1909075
Lesenswert?

Andreas K. schrieb:
> Wie ist denn das Modul von Reichelt angeschlossen? Wenn ich mich recht
> entsinne konnten die nur 5 µA am Ausgang treiben...

PIN Signal an PB1, PIN UB an PB0 (mit einem Widerstand 1K), die andere 
zwei an GND.
Ein Kerko 100n zwischen GND und UB.

Was ich noch nicht verstanden habe ist: was ist UB?!? Ist es ein 
Eingang? Oder Ausgang? Bekomme ich Daten von dort? Oder muß ich was 
geben?

> Ausserdem reagieren DCF-77-Empfänger, egal welcher Lieferant,
> empfindlich auf Störquellen, kann also sein das du einfach keinen
> Empfang hast. Nachts ist besserer Empfang als Tagsüber.

Naja, 1 und 0 empfange ich jetzt, aber die lange Pause nach dem 59. 
Sekunde immer nicht...

Ideen?
Wie kann ich prüfen, ob das Problem bei meinem Programm ist, und nicht 
bei dem Modul?

Danke
Luca Bertoncello
Gast #1909098
Lesenswert?

Bei dem Modul von Reichelt oder Pollin gibt es häufiger 
Empfangsprobleme. Suche am besten mal hier im Forum. Die besten 
Ergebnisse habe ich selbst mit dem Modul von Conrad gemacht. Allerdings 
ist auch das empfindlich gegenüber einer unsauberen Versorgungsspannung. 
Also ordentlich filtern.
Gast #1909284
Lesenswert?

Also wenn du kurze und lange Impulse siehst, dann muss es auch eine 
Pause in der 59. Sekunde geben. Es ist keine lange Pause, es fehlt eben 
nur ein Impuls. Versuch mal die Impulse aufzuschreiben (ja ich weiß, das 
ist schwierig, am besten mit 2 Personen -> einer schaut, einer schreibt) 
und dann herauszufinden, ob du daraus Datum und Uhrzeit lesen kannst.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren