Interrupt an INT0 und 1

OP #2226771
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
Angehängte Dateien:
#2226783
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)
#2226784
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
======================================================================
OP #2226800
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

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