PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verständniss für Interrupts?!?! völlige verwirrung!!



raptor_79
27.05.2005, 10:33
hallo!

also, ich bastel grad an was, und verwende einen Atmega32.

ich hab da ein programm, das eine temp.sensor abrfage durchführt, 5Sek wartet, taster abfrage und dann weiterläuft. den 2. sensor abfrägt, 5 Sek wartet, und dann wird ein tastet abgefragt, der dann den sprung in ein auswahlmenü durchführt, oder wenn nicht gedrückt, die schleife neu startet.

mein prolbem ist es jetzt, daß das 5-10 sekunden dauert, bis der taster erkannt wird. ich will aber jetzt, daß der taster immer erkannt wird, wenn er gedrückt wird.

dachte also, das geht mit interrupt. oder nicht??
hab jetzt ewig im forum gesucht und gelesen. jetzt versteh ich weniger als vorher.

wie ist das jetzt, wenn die schleife läuft, und ich den interrupt auslöse (wird doch über die interrupt eingönge gemacht) dann springt er immer in die isr??? oder nur, wenn das programm an einer stelle vorbeikommt, wo der interrupt dann abgefragt wird??? wo wäre dann der sinn eines interrupts? das hab ich ja jetzt auch schon so, daß ich mit gosub oder so in eine subroutine spring.

unterbricht der interrupt das programm nicht IMMER?
egal wo es sich befindet? und wird der interrupt nicht durch einen interruptcontroller erkannt, der das dann mit der vrktoren mcht??

erklärt mir das doch bitte einer. und zwar in klartext.


dank euch!!

27.05.2005, 11:59
Hi,

wenn du einen Taster an z.B. INT0 ranbaust und den Interrupt aktivierst und die richtige Bedingung einstellst dann wird beim Tastendruck die ISR "sofort" angesprung. Ist diese Routine abgearbeitet, dann springt der MC zurück und wartet die restliche Zeit.

Gruß Bernd

raptor_79
27.05.2005, 13:01
und wie muß die bedingung aussehen?
wir dann der int0 (stell mir vor, daß der bei einer steigenden flanke kommen soll) "automatisch" ausgelöst, ode muß es da noch sowas wie "IF pin*.* ....then.." geben, oder reicht die aktivirung des interrupt bereits?
denke, daß der interrupt reicht, weil ja der pin int0 gesetzt wird...oder?

Europasolar
27.05.2005, 14:41
Ein Interrupt wird nur bei zeitkritischen Aufgaben sinnvoll eingesetzt. Bei dieser Aufgabe von 5 bis 10 sek. bietet sich an den Tastereingang einfach öffter abzufragen, z.B. innerhalb der Warteschleife. Wenn du nur z.B. alle 10 ms abfragst und dann nach 10 ms nochmal, dann beides gleich sein muß dann ist der Taster auch gleich entprellt( für sicheres schalten).

recycle
27.05.2005, 14:42
wir dann der int0 (stell mir vor, daß der bei einer steigenden flanke kommen soll) "automatisch" ausgelöst, ode muß es da noch sowas wie "IF pin*.* ....then.." geben, oder reicht die aktivirung des interrupt bereits?
denke, daß der interrupt reicht, weil ja der pin int0 gesetzt wird...oder?

Es reicht, wenn du den Interrupt aktivierst, den entsprechenden Pin musst du nicht mehr selber abfragen.
Ob der Interrupt auf steigende oder fallende Flanke reagiert, kannst du vorgeben.
Beispielcode für Bascom Basic findest du in der Online-Hilfe und den mitgelieferten Beispielen.