Ta bort kontaktstuds? AVR Assembler
-
- Inlägg: 87
- Blev medlem: 29 november 2010, 00:32:55
Re: Ta bort kontaktstuds? AVR Assembler
Hm.. Jag har precis avslutat ett projekt med detta problem. Användaren godtog ej 100ms.
Och, jag kan intyga. 100ms känns definitivt inte som direkt respons. Det är ju relativt iofs.
Detta var en kontrollyta till audio/videoredigering och 100ms hamnar 3 bildrutor efter.
Jag la in en offset som korrigerade efteråt men LEDen som tändes när debouncen var klar fick användaren att känna sig sen. Ej acceptabelt.
Att behöva skanna flera gånger är inte en optimal lösning när snabb respons eftersträvas.
/Pelle
Och, jag kan intyga. 100ms känns definitivt inte som direkt respons. Det är ju relativt iofs.
Detta var en kontrollyta till audio/videoredigering och 100ms hamnar 3 bildrutor efter.
Jag la in en offset som korrigerade efteråt men LEDen som tändes när debouncen var klar fick användaren att känna sig sen. Ej acceptabelt.
Att behöva skanna flera gånger är inte en optimal lösning när snabb respons eftersträvas.
/Pelle
-
- Inlägg: 87
- Blev medlem: 29 november 2010, 00:32:55
Re: Ta bort kontaktstuds? AVR Assembler
Alltså.
Räknaren finns där för att bestämma när systemet tar emot knapptryck/släpp igen efter ett omslag. Inte för att skanna fler gånger.
/Pelle
Räknaren finns där för att bestämma när systemet tar emot knapptryck/släpp igen efter ett omslag. Inte för att skanna fler gånger.
/Pelle
Re: Ta bort kontaktstuds? AVR Assembler
Du behöver väl inte vänta 100ms. Du kan väl reagera på första pulsen och sen se till att inte reagera på någon ytterligare puls inom t ex 100ms.
Det är lite skillnad på att filtrera bort störningar resp studs. Störning skulle kunna vara en kort spik genererat av annat än knappen medans studsar genereras vid knapptryckning. Har du inga störningar att filtera bort så kan du alltså reagera på första "spiken" vid knapptryckning och slippa fördröjningar.
Det är lite skillnad på att filtrera bort störningar resp studs. Störning skulle kunna vara en kort spik genererat av annat än knappen medans studsar genereras vid knapptryckning. Har du inga störningar att filtera bort så kan du alltså reagera på första "spiken" vid knapptryckning och slippa fördröjningar.
-
- Inlägg: 87
- Blev medlem: 29 november 2010, 00:32:55
Re: Ta bort kontaktstuds? AVR Assembler
Jag läser av mina knappar 25 gånger per sekund, det blir 40 ms intervaller. Längre än så skulle inte jag vilja vänta, hellre kortare tid.
Re: Ta bort kontaktstuds? AVR Assembler
Det viktiga är egentligen bara att man inte gör det snabbare än stutstiden eller att man har en lock-out under den tiden.
Re: Ta bort kontaktstuds? AVR Assembler
Ofta blir det fler/längre studs när man släpper knappen än när man trycker ner den. Man kan alltså låta programmet reagera på första (eller andra) detektionen av "knapp nere", och sedan inte tillåta nästa "knapp nere" förrän man läst "knapp uppe" tio gånger i rad. Lämpligt då med t ex 50 ms interrupt.
I ett projekt som bara hade en knapp, lät jag en variabel indikera knappstatus. Knappen pollades av 100 Hz interrupt.
Variabel=
0=ingen aktivitet.
1-4=knapp "nedtryckt", avstuds pågår. Om knappen studsar till "släppt" sätts variabeln till 0.
$80=knapp avläst "nere" 5 ggr i rad och hålls nere. Kan nu läsas av huvudprogram.
$c0=knapp "nere", avläst av huvudprogram.
$c1-$cf=knapp släppt, räknar antal gånger knappen indikerad som släppt i rad (om den studsar till "nere" sätts variabeln till $c0).
0=knapp uppsläppt 16 ggr i rad, ingen aktivitet.
Funkar klockrent.
I ett projekt som bara hade en knapp, lät jag en variabel indikera knappstatus. Knappen pollades av 100 Hz interrupt.
Variabel=
0=ingen aktivitet.
1-4=knapp "nedtryckt", avstuds pågår. Om knappen studsar till "släppt" sätts variabeln till 0.
$80=knapp avläst "nere" 5 ggr i rad och hålls nere. Kan nu läsas av huvudprogram.
$c0=knapp "nere", avläst av huvudprogram.
$c1-$cf=knapp släppt, räknar antal gånger knappen indikerad som släppt i rad (om den studsar till "nere" sätts variabeln till $c0).
0=knapp uppsläppt 16 ggr i rad, ingen aktivitet.
Funkar klockrent.