avstudsning

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
psynoise
EF Sponsor
Inlägg: 7226
Blev medlem: 26 juni 2003, 19:23:36
Ort: Landvetter

Re: avstudsning

Inlägg av psynoise »

Vänta på att kontaktstudset men en viss sannolikhet (säg 95%) slutat och då troligtvis mäta den signal man önskat sig.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: avstudsning

Inlägg av sodjan »

Jo, det var jag med på... :-)
Vad gör att man börjar vänta alls?
Användarvisningsbild
psynoise
EF Sponsor
Inlägg: 7226
Blev medlem: 26 juni 2003, 19:23:36
Ort: Landvetter

Re: avstudsning

Inlägg av psynoise »

Ändring av signalen kan aktivera en avbrottrutin, sedan får man vänta för att slutligen läsa av värdet.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: avstudsning

Inlägg av sodjan »

Vänta i ISR'en ?
Det betyder att inga andra avbrott kan hanteras under (vänte-) tiden.
Det är normalt en situation som man försöker undvika.

Aja, min poäng med det hela var att för att kunna vänta
över huvudtaget så måste man "läsa en signal flera gånger".
Annars får man ingen utgångspunkt att börja vänta från.
Om det sker via ett avbrott eller på annat sätt spelar mindre roll.

Men igen, i just *detta* fall så är det helt ointressant, ett antal
ingångar ska bara "speglas" till en 7-seg display. Om den flimrar
till under några ms spelar sannolikt ingen som helst roll. :-)
Användarvisningsbild
psynoise
EF Sponsor
Inlägg: 7226
Blev medlem: 26 juni 2003, 19:23:36
Ort: Landvetter

Re: avstudsning

Inlägg av psynoise »

Vänta i ISR'en ?
Inte nödvändigtvis, man kan starta en timer och återgå för att sedan läsa av värdet när timern skapar sitt avbrott.

Men som sagt det finns flera lösningar och ibland är det värt att prova något mindre bra för att komma vidare snabbt.

EDIT:

Sedan vet nog de flesta här på forumet att det är knappast jag som är expert på programmering utan just bara nyfiken.
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: avstudsning

Inlägg av bearing »

Om huvudprogrammet reagerar först när man har "klickat" på knappen, (tryckt in och släppt) behöver man aldrig vänta i huvudprogrammet. "Klickavläsning" i interruptet fixar man genom några enkla logikoperationer (XOR och AND, typ) mellan portens nuvarande värde, och värdet i förra avläsningen. 10ms mellan avläsningarna funkar bra, det är iaf vad jag brukar använda. Antar att det är vad koden Anders länkade till gör, men jag läste inte så noga.
Användarvisningsbild
4kTRB
Inlägg: 20748
Blev medlem: 16 augusti 2009, 19:04:48

Re: avstudsning

Inlägg av 4kTRB »

Går det inte ha en enkel op-koppling typ LP-filter på 2Hz?
Användarvisningsbild
psynoise
EF Sponsor
Inlägg: 7226
Blev medlem: 26 juni 2003, 19:23:36
Ort: Landvetter

Re: avstudsning

Inlägg av psynoise »

Klart det går att ha lågpassfilter av olika former externt men enligt mitt tycke är det enklare att ändra en konstant i programvaran än att byta kondensatorer på ett kretskort för att ändra tider om det behövs.
Användarvisningsbild
Icecap
Inlägg: 26650
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: avstudsning

Inlägg av Icecap »

Komponenter är källa till fel! Mjukvara likaså men i µC-lösningar får man dras med det i vilket fall som helst.

Man kan se en läsning som sker regelbundet (timer-interrupt) som en 1-bit sampler. När medelvärdet över X samples är nära nog '1' till att accepteras kan man betrakta avstutsningen och filtreringen som avklarat. Och i min erfarenhet är två samples med 50ms mellan alldeles rikligt att dels reagerar snabbt nog till att det känns "live" och dels störsäkert nog. Riktigt bra är det med 3 samples med 33ms mellan, då känns knappen lika "live" och störningar ska vara svåra för att komma igenom.

Och då man, i min erfarenhet, ändå oftast har en "systemtimer" tickande kan den fint vara basen i detta.

