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 !
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.
...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.
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 ? :)
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).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.