Problem mit Externen Interrupt

OP #791450
Lesenswert?

Hi,

ich will ein Signal auswerten. Dazu arbeite ich mit dem Externen 
Interupt. Konfiguation:

GIMSK = (1<<INT1);
MCUCR = (1<<ISC11);

Das funktioniert auch alles nur wenn ich jetzt nach x ms messen, messe 
ich immer eine 1. Ohne den Externen Interrupt geht das.

Wo ist meine Fehler ?
OP #791508
Lesenswert?

hier ist die Interruptroutine:
1
ISR(INT1_vect)
2
{
3
  GIMSK = 0x00;/*Externer Interrupt deaktivieren*/
4
  MCUCR = 0x00;
5
  
6
  Signal_messen_und_auswerten();
7
  
8
  GIMSK = (1<<INT1);/*Externer Interrupt aktivieren*/
9
  MCUCR = (1<<ISC11);
10
}

Die Funktion Signal_messen_und_auswerten() misst am INT1 Pin leider nur 
1en.

Mit diesem Code funktion es:
1
while(1)
2
{
3
  if ( INT1_PIN() == 0)
4
  {
5
    Signal_messen_und_auswerten();
6
  }
7
}
OP #791689
Lesenswert?

ok, Verschachtelte Interrupts.
Gibs es Tricks mit denen man das umgehen kann ?



ich hab da auch noch ein anders Problem. ich will das mein hauptprogramm 
solange wartet bis ein Interupt 10mal auftritt.

Ich habs so lösen wollen:
1
int i=0;
2

3
main()
4
{
5
...
6
while(i<10);
7
interput deaktivieren;
8
...
9
}
10

11
ISR(..)
12
{
13
i++;
14
}

aber es geht einfach nicht, die while(i<10); wird nie abgebrochen ? 
Liegt es daran das die Schleife einfach weg optimiert wird ?

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