Forum: Mikrocontroller und Digitale Elektronik Problem mit Externen Interrupt


von Alexander B. (jeroen)


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 ?

von Daniel B. (und3rt4ker)


Lesenswert?

µC?
Sprache?
Port?
Pin?
Programm?
Sinn?

Mfg
und3t4ker

von Alexander B. (jeroen)


Lesenswert?

Das Programm ist in c geschreiben und der Interupt Pin ist INT1.

Geht es den Grundsätzlich ?

von Spess53 (Gast)


Lesenswert?

Hi

Und wo ist dein Interruptroutine?

MfG Spess

von Alexander B. (jeroen)


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
}

von Falk B. (falk)


Lesenswert?


von Alexander B. (jeroen)


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 ?

von Karl H. (kbuchegg)


Lesenswert?

Standardantwort (kommt mindestens 10 mal am Tag)
1
volatile int i=0;

von Alexander B. (jeroen)


Lesenswert?

dann kommt wengistens schnell ne antwort.

ist aber sehr kommisch, das man goabale variablen extra angeben muss.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.