Hur man ska tolka riktningen av rotation från en digital rotary switch med en PIC (5 / 5 steg)

Steg 5: programvara



jag använde inte den inbyggda i avbrott i PIC grundläggande Pro. Jag använde ett par filer som jag ingår i min kod från Darrel Taylor att köra rutinen. Detta är där en enorm kredit till Darrel hör hemma! Filerna är gratis. Bara besöka hans hemsida för mer information, andra program och hämta filer. Du kan hoppa över denna del om du inte använder en PIC med Darrel Taylor avbryter. Bara sätta upp avbrotten som behövs på den plattform du använder.

För att få Darrel Taylor (DT) finns avbryter ställa in det två saker att göra:

1.) Include DT_INTS-14.bas och ReEnterPBP.bas arkivera i din kod.

2.) kopiera och klistra in detta i din kod.

ASM
INT_LIST makro, IntSource, etikett, typ, ResetFlag?
INT_Handler RBC_INT, _ISR, PBP, ja
endm
INT_CREATE
ENDASM

Infoga tabbar och blanksteg som bilden i slutet av Instructable så du kan se saker lite lättare i din kod. Måste du ändra det något för att passa dina behov. Under etiketten, ersätta ISR med namnet på den subrutin som är din ISR. Glöm inte understreck! Du behöver det!

För att få avbrotten arbetar, finns det två saker att göra:

1.) skriva ISR. Du ska skriva detta precis som du skulle skriva en PBP subrutin förutom att du kommer att behöva infoga @ INT_RETURN i slutet av subrutinen i stället för avkastning. Detta kommer att erkänna avbrottet och återgå programkörningen till där den slutade i huvudsakliga slingan.

Inuti ISR måste du rensa flaggan avbrott så att programmet inte är fastklämd i en rekursiv avbryta. Helt enkelt läsa PORTB är allt som behöver göras för att klara avbrott flaggan på PIC16F877A. Varje annan mikrokontroller har olika sätt att rensa avbrott flaggor. Kolla databladet för din mikrokontroller.

2.) när du når punkten i koden som du vill aktivera avbrottet, använder denna kodrad:

@ INT_ENABLE RBC_INT

Använd när du vill inaktivera avbrottet helt enkelt:

@ INT_DISABLE RBC_INT

Det finns en massa saker packas in i vad jag bara täckt så jag ska sammanfatta snabbt. Hittills har ditt program bör se ut ungefär så här:

; Någon behövde ställa in eller kod

INKLUDERA "DT_INTS-14.bas"
INKLUDERA "ReEnterPBP.bas"

ASM
INT_LIST makro, IntSource, etikett, typ, ResetFlag?
INT_Handler RBC_INT, _myISR, PBP, ja
endm
INT_CREATE
ENDASM

; Någon annan behövde ställa in eller kod

@ INT_ENABLE RBC_INT
; Kod som behöver veta vilka sätt ratten roterar
@ INT_DISABLE RBC_INT

; Annan kod

SLUTET; Slutet av program

myISR:
ISR koden här
@ INT_RETURN

(Avbryta Handler uppsättning upp tabell)

Jag tror det är där någon som inte använder en PIC eller DT avbrott kan gå in igen. Nu måste vi faktiskt skriva ISR så mikrokontroller vet vilket håll ratten roterar. Minns från avsnittet software teorin att vi kan härleda riktningen av rotation om vi vet den ingång som orsakade avbrottet, dess nytt värde och värdet av den andra ingången. Här är pseudokod:

Läs PORTB till en början variabel att rensa flaggan avbrott
Kontrollera om A orsakade avbrottet.
Om sant,
Jämföra A och B.
Kontrollera om olika, om annan
Det var Medsols rotation
Annat,
Det var moturs
Endif

Kontrollera om B orsakade avbrottet.
Om sant,
Jämför A och B
Kontrollera om olika, om samma,
Det var Medsols rotation
Annat,
Det var moturs
Endif

Returnera från avbrott

