Ich bin grad am Durcharbeiten/Lernen des AtmegaTutorials und hab eine
Frage zu Interrupts. Hier ist das Beispiel mit zwei Interrupts
aufgelistet:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_InterruptsLED Ein bzw. Ausschalten.
Meine Frage dazu haben 8bit-uCs zwei "freie" Interrupts, die ich selber
programmieren kann?
1 0x000 RESET Reset bzw. Einschalten der Stromversorgung
2 0x001 INT0 Externer Interrupt 0
3 0x002 INT1 Externer Interrupt 1
4 0x003 TIMER2_COMP Timer/Counter2 Compare Match
In der Liste hier auch aus dem Tutorial ist von zwei externen Interrupts
die Rede, die anderen haben alle andere Namen. Also kann ich sagen, dass
diese Klasse von uCs nur zwei "freie" Interrupts haben udn die anderen
alle für andere Aufgaben bestimmt sind?
Nein.
Die externen Interrupts sind genauso fest definiert, wie alle anderen
auch. Die heissen externe Interrupts, weil sie von Signalen an einem
Eingangspin, also von extern, ausgelöst werden.
Oliver
Ok, danke.
Da steht auch
"... und je einen Taster an PD2 (INT0) und PD3 (INT1)..."
ich konnte im Quelltext des Beispiels nicht erkennen, dass die
Interrupts Int0 und Int1 PD2 und PD3 zugeordnet werden. Heisst das, dass
es nicht ausschließlich zwei Interrupts gibt, sondern die Interrupts
auch fest an die Kontakte PD2 und PD3 geknüpft sind?
Interrupteur schrieb:> sondern die Interrupts> auch fest an die Kontakte PD2 und PD3 geknüpft sind?
nein, die sind frei wählbar, nur in der standard-einstellung gehört pd2
zu int0.
Interrupteur schrieb:> Ok, danke.>> Da steht auch>> "... und je einen Taster an PD2 (INT0) und PD3 (INT1)...">> ich konnte im Quelltext des Beispiels nicht erkennen, dass die> Interrupts Int0 und Int1 PD2 und PD3 zugeordnet werden.
Bei diesem µC ist diese Zuordnung fix. Diese und noch viele weitere
Informationen finden sich IMMER im Datenblatt des fraglichen µC. Dort
ist letztendlich deine einzig wahre Informationsquelle in der alles
steht. Was dort nicht drinnen steht, existiert auch nicht im Umfeld
deines µC.
Dein Datenblatt ist deine Bibel. Ohne es kannst du auf lange Sicht
deinen µC nicht programmieren. Also ist gut, wenn du frühzeitig lernst
mit dem Datenblatt umzugehen und zu arbeiten.
Was ist zum Zahlen von Signalen besser geeignet?
Wenn ich zählen möchte, wie oft jemand einen Taster gedrückt hat und es
aufsummieren will, ist es günstiger, dies über einen sog. Interrupt zu
machen oder eine Endlosschleife in einem Programm, die ständig den
Register z.B. PIND abfragt und wenn jmd. nen Taster drückt und das
entsprechende Bit von PIND den Wert 1 hat (für gedrückt), dann summiert?
Mechmet schrieb:> Register z.B. PIND abfragt und wenn jmd. nen Taster drückt und das> entsprechende Bit von PIND den Wert 1 hat (für gedrückt), dann summiert?
Völlig ungeeignet.
Du musst/willst Flanken zählen und nicht wie lange eine Taste gedrückt
ist.
Tasten und externe Interrupts sind ein Dauerbrenner hier im Forum. Die
Antwort ist immer die gleiche: Zum Auswerten einer Taste braucht man
keinen externen Interrupt. Ganz im Gegenteil. Durch Tastenprellen sind
Interrupts eine schlechte Lösung.
Einzige Ausnahme: Wenn die Taste den µC aus einem sleep herausholen
muss. Aber auch dann weckt der Interrupt den µC nur auf. Die eigentliche
Auswertung geschieht wieder so wie hier:
Entprellung
Aber was hat das jetzt mit der Zurdnung von INT0 zu PD2 zu tun?
Was ist mit Impulsen von Lampen, z.B. wenn ich eine Lichtschranke hab
und ein Fototransistor einen Pegel High/Low annehmen kann und ich die
High-Werte zählen will, muss ich das Tastenentprellen auch
berücksichtigen?Oder ist Entprellung ausschließlich bei mechanischen
Bauteilen zu beachten?
Mechmet schrieb:> Was ist mit Impulsen von Lampen, z.B. wenn ich eine Lichtschranke hab> und ein Fototransistor einen Pegel High/Low annehmen kann und ich die> High-Werte zählen will, muss ich das Tastenentprellen auch> berücksichtigen?
Wenn du Prellen grundsätzlich ausschliessen kannst, musst du nicht. Es
schadet aber auch nicht, sofern dir die Entprellung kein Zeitproblem
erzeugt.
> Oder ist Entprellung ausschließlich bei mechanischen> Bauteilen zu beachten?
Es gibt auch prellfreie Taster.
Aber gerade bei Taster ist eine Softwareentprellung kein Thema. Sie
verzögert das Erkennen eines Tastendrucks um ein paar Millisekunden. Das
ist aber zu kurz, als das ein Mensch das wahrnehmen könnte und auf jeden
Fall viel kürzer als je ein Mensch eine Taste drücken und wieder
loslassen könnte. Ein paar Millisekunden sind aber für einen µC eine
lange Zeit, in der er den entsprechenden Eingang ein paar mal abscannen
kann, selbst dann wenn sich das im Hintergrund in einem Timerinterrupt
abspielt.