PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupt durch Taster ausgelöst



Seppi1203
05.03.2007, 20:52
Hallo

Wie löse ich durch einen Taster ein Interrupt das zu einem gewissen Punkt im Programm springt aus.

Atmega 32

Taster auf Ground

Kann mir jemand dabei helfen

wkrug
05.03.2007, 21:25
Nun du nimmst den PIN INT 0 oder INT 1 (PD2 oder PD3) und gibst den Interrupt mit "falling edge" frei - (MCUCR) GICR nicht vegessen zu setzen. Welche Register dazu wie eingestellt werden müssen findest Du im Datenblatt des ATMEGA 32 auf Seite 64...66.

Wie dein Compiler das gebacken kriegt, das es sich bei deinem Programmteil um eine Interrupt Service Routine handelt musst Du im Manual deines Compilers nachlesen.

Ein mögliches Problem dabei ist, das ein Taster nicht auf einmal schließt, sondern während des Einschaltens mehrfach schliest.
Man nennt das auch "Kontaktprellen".

Dadurch wird bei einem Tastendruck die Interruptroutine mehrfach angesprochen.
Wenn das für dein Programm kein Problem ist kannst Du es lassen.
Wenn Du irgendwelche Inkremente oder Dekremente damit machen willst musst Du dir noch eine Entprellprogramm überlegen oder aus dem Netz einen entsprechenden Codeschnipsel saugen.
Manche Compiler (z.B. Bascom) haben die Routine schon in ihrem Wortschatz drin (debounce?).

So wie Du das beschreibst soll dein Programm, nach dem Ende der Interruptroutine, dann aber an einer anderen Stelle im Hauptprogramm weiterarbeiten ?

Man könnte das über Stack Manipulation machen, das würd ich aber auf keinen Fall empfehlen, da der Stack irgendwann auch wieder entladen werden muß und solche Eingriffe schon sehr nah am Herz des Controllers rumwerkeln.

Setz lieber ein Flag (Bit) in deiner Interruptroutine, das in der Hauptprogrammschleife dann abgefragt wird und dann an die gewünschte Stelle springt.
Dadurch kann dann auch deine Interruptroutine sehr kurz ausfallen.