Hur vet vi om en förändring på A eller B orsakat avbrottet? Att upptäcka det nya värdet av den ändrade ingången och den andra (oförändrad) ingången är lätt eftersom vi kan läsa dem inuti ISR. Vi behöver veta vad tillståndet för var och en var innan avrättningen får skickas till ISR. Detta händer i huvudsaklig rutin. Den viktigaste rutinen sitter och väntar på en byte variabel som vi kallade CWflag ska vara 1 eller avmarkeras 0 av ISR. Efter varje erkänt ändringen av ratten eller om det finns ingen knopp aktivitet, är variabeln värdet 5 att indikera inaktiv. Om flaggan blir set eller rensas, den viktigaste rutinen värdet ökar omedelbart eller minskar börvärde trycket på lämpligt sätt baserat på rotation och sedan anger variabeln CWflag tillbaka till 5 eftersom ratten är nu ledig igen. Som den viktigaste rutinen är att kontrollera CWflag, det också dokumenterar tillståndet för A och B vridbrytaren värdena. Detta är verkligen enkelt och ser ut så här:

oldA = A
oldB = B

Det är verkligen inget super fancy här. Bara ta med de två i början av slingan som kontrollerar CWflag för rotation. Vi uppdaterar bara logik värdena för insatsvaror från vridknappen inuti öka/minska loop i huvudsaklig rutin så att vi kan se vad input orsakade avbrottet när ISR körs. Här är ISR koden:

ABchange:
Scratch = PORTB ' Läs PORTB att klara avbrott flagga

"Om A orsakar avbrottet, när B på rotationsriktning
OM oldA! = en då
"Om A och B är olika, det var Medsols rotation
OM A! = B SEDAN
GÅ TILL CW
"Annars var det moturs rotation
ANNAT
GÅ TILL CCW
ENDIF
ENDIF

"Om B orsakar avbrottet, kontrollera A för rotationsriktning
OM oldB! = B sedan
"Om A och B är samma, det var Medsols rotation
OM A == B SEDAN
GÅ TILL CW
"Annars var counter Medsols rotation
ANNAT
GÅ TILL CCW
ENDIF
ENDIF

CW:
CWflag = 1
@ INT_RETURN

CCW:
CWflag = 0
@ INT_RETURN

Jag har bifogat ISR koden i en AB_ISR.bas fil eftersom flikarna i koden inte är visar upp hur de borde.

Nu, eftersom ISR har de gamla värdena för ingångarna A och B kan den bestämma vilken kanal orsakade avbrottet, jämför med andra (oförändrad) input och bestämma riktningen av rotation. Alla huvudsakliga rutin har att göra är att kontrollera CWflag att se vilken riktning vredet har aktiverad (om det har) och öka eller minska en counter, ange punkt eller vad du vill eller behöver.

Jag hoppas detta hjälper och har inte varit alltför förvirrande. Denna typ av gränssnitt är särskilt användbart om ditt system använder redan avbrott eftersom detta är endast en mer avbrott att lägga till. Njut!

Se Steg
Relaterade Ämnen

Hur man ska tolka diabetiker lab resultat (diabetes gjorde enkla)

