DCF77 Interrupt Problem

Gast #3170353
Lesenswert?

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

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