Hallo,
ich versuche gerade das DCF77 Signal auszulesen und zu verarbeiten.
Meine Idee ist es zwischen steigende und fallender Flanke zu
unterscheiden um eine Impulsdauermessung hunzubekommen.
Also wenn eine steigende Flanke erkannt wird, soll die Zeit gestoppt
werden und wenn sie fällt wird die Zeit wieder angehalten, und je nach
Impulslänge kann man dann ja sagen ob es eine 0 oder eine 1 ist. bzw. ob
die Minute vorbei ist und eine neue beginnt.
Also ich will quasi auf steigende Flanke abfragen, falls erkannt: im
interrupt umstellen das fallende flanken erkannt werden und das selbe
umgedreht.
Letztendlich soll für den Zeitraum in der eine steigende Flanke erkannt
wurde bis eine fallende Flanke erkannt wurde eine LED (an PORTC)
leuchten.
Mein Code dazu:
1 | #include <avr/interrupt.h>
|
2 |
|
3 |
|
4 | int main()
|
5 | {
|
6 |
|
7 | DDRC = 0xFF;
|
8 |
|
9 | DDRD &= ~(1<<2); //PD2 als Eingang DCF77 Signal
|
10 | PORTD|= (1<<2); //Pullup aktivieren
|
11 |
|
12 |
|
13 | GICR = 1<<INT0; // Enable INT0
|
14 | MCUCR = (1<<ISC00) | (1<<ISC01); // steigende flanke
|
15 |
|
16 | sei();
|
17 |
|
18 | while(1){}
|
19 | }
|
20 |
|
21 | ISR(INT0_vect)
|
22 | {
|
23 | cli();
|
24 |
|
25 | if((MCUCR & (1<<ISC00)) && (MCUCR & (1<<ISC01))) // steigende Flanke erkannt
|
26 | {
|
27 | MCUCR = (1<<ISC01);
|
28 | PORTC = 0x00;
|
29 | }
|
30 | if((MCUCR & ~(1<<ISC00)) && (MCUCR & (1<<ISC01))) // fallende Flanke erkannt
|
31 | {
|
32 | MCUCR = (1<<ISC00) | (1<<ISC01);
|
33 | PORTC = 0xFF;
|
34 | }
|
35 |
|
36 |
|
37 | sei();
|
38 | }
|
leider klappt das ganz so nicht, die LED leuchtet durchgängig.
Was mache ich falsch?
Gruß Marcel