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