PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupt bei Tastedruck



teslanikola
25.04.2005, 15:50
Hallo Leuts, ich hab ein Prob,
ich will mit einem Tastendruck einen Interrupt aufrufen.
Ich kann doch schlecht den counter interrupt einschalten, den counter auf maximal minus 1 setzten, das er beim Tastendruck "überläuft". Das muss doch auch anders gehen. Ach kann man den eingang dan auch intern bzw. softwaremäßig entprellen, oder muss ich des Hardwaretechnisch lösen?
Danke schon mal für eure Antworten!

teslanikola
25.04.2005, 16:04
OK, das mit dem Interrupt hat sich erledigt, aber das problem mit dem entprellen steht noch aus wie macht ihr das so ( generel )????????????

Werner_Just
25.04.2005, 17:11
Hallo Nikola,

> das problem mit dem entprellen steht noch aus wie macht ihr das so ( generel )????????????[/quote]

meist häng ich 'nen RC-Tiefpass zwischen Taster und Eingang. Geht aber auch digital im Controler.

Der Mensch kann Tasten nicht schneller als 10 mal / Sekunde drücken.

Man kann also entweder in der Tastaturabfrage eine Pause von 50 - 100 ms einlegen, oder, falls der Taster an einem externen Interrupt hängt, schaltet man den externen Interrupt in der Interrupt Routine ab und startet einen Timer, der ihn nach 50 - 100 ms wieder einschaltet(*).

Die Zeit die man wartet/abschaltet ist recht unkritisch. Zu lang sollte sie nicht sein, sonst wirkt die Tastatur träge, zu kurz aber auch nicht, sonst ist der Schalter noch am prellen wenn man beginnt ihn wieder abzufragen.

Wenn man nur eine Tastenflanke haben möchte, dann sollte man die Taste nach der Wartezeit oder in der Timer-Routine nochmal auslesen. Sonst kann man nicht unterscheiden, ist es nun ein Prellen beim Taste-Drücken oder ein Prellen beim Taste-Loslassen.

Ciao
Werner

(*) Den Interrupt selbst abschalten, nicht global alle Interrupts.
z.B. "Disable INT0" falls Taster an INT0 hängt

teslanikola
25.04.2005, 18:05
OK, das war ein wichtiger Sicherheitshinweis Ghost Busters

Danke, ich hätte doch glad alle Interrupst gedisabled.

Adam
25.04.2005, 21:25
OK, das mit dem Interrupt hat sich erledigt, aber das problem mit dem entprellen steht noch aus wie macht ihr das so ( generel )????????????


wie hast du das mit dem interrupt nun gelöst? bei mir hängen alle taster an portb des atmega16 und da gibt es ja bekanntlich keinen INTx eingang :/ geht das trotzdem irgendwie per interrupt?

teslanikola
25.04.2005, 21:31
DEN NEHM ICH NED FÜR SO NE APPLICATION.

Es heist ja, das es für jede App. den rechren chip gibt, wies da geht weis ich ned. Kannste aber gerne den Thread hir usen ( ineressiert ne au )

Werner_Just
26.04.2005, 06:46
Hallo Adam


bei mir hängen alle taster an portb des atmega16 und da gibt es ja bekanntlich keinen INTx eingang :/ geht das trotzdem irgendwie per interrupt?
geht, aber nicht ohne externe Beschaltung.

Je nach Anschluß verknüpfst Du alle Tasten UND oder ODER. Mit dem verknüpften Signal gehst Du auf den externen Interrupt.

Der Interrupt wird dann ausgelöst, wenn sich EINE Taste geändert hat. Welche das ist, fragst Du in der Interrupt Routine ab.

Sollte man imo aber nur machen, wenn man die Resourcen sowieso frei hat. So langsam wie der Mensch als Eingabegerät ist, reicht es normalerweise die Tasten alle Jubeljahre mal abzufragen.

Ciao,
Werner [/quote]

andidotcom
26.04.2005, 15:17
Hi,

kleiner Tipp zum Entprellen:
Sollte, wenn Du mit BASCOM arbeitest mit dem Befehl "Debounce" klappen.

Gruss


Andi

Werner_Just
26.04.2005, 15:32
Hallo Andi,

> Sollte, wenn Du mit BASCOM arbeitest mit dem Befehl "Debounce" klappen.

Dafür ist der Befehl da!
Allerdings dedektiert er den Tastendruck nicht - man muß pollen, oder doch per ext.Int. springen, und er fügt ein 25ms wait ein, was wiederum recht lässtig sein kann, falls man noch anderes zu tun hat.

Ciao,
Werner