Forum: Mikrocontroller und Digitale Elektronik Interrupt an INT0 und 1


von Kolja W. (-jkw-)


Angehängte Dateien:

Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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)

von Dietrich L. (dietrichl)


Lesenswert?

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
======================================================================

von Kolja W. (-jkw-)


Lesenswert?

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
Noch kein Account? Hier anmelden.