Men precis som sodjan skriver: i TS' projekt har detta ingen betydelse alls! Det ska bara reagerar på "någonting" och om knappen trycks in/stutsar 100 gg har ingen betydelse alls, det ska reageras likadan ändå.
Användarvisningsbild
persika
EF Sponsor
Inlägg: 1541
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Re: avstudsning

Inlägg av persika »

Det är PIC 16F690, kodar för första gången i C på uC, Hitech C och MPLAB.
Har alltid använt assembler tidigare. Känns bekvämare att göra program i C.

För detta projekt räcker det nog med fördröjningar för att undvika kontaktstudsar.

Annars, en möjlighet skulle kunna vara en rutin så här:

Vänta tills timer löpt ut.
Läs av pinne kopplad till knapp.
Starta timer (utan att interrupt aktiveras) med värde som motsvarar tid så länge studsar pågår (ex.vis. 5ms).
Returnera resultat från knapp.


Om då huvudprogrammet utför sina uppgifter snabbt får det vänta nästan hela tiden som timern startats med, men om huvudprogrammet har jobbat länge (>5ms) behöver det inte vänta alls.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: avstudsning

Inlägg av sodjan »

> ...för att undvika kontaktstudsar.

Men spelar det någon roll ???
Vad får eventuella kontaktstudsar för effekt på applikationen?

Eller är det mer av en programmeringsövning?
I så fall är det väl bättre att göra som man brukar göra
med hantering av tryckknappar och inte uppfinna hjulet
på nytt (om det inte är just det som är syftet, så klart).

> Vänta tills timer löpt ut.

Det vanliga är att timern helt enkelt "rullar runt".
D.v.s att om det har gått > 5 ms så är det inte helt
trivialt att se att timern har "löpt ut".
Användarvisningsbild
persika
EF Sponsor
Inlägg: 1541
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Re: avstudsning

Inlägg av persika »

>Men spelar det någon roll ???
>Vad får eventuella kontaktstudsar för effekt på applikationen?

I den första delen av programmet behövs ingen avstudsning eftersom programmet löper utan att knappen är intryckt. Men andra del körs bara när knappen är intryckt, och då får knappen inte studsa.

>Eller är det mer av en programmeringsövning?
Ingen programmeringsövning. Bara ett litet projekt för eget hemmabruk, för övervakning av brandvarnare.

Idén med timern.. Tänkte på inte det med att den rullar runt. Då får man ändå ha ett interrupt som stoppar timern när den löpt ut.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: avstudsning

Inlägg av sodjan »

> och då får knappen inte studsa.

För att då händer, vadå? Räknar du antalet larm?
Jag fattade det om att det bara var en statusindikation
på en 7-seg display som skulle styras. Om den flimrar till
helt snabbt så kommer man i alla fall inte att hinna se det.

> Då får man ändå ha ett interrupt som stoppar timern när den löpt ut.

Eller bara kolla avbrottsflaggan för timern, den kommer att
vara "satt" om tiden har löpt ut. Sedan kan timern fortsätta
att snurra, det spelar ingen roll, timern behöver ine "stoppas".
Nästa gång du behöver "ta tid" så sätter du bara timern
till startvärdet igen och nollar flaggan.
Användarvisningsbild
4kTRB
Inlägg: 20748
Blev medlem: 16 augusti 2009, 19:04:48

Re: avstudsning

Inlägg av 4kTRB »

Som någon skrev ovan: hårdvara kan bli fel på och även mjukvara kan vara felskriven.
En mikrokontrollerstyrd applikation innehåller både hårdvara och mjukvara - 2 källor till att
det ska gå galet. Sedan den mänskliga faktorn - konstruktören.
Bästa är väl att fixa avstuds med ren hårdvara även om det blir några kronor extra.
Så gör allt så enkelt som möjligt men inte enklare.
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: avstudsning

Inlägg av bearing »

Jag tror inte att man kan bli av med studsarna med passiva/aktiva filter. Möjligtvis med väldigt lång tidskonstant, men då kommer det blir tidsfördröjning och problem om man trycker ofta på knappen.

Man behöver en växlande brytare samt en digital vippa för att få bort studsarna i hårdvara, tror jag.

Ifall knappavläsningen är endast ett pull-up-motstånd kopplat till processorns schmitt-trigger-ingång, tycker jag att man kan anse det vara ett rent mjukvaruproblem.
Skriv svar