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

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