avstudsning

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
persika
EF Sponsor
Inlägg: 1548
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

avstudsning

Inlägg av persika »

Funderar på om det går att göra en enkel avstudsningsrutin, så här:

Vänta 5 ms
Läs av ingångs pinne kopplad till tangent.
Returnera resultat


Vad sägs, räcker det med så enkel rutin ?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: avstudsning

Inlägg av sodjan »

Det beror ju lite på vad du vill visa (känna av).
Sen så kan en tangent nog studsa mer än 5 ms,
det beror på hur bra (hur dyr) tangent/knapp du har.

Sen tillkommer logik för att känna av "tryck och släpp",
"repetering" (om du vill ha det) o.s.v.

Slutligen så är det generellt inte bra att ha en rutiner
som "väntar", det bör vara t.ex timerstyrt.

Jag skulle gissa att 3-4 värden med samma "läge" (tryckt
eller otryckt) efter varande med t.ex 10 ms intervall sannolikt
kan vara en bra indikation på knappens läge. Så länge som
det inte blir 4 lika värden i rad så börjar man bara att
räkna om på 1 igen...
Användarvisningsbild
4kTRB
Inlägg: 21018
Blev medlem: 16 augusti 2009, 19:04:48

Re: avstudsning

Inlägg av 4kTRB »

EDN har en väldigt läsvärd artikel

Ultimate contact debouncer
http://www.edn.com/design/components-an ... -debouncer
Användarvisningsbild
persika
EF Sponsor
Inlägg: 1548
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Re: avstudsning

Inlägg av persika »

I detta fall är det ett enkelt program: Ett antal ingångar ska "skannas", när en ingång ger signal ska en 7-segment display tändas med ingångens nummer, och efter det ska programmet gå i en vänteslinga tills knappen trycks in.
När knappen hålls intryckt körs en annan typ av skanningsrutin på ingångarna, tills den är klar eller knappen släpps.

Behövs ingen repetering i detta fall.

Vad är skälen till att fördröjningar bör göras med timer ?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47136
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: avstudsning

Inlägg av TomasL »

Jag filtrerar alltid tryckknappar externt, för att göra de programatiska rutinerna snabbare och enklare
Användarvisningsbild
Icecap
Inlägg: 26681
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: avstudsning

Inlägg av Icecap »

Persika: Om det bara rör sig om att kolla huruvida en knapp/sensor har blivit påverkat är avstutsning ganska onödigt!

Avstutsningen gör man för att samma knapp inte ska räknas fler gångar. Det är ganska irriterande om man ska välja en menypunkt ich knappen man väljer att stega i menyn med stutsar, då kan man få fler steg för varje tryck och jag kan lova dig att man säger fina ord då när menyn har 20+ punkter!

Jag har testat en del olika modeller och har sedan länge spolat hårdvaran för detta, det är bara onödiga komponenter!

Numera har jag en timer interrupt (som jag nästan alltid har) på kanske 20Hz eller mer. Sedan läser jag porten en gång per interrupt.

Detta värde sparar jag om det behövs och jag jämför det sedan med den förra avläsningen. Är de identiska är det en knapptryckning (om det är tryckt på något alltså) och det ska göras vad som ska göras. Sedan maskar jag ut den i et "har redan gjort"-register (googla på "n-key rollover") och den nollas först när knappen släpps. Vill man vara synnerligen säker kan man göra 3-5 avläsningar efter varandra och när de är identiska är saken biff.

En "total" avläsning ska ske på max. 100ms, ska man alltså läsa av 3 gg innan det kan vara rätt måste man alltså avläsa 3 gg under 100ms vilket ger 33ms mellan varje avläsning, på detta vis känns knappen inte "trög" i reaktionen.

Då man ju sällan ska utföra knapptryckningar i en interrupt-rutin har jag en bufferplats där knapptryckningen rapporteras, ibland lägger jag in en ring-buffer för dessa tryckningar men det är sällan jag behöver det.

När knapptryckningen är "använd" av vad det nu måste vara nollas den och det är klart att upprepa.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: avstudsning

Inlägg av sodjan »

