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 ?
Das Programm ist in c geschreiben und der Interupt Pin ist INT1. Geht es den Grundsätzlich ?
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 | }
|
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 ?
Standardantwort (kommt mindestens 10 mal am Tag)
1 | volatile int i=0; |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.