Forum: Mikrocontroller und Digitale Elektronik Externer Interrupt löst nicht aus


von Dominik S. (Gast)


Angehängte Dateien:

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 !

von swr (Gast)


Lesenswert?

Nicht nur sei() sondern auch den Pin0 Int. freigeben.

von Johannes M. (johnny-m)


Lesenswert?

Du musst den Interrupt auch lokal freigeben! Schau Dir mal das Register 
GICR an. Da gibt es ein Bit, dem Du Deine Aufmerksamkeit schenken 
solltest.

von Johannes M. (johnny-m)


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.

von Dominik S. (Gast)


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 ? :)

von Johannes M. (johnny-m)


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).

von Christoph M. (Firma: privat) (mauralix)


Lesenswert?


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.