> ...när en ingång ger signal ska en 7-segment display tändas med ingångens nummer,

Som Icecap sa, om det studsar så kommer bara samma siffra att blinka
väldigt snabbt (rellativt ögats uppfattningsförmåga) innan det blir stabilt,
sannolikt för snabbt för att uppfattas/synas.

Studsarna blir bara rellevanta om *antalet* tryck är viktigt, vilket
de ju inte är i detta fall.
Användarvisningsbild
Krille Krokodil
Inlägg: 4062
Blev medlem: 9 december 2005, 22:33:11
Ort: Helsingborg

Re: avstudsning

Inlägg av Krille Krokodil »

Minst 10 ms mellan avläsningarna säger min erfarenhet.

Vilken plattform kodar du för? Att göra det i avbrott på AVR är runt 10 rader kod, ingen raketprojekt alltså...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: avstudsning

Inlägg av sodjan »

> Vad är skälen till att fördröjningar bör göras med timer ?

Att koden/processorn är ledig att göra annat under tiden.

Men just i *detta* fall handlar det ju enbart om att "spegla"
ett antal ingångar till en 7-seg display. Det behövs varken
fördröjningar, timers eller avstudsning. Gör en enkel loop
som scannar ingångarna och uppdatterar 7-seg displayen.
Denna loop kan köras kontinuerligt och hur snabbt som helst...

Jag antar att det ska vara något slaga prio mellan ingångarna
i det fall att flera är aktiverade samtidigt.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9159
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: avstudsning

Inlägg av AndersG »

Denna är rätt elegant:
http://www.piclist.com/techref/microchi ... m?key=Core

Annars finns det ju dedikerade debouncers som kretsar.
Användarvisningsbild
psynoise
EF Sponsor
Inlägg: 7235
Blev medlem: 26 juni 2003, 19:23:36
Ort: Landvetter

Re: avstudsning

Inlägg av psynoise »

För ett tag sedan mätte jag upp studs på några pulsgivare med typnummer EC12D1524403 från Alps. Jag gjorde ett tiotal mätningar där allra värsta var runt 800 µs medan vanligast var inget alls eller runt 50 µs. Programvaran skrev jag sedan med en externtavbrottsrutin som väntade i 100 µs för att sedan läsa in värdet, vilket fungerade bra då sannolikheten inte är allt för stor att det ska bli fel. Tiden för att vänta var något kritiskt då nya signaler från pulsgivarena kommer inom kort, tror det handlade om ms iaf.
ie
EF Sponsor
Inlägg: 1386
Blev medlem: 23 oktober 2006, 13:12:57
Ort: Tyresö

Re: avstudsning

Inlägg av ie »

Jag tycker man ska skilja på avstörning och avstudsning.

Det här med att man ska läsa ett antal ggr för att se att värdet är stabilt behövs inte vid avstudsning, bara vid avstörning, dvs då det finns risk att en störning kan tolkas som en signal. För t ex en kretskortsmonterad knapp i närheten av processorn brukar inte detta vara ett problem. Då vet du att varje signal som kommer in beror på att du tryckt på knappen. Alltså kan du göra det du ska så snart du tagit emot första signalen. Sen "väntar" du en stund innan du kollar efter ev nya signaler, för att inte reagera på studsarna. Detta gör att du får omedelbar respons från systemet.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: avstudsning

Inlägg av sodjan »

Notera att en knapp även kan studsa när man släpper upp den.
Användarvisningsbild
psynoise
EF Sponsor
Inlägg: 7235
Blev medlem: 26 juni 2003, 19:23:36
Ort: Landvetter

Re: avstudsning

Inlägg av psynoise »

Jag förstår inte heller värdet av att läsa en signal flera gånger vid enbart kontaktstuds. Det gäller att vänta tillräckligt länge tills studsandet har försvunnit för att läsa av signalen. Att börja läsa tidigt och i flera omgångar vet jag inte vad som tjänas in?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: avstudsning

Inlägg av sodjan »

> Det gäller att vänta tillräckligt länge...

Vänta efter vadå?
Skriv svar