Jag har en enkel avstutsning som jag har märkt fungerar ypperligt:
Anta att det rör sig om en enda port (för enklare exempel) som knapparna är kopplade till.
Steg 1: starta en timer-interrupt på kanske 20-50Hz. Kan vara högre också.
Steg 2: I timer-ISR'n läsas porten en gång! Detta värde jämförs med förra avläsningen som har sparats och är de två avläsningar identiska är det bra, annars hopp till steg 4.
Steg 3: Behandla knapptryckningen som det ska göras.
Steg 4: Kopiera avläsningen till "Förra Avläsningen"-variabeln.
Klart! Jag brukar använda en n-key-rollover rutin till knapptryckningar men det kan vara överkurs.
Fördelen med detta sätt är att det inte finns någon vänttid i ISR'n och är knapptryckningen inte "stabil" sker det inget, programmet fladdrar bara förbi som hastigast.
"Cleara" InterruptOnChange flagga på en PIC 12F629
-
- Inlägg: 789
- Blev medlem: 10 december 2007, 12:40:08
- Ort: Piteå
Re: "Cleara" InterruptOnChange flagga på en PIC 12F629
Vad använder ni av för "instruction" när ni kollar om den är i samma läge som föregående omgång.
Jag kör bara med BTFSS & BTFSC men på Icecap låter det som att han kollar en hel port med en (eller ett fåtal) instruktioner.
Skulle juh vara gött om man kunde ha ett register där varje bit motsvarar en registrerad knapptryckning. Alltså ett register som man kan polla i mainloopen utan att bry sig om kontaktstudsar där. 1 på en viss bit betyder registrerad knapptryckning på den knappen osv.
Mvh Peter
Jag kör bara med BTFSS & BTFSC men på Icecap låter det som att han kollar en hel port med en (eller ett fåtal) instruktioner.
Skulle juh vara gött om man kunde ha ett register där varje bit motsvarar en registrerad knapptryckning. Alltså ett register som man kan polla i mainloopen utan att bry sig om kontaktstudsar där. 1 på en viss bit betyder registrerad knapptryckning på den knappen osv.
Mvh Peter
Re: "Cleara" InterruptOnChange flagga på en PIC 12F629
Ja, det finns ju flera sätt att kolla om något är likadant som innan.
50-50 = 0, alltså är 50=50.
50-60 <> 0 alltså är 50 <> 60.
Att testa om något är noll eller inte är väldigt enkelt på processorer.
> Skulle juh vara gött om man kunde ha ett register där varje bit motsvarar en registrerad knapptryckning.
Visst, det kan representera 8 knappars (eller andra ingångars) "senaste kända läge".
Om du sedan har ett register med det aktuella läget (efter avstudsning) så kan du göra en
XORWF mellan dom och få ett 8 bitars resultat där varje "1" anger att en ingång har ändrat
läge (om det var 1=>0 eller 0=>1 bryr vi oss inte om i detta läge) och en flagga
för just den funktionen kan sättas. Sen får den rutin som har till uppgift att ta hand
om just den ingången kolla om det nya läget är 1 eller 0 och göra det den ska. Den
rutinen kan anropas från main() när main() triggar på flaggan från ISR'en.
Om XORWF ger noll som resultat (enkelt att kolla med BTFSx mot STATUS, Z) så
har ingenting ändrats på ingångarna och men gör ingenting alls.
50-50 = 0, alltså är 50=50.
50-60 <> 0 alltså är 50 <> 60.
Att testa om något är noll eller inte är väldigt enkelt på processorer.
> Skulle juh vara gött om man kunde ha ett register där varje bit motsvarar en registrerad knapptryckning.
Visst, det kan representera 8 knappars (eller andra ingångars) "senaste kända läge".
Om du sedan har ett register med det aktuella läget (efter avstudsning) så kan du göra en
XORWF mellan dom och få ett 8 bitars resultat där varje "1" anger att en ingång har ändrat
läge (om det var 1=>0 eller 0=>1 bryr vi oss inte om i detta läge) och en flagga
för just den funktionen kan sättas. Sen får den rutin som har till uppgift att ta hand
om just den ingången kolla om det nya läget är 1 eller 0 och göra det den ska. Den
rutinen kan anropas från main() när main() triggar på flaggan från ISR'en.
Om XORWF ger noll som resultat (enkelt att kolla med BTFSx mot STATUS, Z) så
har ingenting ändrats på ingångarna och men gör ingenting alls.
Re: "Cleara" InterruptOnChange flagga på en PIC 12F629
mit förslag:
läs av kulan med optogaffel,(kan tillämpningsanpassas)
(ex.vis weaklaser på bpw34).
då lär du slippa debounca obefintliga signalartifakter.
och kan fritt använda dig av avbrott.
mvh Asko
läs av kulan med optogaffel,(kan tillämpningsanpassas)
(ex.vis weaklaser på bpw34).
då lär du slippa debounca obefintliga signalartifakter.
och kan fritt använda dig av avbrott.
mvh Asko