Ta bort kontaktstuds? AVR Assembler

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
gunnerfeldt
Inlägg: 87
Blev medlem: 29 november 2010, 00:32:55

Re: Ta bort kontaktstuds? AVR Assembler

Inlägg av gunnerfeldt »

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
gunnerfeldt
Inlägg: 87
Blev medlem: 29 november 2010, 00:32:55

Re: Ta bort kontaktstuds? AVR Assembler

Inlägg av gunnerfeldt »

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
ie
EF Sponsor
Inlägg: 1367
Blev medlem: 23 oktober 2006, 13:12:57
Ort: Tyresö

Re: Ta bort kontaktstuds? AVR Assembler

Inlägg av ie »

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.
gunnerfeldt
Inlägg: 87
Blev medlem: 29 november 2010, 00:32:55

Re: Ta bort kontaktstuds? AVR Assembler

Inlägg av gunnerfeldt »

Exakt!
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Ta bort kontaktstuds? AVR Assembler

Inlägg av jesse »

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.
Användarvisningsbild
Icecap
Inlägg: 26610
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Ta bort kontaktstuds? AVR Assembler

Inlägg av Icecap »

Det viktiga är egentligen bara att man inte gör det snabbare än stutstiden eller att man har en lock-out under den tiden.
Hoffa_
Inlägg: 18
Blev medlem: 2 februari 2010, 01:03:50
Ort: Sollentuna

Re: Ta bort kontaktstuds? AVR Assembler

Inlägg av Hoffa_ »

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.
Skriv svar