detta är inte din typisk instructable som det inte visa dig hur man gör något eller fixa något. I stället är detta instructable utformad för att informera människor som inte kanske har en fast förståelse på följande material. Typ två Diabetes (vuxen...

Hur man ska uppnå det "Matt Look" i Photoshop CS3 upp till Photoshop CC.

Hur man ska uppnå det "Matt Look" i Photoshop CS3 upp till Photoshop CC.Steg 1:1. börja med bilden öppnas i Photoshop.2. Välj elliptisk markeringsram och dra en cirkel runt motivet.3. Högerklicka inuti markeringen (marscherande myror) och välj F...

Hur man ska packa 5 Singer symaskiner

hantverk-mas har kommit tidigt i år tack vare våra underbara vänner på sångaren! Jag visade upp i morse för att upptäcka 5 lådor fulla av symaskiner bara sitter där, väntar på att packas upp. Jag visste inte vad jag ska göra! Jag har aldrig packat up...

Hur man ska polera marmorgolv

Marmor golv, monument, eldstäder, bänkskivor är en stil uttalande för rika arkitektur. Marmor fade dess lyster över tiden och behöver korrekt underhåll vare sig för golv eller bänkskivor.Följande steg visar hur man ska polera marmorgolv:Steg 1: Marmo...

Hur man ska socialisera din sällskapsdjur

Monique från noseprints.net diskuterar hur man ska socialisera din sällskapsdjur och varför det är så viktigt....

Hur man bygger en 8 x 8 x 8 LED cube och styra med en Arduino

det finns en hel del LED kuber på Instructables, så varför göra en annan? De flesta är för små kuber som består av 27 eller 64 lysdioder, sällan större eftersom de är begränsade till antalet utgångar på mikrokontroller. Denna kub blir 512 lysdioder,...

Hur man ska svinga en golfklubba

The Golf Swing kan vara en komplicerad sak. Så är här enkla steg om hur man kan svinga en golfklubba.Steg 1: grepp Hitta ett bekvämt grepp klubben, allmänt du interlock pekfingret i en hand och pinky finger i andra handen, men det är viktigare att du...

Hur man ska polera en Lexan vindruta för under $4

Hej,Jag rider en stor cruiser motorcykel, och den har en Lexan varumärke vindrutan på den. Jag har undersökt online, och det visar sig kan jag bara hitta människor som kommer att polska och reparera akryl vindskydd. De säger Lexan vindrutan måste byt...

Hur man ska bekämpa trångsynthet i ditt närområde

för en vecka sedan ett team av hatar mongers gick igenom nieghborhood passerar ut yard skyltar för proposition 8. Detta är en taktik för att dela vår gemenskap kring frågor om varandra. De bryr sig inte eftersom de inte bor här.Proposition 8 syftar t...

Hur man ska gå på bio

en steg för steg handledning om deltar filmiska nöjen utan att orsaka människor nära dig att vilja slå du bakhuvudet.Steg 1: Köpa några biljetter För att lagligt komma in till en biograf eller cineplex, måste du köpa en biljett. Biljetter kan köpas i...

Hur man ska avsluta sömmar vackert utan en Serger!

Om du vill lära dig att avsluta ditt plagg vackert, rayon söm bindande är ett fantastiskt sätt att gå! För enbart pennies en gård, kan du innesluta dina råa kanter med vackra färgade rayon. Detta är så mycket billigare och enklare än att köpa en serg...

Hur man ska gå från att vara ett genomsnitt till konkurrenskraftiga bordtennisspelare

det finns gott om tutorials om hur man spelar bordtennis som fokuserar på grundläggande play eller mycket avancerad spela, men det finns knappast någon som hjälper spelare gå från grundläggande nivå till att vara konkurrenskraftiga. De avsedda målgru...

Hur man ska spela Zombie Dice

Äta hjärna. Inte får shotgunned.Zombie Dice är ett spel som snabbt växer med popularitet. Det är snabbt, tar ca 10-15 minuter, lätt att lära sig, och kan spelas med 2 eller fler spelare nästan var som helst på grund av dess lätt-bogsera fördel. Zombi...

Hur man ska spela The Legend of Zelda: Ocarina of Time på datorn

Välkommen, jag är TheGameBoy, detta är min första tutorial så behaga bli slag :)Detta är hur man spelar TLOZ OOT på din PC, UC?Steg 1: Steg 1 Ok, detta är ganska enkel. Öppna upp din web Browser och gå till GoogleSteg 2: Steg 2Skriv "Doperoms" o...

Hur man ska gå till en Drive-In film i stil

Drive-in filmer är sällsynta i denna dag och ålder, men lyckligtvis finns det en i närheten. Teatern West vind Solano är ett bra ställe för en enhet i filmen. Vi såg Iron Man 1 & 2 det och såg Spider-man 3, Kung Fu Panda, hur man tränar din drake, Th...

Hur man ska anpassa gemensamma ortopedisk käpp för självförsvar stealthly

detta Instructable kommer att beskriva hur du ändrar en generisk ortopedisk käpp så det kan bli mycket effektivare som en personlig försvar enhet. För mig var detta gjorde en nödvändighet efter att jag hade hade höftoperation och behövs för att använ...

Hur man ska anpassa en NES klon controller till bluetooth

jag köpte en trådlös Bluetooth RS232 TTL Transceiver modul från DX (SKU: 80711) och undrar vad jag kan göra med den.Så, jag är verkligen nostalgisk och beslutade att bygga en NES klon crontoller till bluetooth-adapter, eftersom, av detta sätt jag kun...

Hur man ska bekämpa en enkel version

Hej im göra detta beror instructable 1. jag kan kämpa bra 2. i ville instructables står det hur man slåss jag tror inte att id vara en mycket bra fighter utan min kampsport! sjuk lära dig hur jag kämpa på min lektioner theres ett blått bälte cos im e...

Hur man ska spela och tjäna pengar i kungariket av avsky.

Detta instructable kommer att visa människor hur man skapar en karaktär och hur man gör kött (spelets valuta)__________________________________________________________________________Tre skäl varför detta spel är bra:-A DnD (dungeons n' drakar) parod...