Hi, ich suche jetzt seit 2 Tagen nach dem gleichen Problem und wette das es ein ein/zwei Zeiler ist. Mein Programm das an sich nicht mal besonders schön ist (dazu brauche ich erstmal keine Tipps, danke) reagiert nicht auf die Interrupts. Per polling klappt alles. Die Kommentare waren auch weniger für die Öffentlichkeit bestimmt ;) sind mehr selbstgespräche Vielen Dank im voraus, JKW
1 | MCUCR |= (1<<ISC00) | (1<<ISC10); //Fallende Flanke von INT0 oder INT1 als auslöser |
2 | MCUCR &= ~((1<<ISC00) | (1<<ISC10)); //Fallende Flanke von INT0 oder INT1 als auslöser |
Ja was denn nun? gesetzt oder nicht gesetzt? so wie es jetzt ist, hast du einen Interrupt bei Low-Level am Pin, weil die Enistellbits gelöscht sind. (und keine deiner in den ISR veränderten Variablen ist volatile)
z.B. für ATMEGA8:
1 | ======================================================================
|
2 | externer Interrupt (INT0) |
3 | ----------------------------------------------------------------------
|
4 | |
5 | #include <avr/interrupt.h> |
6 | |
7 | /* Interrupt vectors */
|
8 | /* External Interrupt Request 0 */
|
9 | #define INT0_vect _VECTOR(1)
|
10 | |
11 | // Datenaustausch mit ISR; beachte: volatile!
|
12 | volatile uint8_t Test; |
13 | |
14 | /* Funktionsruempfe für Interruptfunktionen */
|
15 | ISR(INT0_vect) |
16 | {
|
17 | /* Interrupt Code */
|
18 | /* z.B.: toggeln Wert Test */
|
19 | if (Test == 255) Test = 0; |
20 | else Test = 255; |
21 | }
|
22 | |
23 | /* Initialisierung der Interrupt-Quelle */
|
24 | |
25 | // externer Interrupt
|
26 | MCUCR |= (1<<ISC01); // fallende Flanke INT0 |
27 | MCUCR |= (1<<ISC01) | (1<<ISC00); // steigende Flanke INT0 |
28 | GICR |= (1<<INT0); // Enable Interrupt INT0 |
29 | |
30 | sei (); //Interrupts global erlauben |
31 | |
32 | |
33 | /* Sonstiges */
|
34 | // deaktivieren des externen Interrupts
|
35 | GICR &= ~(1<<INT0); |
36 | |
37 | ======================================================================
|
Oh man! danke Karl Heinz Buchegger ;) das hab ich 100mal gelesen und immer für richtig befunden ich wollte MCUCR |= (1<<ISC00) | (1<<ISC10); //jede Flanke MCUCR &= ~((1<<ISC01) | (1<<ISC11)); //jede Flanke haben. Jetzt komm ich mir wie ein Idiot vor. :D Danke sehr manchmal ist es etwas waldig bei mir
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.