Externer Interrupt löst nicht aus

Gast #642976
Lesenswert?
• ▲
▼
Hallo zusammen,
habe ein Problem mit dem INT0...

Ich habe einen ATMega32 und progge in C. Es soll detektiert werden,
wenn sich an PD2 (INT0) was ändert, also immer wenn dort ein 
Level-Change passiert soll ein Interrupt ausgelöst werden...

Habe Bit I (SREG) über sei(); gesetzt und das Register MCUCR 
|=(1<<ISC00);
eingestellt.
In der ISR(SIG_INTERRUPT0) soll dann überprüft werden, ob
der PIND2 auf High(Pullup ist aktiviert) oder auf Low liegt(MMCCard ist 
drin)

Leider wird die ISR nie aufgerufen....
Ausgabe auf UART geht, es steht dort entweder EMPTY oder CARD found, 
jenachdem ob die Karte beim Einschalten drin ist oder nicht. Aber
Interrupt wird nie ausgegebn, weil die ISR nicht durchlaufen wird....


Programm ist im Anhang, hantiere da nun leider schon den ganzen Tag dran 
herum, finde den Fehler aber nicht selbstständig, daher hoffe ich auf 
eure Hilfe !
Angehängte Dateien:
#642996
Lesenswert?
• ▲
▼
...abgesehen davon solltest Du möglichst auch die neuen Vektornamen 
verwenden:
1
ISR(INT0_vect)
2
{}

> #include "avr/iom32.h"
Und das hat da gar nichts zu suchen! Es wird GRUNDSÄTZLICH nur die io.h 
eingebunden. Die Auswahl des Controllertyps geschieht im Makefile und 
sonst nirgends.

EDIT:
Hast Du da irgendwelche selbstgebastelten Header drin? eigentlich sollte 
es
1
#include<avr/interrupt.h>
heißen.
Gast #643009
Lesenswert?
• ▲
▼
den Vektornamen habe ich aus der iom32.h
das einbinden der iom32.h habe ich meine ich aus dem tutorial....

also muss ich noch
GICR |= (1<<INT0);

mit einbringen dann sollte es gehen, right ? :)
#643016
Lesenswert?
• ▲
▼
Dominik S. wrote:
> den Vektornamen habe ich aus der iom32.h
Die Vektornamen mit "SIG" am Anfang sind die alten. Die neuen 
Vektornamen bestehen aus den im Datenblatt angegebenen Namen mit der 
Erweiterung "_vect". Wenn möglich, in zukünftigen Projekten nur die 
neuen verwenden (zumal man nicht in die Headerdatei schauen muss, um den 
Namen rauszufinden).

> das einbinden der iom32.h habe ich meine ich aus dem tutorial....
Wo im Tut steht das?

> also muss ich noch
> GICR |= (1<<INT0);
>
> mit einbringen dann sollte es gehen, right ? :)
Sollte...

EDIT:
In C gilt:
1
#include<filename>
fügt eine Datei mit dem Namen "filename", die im 
Standard-include-Verzeichnis steht ein.
1
#include"filename"
hingegen fügt eine Datei "filename", die im Arbeitsverzeichnis steht, 
ein.

Möglicherweise haben Dich die Assembler-Beispiele verwirrt. Da ist die 
Syntax ein bisschen anders.

Die ioXXXX.h-Dateien werden allerdings nie direkt eingebunden, sondern 
immer automatisch über die io.h (müsste eigentlich sogar eine 
Compiler-Warnung geben, wenn man es trotzdem macht).

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.