Hallo Dennis, willkommen im Forum!
... Vielleicht kann mir jemand einen Denkanstoß geben? ...
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 ...) :
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 :
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; //
} //
Hoffentlich hilfts Dir bei Deiner Tastendrückerei.
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.
Lesezeichen