Hallo Dennis, willkommen im Forum!
Zuerst kurz und schnell zum Problem (bei mir kommen Prellprobleme ohne Entprellen fast nicht vor - seltsam). Eine pfiffige Lösung zum Entprellen ist es, die Taste mehrfach abzufragen (vielleicht quick´n-dirty ...) :... Vielleicht kann mir jemand einen Denkanstoß geben? ...
if ( (taste-an) || (taste-an) || (taste-an) ) { irgendwas(); }
das steht irgendwo in den Tiefen des Forums als :
while((PollSwitch() == 0) || (PollSwitch() == 0) || (PollSwitch() == 0))
So ne Lösung läuft auf meinem Pacer total problemlos - der Pacer hatte anfangs auch nen tiny13.
Noch ein bisschen wie ich mir die Tastenbedienung zurecht gestrickt habe :
Hoffentlich hilfts Dir bei Deiner Tastendrückerei.Code:// ... #define IsBitSet(ADDR,BIT) (((ADDR) & (1<<BIT))?1:0) // Fragt Bit = 1? #define IsBitClr(ADDR,BIT) (!((ADDR) & (1<<BIT))?1:0) // Fragt Bit = 1? // ... #define PrtTAST PIND // #define Tst_1 6 // #define Tst_2 7 // // ... #define Taste1_an IsBitClr (PrtTAST, Tst_1) // Taster 1 gedrückt ?? #define Taste1_aus IsBitSet (PrtTAST, Tst_1) // Taster 1 gelöst ?? #define Taste2_an IsBitClr (PrtTAST, Tst_2) // Taster 2 gedrückt ?? #define Taste2_aus IsBitSet (PrtTAST, Tst_2) // Taster 2 gelöst ?? //... oder mit Buchstaben (verwende ich mittlerweile bei Tasten lieber) : #define TasteA_an IsBitClr (PRTtstLCD, Tst_A) // Taster A gedrückt ?? #define TasteA_aus IsBitSet (PRTtstLCD, Tst_A) // Taster A gelöst ?? #define TasteB_an IsBitClr (PRTtstLCD, Tst_B) // Taster B gedrückt ?? #define TasteB_aus IsBitSet (PRTtstLCD, Tst_B) // Taster B gelöst ?? // ... und das geht NOCH deutlich kürzer in dieser Form : #define TAan IsBitClr (PRTtstLCD, Tst_A) // Taster A gedrückt ?? #define TAaus IsBitSet (PRTtstLCD, Tst_A) // Taster A gelöst ?? #define TBan IsBitClr (PRTtstLCD, Tst_B) // Taster B gedrückt ?? #define TBaus IsBitSet (PRTtstLCD, Tst_B) // Taster B gelöst ?? // - - - - - - - - - - - - - - - // Da dies keine Funktion ist, erfolgt der Aufruf so (NUR beispielsweise) : // - - - - - - - - - - - - - - - // ... if ( TAan ) off = 99; // Taste A gedrückt ?? Ausgangsflag setzen while ( TAan ) {} // Weiter nur mit gelöster Taste if ( off == 99 ) // { // off = 0; // break; // } //
Nachtrag: Dein 150µs-wait für die Entprellung ist schon ok, beim Tastendrücken hat der Controller sozusagen alle Zeit der Welt. Ich orientiere mich bei Mehrfach-Tastendruck am Zeitschema meiner TV-IR-Fernbedienungen. Die senden bei gedrückter Taste etwa alle 100ms - 150ms (MILLI-) ein Signal, wenn man mehrere, unterschiedliche Tasten drückt werten die auch ein Toggelbit aus (wurde die Taste zwischendurch gelöst?) und lassen einem z.T über zwei Sekunden Zeit für ein Mehrfachtasten-Telegramm.







Zitieren

Lesezeichen