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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.