- Nødvendigt materiale
- Forståelse af joystick-modulet:
- Kredsløbsdiagram:
- Programmering til interfacering af joysticket:
- Simulationsvisning:
- Hardware og arbejde:
Inputenheder spiller en vigtig rolle i ethvert elektronikprojekt. Disse inputenheder hjælper brugeren med at interagere med den digitale verden. En inputenhed kan være så enkel som en trykknap eller så kompliceret som en berøringsskærm; det varierer afhængigt af projektets krav. I denne vejledning skal vi lære at interface et joystick med vores PIC-mikrocontroller, et joystick er en sej måde at interagere med den digitale verden, og næsten alle ville have brugt en til at spille videospil i deres ungdomsalder.
Et joystick kan synes at være en sofistikeret enhed, men det er faktisk bare en kombination af to potentiometre og en trykknap. Derfor er det også meget let at grænseflade til enhver MCU, forudsat at vi ved, hvordan man bruger ADC-funktionen i den MCU. Vi har allerede lært, hvordan man bruger ADC med PIC, og det er derfor bare et arbejde at grænsefladen til joysticket. For folk, der er nye inden for pickit, anbefales det at lære ovenstående ADC-projekt såvel som LED Blinking Sequence Project for at gøre det lettere at forstå projektet.
Nødvendigt materiale
- PicKit 3 til programmering
- Joy Stick-modul
- PIC16F877A IC
- 40 - IC-holder til pin
- Perf bord
- 20 MHz Crystal OSC
- Bergstik stifter
- 220 ohm modstand
- 5-LED'er i enhver farve
- 1 Loddesæt
- IC 7805
- 12V adapter
- Tilslutning af ledninger
- Brødbræt
Forståelse af joystick-modulet:
Joysticks fås i forskellige former og størrelser. Et typisk joystick-modul vises i nedenstående figur. En joystick er intet andet end et par potentiometre og trykknap monteret over et smart mekanisk arrangement. Potentiometeret bruges til at holde styr på joystickets X- og Y-bevægelse, og knappen bruges til at registrere, hvis der trykkes på joysticket. Begge potentiometre udsender en analog spænding, som afhænger af joystickets position. Og vi kan få bevægelsesretningen ved at fortolke disse spændingsændringer ved hjælp af en mikrokontroller. Tidligere interfacede vi Joystick med AVR, Joystick med Arduino og Raspberry Pi.
Inden du forbinder en sensor eller et modul med en mikrocontroller, er det vigtigt at vide, hvordan det fungerer. Her har vores joystick 5 outputstifter, hvoraf to er til strøm og tre er til data. Modulet skal have strøm med + 5V. Datapindene er navngivet som VRX, VRY og SW.
Udtrykket “VRX” står for variabel spænding på X-aksen, og udtrykket “VRY” står for variabel spænding i Y-aksen, og “SW” står for switch.
Så når vi flytter joysticket til venstre eller højre, vil spændingsværdien på VRX variere, og når vi varierer den op eller ned, varierer VRY. Tilsvarende når vi bevæger det diagonalt, vil vi både VRX og VRY variere. Når vi trykker på kontakten, forbindes SW-stiften til jorden. Nedenstående figur hjælper dig med at forstå outputværdierne meget bedre
Kredsløbsdiagram:
Nu hvor vi ved, hvordan Joy-stiften fungerer, kan vi nå frem til en konklusion, at vi har brug for to ADC-stifter og en digital input-stift for at læse alle de tre datastifter i Joystick-modulet. Det komplette kredsløbsdiagram er vist på billedet nedenfor
Som du kan se i kredsløbsdiagrammet, har vi i stedet for joysticket brugt to potentiometer RV1 og RV3 som analoge spændingsindgange og en logisk indgang til kontakten. Du kan følge etiketterne skrevet i violet farve for at matche stifternes navne og oprette dine forbindelser i overensstemmelse hermed.
Bemærk, at de analoge ben er tilsluttet kanal A0 og A1, og at den digitale switch er tilsluttet RB0. Vi vil også have tilsluttet 5 LED-lys som output, så vi kan lyse en baseret på den retning, joysticket bevæges. Så disse udgangsstifter er forbundet til PORT C fra RC0 til RC4. Når vi har panoreret vores kredsløbsdiagram, kan vi fortsætte med programmeringen, derefter simulere programmet på dette kredsløb og derefter bygge kredsløbet på et brødbræt og derefter uploade programmet til hardwaren. For at give dig en idé om min hardware efter oprettelse af ovenstående forbindelser er vist nedenfor
Programmering til interfacering af joysticket:
Det program til at interface joystick med PIC er enkel og ligetil. Vi ved allerede, at hvilke stifter joysticket er tilsluttet, og hvad deres funktion er, så vi bliver simpelthen nødt til at læse den analoge spænding fra stifterne og styre output-LED'erne i overensstemmelse hermed.
Det komplette program til at gøre dette findes i slutningen af dette dokument, men for at forklare ting bryder jeg koden ind i små meningsfulde uddrag nedenfor.
Som altid startes programmet ved at indstille konfigurationsbits, vi diskuterer ikke meget om at indstille konfigurationsbits, fordi vi allerede har lært det i LED Blinking-projektet, og det er også det samme for dette projekt. Når konfigurationsbitene er indstillet, skal vi definere ADC-funktionerne til brug af ADC-modulet i vores PIC. Disse funktioner blev også lært i, hvordan man bruger ADC med PIC-tutorial. Derefter skal vi erklære, hvilke ben der er indgange, og hvilke der er udgangsstift. Her er LED'en tilsluttet PORTC, så de er outputstifter, og switchstiften på joysticket er en digital indgangsstift. Så vi bruger følgende linjer til at erklære det samme:
// ***** I / O-konfiguration **** // TRISC = 0X00; // PORT C bruges som outputporte PORTC = 0X00; // Foretag alle ben lave TRISB0 = 1; // RB0 bruges som input // *** Slut på I / O-konfiguration ** ///
De ADC pins behøver ikke at blive defineret som input pins, fordi de ved brug af ADC-funktionen det vil blive tildelt som input pin. Når stifterne er defineret, kan vi kalde funktionen ADC_initialize , som vi definerede tidligere. Denne funktion indstiller de krævede ADC-registre og forbereder ADC-modulet.
ADC_Initialize (); // Konfigurer ADC-modulet
Nu træder vi ind i vores uendelige mens løkke. Inde i denne sløjfe skal vi overvåge værdierne for VRX, VRY og SW og baseret på de værdier, vi har til at styre ledets output. Vi kan begynde overvågningsprocessen ved at læse den analoge spænding af VRX og VRY ved hjælp af nedenstående linjer
int joy_X = (ADC_Read (0)); // Læs X-aksen på joysticket int joy_Y = (ADC_Read (1)); // Læs Y-aksen på joysticket
Denne linje gemmer værdien af VRX og VRY i henholdsvis variablen joy_X og joy_Y . Funktionen ADC_Read (0) betyder, at vi læser ADC-værdien fra kanal 0, som er pin A0. Vi har tilsluttet VRX og VRY til pin A0 og A1, og så læser vi fra 0 og 1.
Hvis du kan huske fra vores ADC-tutorial, ved vi, at vi læser den analoge spænding, hvor PIC'en som en digital enhed læser den fra 0 til 1023. Denne værdi afhænger af joystickmodulets position. Du kan bruge etiketdiagrammet ovenfor for at vide, hvilken værdi du kan forvente for hver position af joysticket.
Her har jeg brugt grænseværdien på 200 som nedre grænse og en værdi på 800 som øvre grænse. Du kan bruge hvad du vil. Så lad os bruge disse værdier og begynde at tænde lysdioderne i overensstemmelse hermed. For at gøre dette skal vi sammenligne værdien af joy_X med de foruddefinerede værdier ved hjælp af en IF-loop og gøre LED-stifterne høje eller lave som vist nedenfor. Kommentarlinjerne hjælper dig med at forstå bedre
hvis (joy_X <200) // Joy flyttede op {RC0 = 0; RC1 = 1;} // Glød øvre LED ellers hvis (joy_X> 800) // Glæde flyttede ned {RC0 = 1; RC1 = 0;} // Glød Nedre LED ellers // Hvis den ikke flyttes {RC0 = 0; RC1 = 0;} // Sluk for begge led
Vi kan også gøre det samme for værdien af Y-aksen. Vi er bare nødt til at udskifte variablen joy_X med joy_Y og også styre de to næste LED-ben som vist nedenfor. Bemærk, at når joysticket ikke flyttes, slukker vi begge LED-lysene.
hvis (joy_Y <200) // Joy flyttes til venstre {RC2 = 0; RC3 = 1;} // Glød venstre LED ellers hvis (joy_Y> 800) // Joy flyttes til højre {RC2 = 1; RC3 = 0;} // Glød højre LED ellers // Hvis den ikke flyttes {RC2 = 0; RC3 = 0;} // Sluk for begge lysdioder
Nu har vi endnu en sidste ting at gøre, vi skal kontrollere kontakten, hvis der trykkes på den. Kontaktstiften er forbundet til RB0, så vi igen kan bruge if loop og kontrollere, om den er tændt. Hvis der trykkes på den, vil vi tænde for LED'en for at indikere, at der er trykket på kontakten.
hvis (RB0 == 1) // Hvis Joy trykkes RC4 = 1; // Glød midt LED ellers RC4 = 0; // OFF midter-LED
Simulationsvisning:
Det komplette projekt kan simuleres ved hjælp af Proteus-softwaren. Når du har skrevet programmet, skal du kompilere koden og linke hex-koden for simuleringen til kredsløbet. Så skal du bemærke, at LED-lysene lyser i henhold til potentiometernes position. Simuleringen er vist nedenfor:
Hardware og arbejde:
Efter at have verificeret koden ved hjælp af simuleringen kan vi bygge kredsløbet på et brødbræt. Hvis du har fulgt PIC-vejledningerne, ville du have bemærket, at vi bruger det samme perfkort, som har PIC- og 7805-kredsløbet loddet til det. Hvis du også er interesseret i at lave en, så du bruger den med alle dine PIC-projekter, lodder kredsløbet på et perf-kort. Eller du kan også bygge det komplette kredsløb på et brødbræt også. Når hardwaren er færdig, ville det være sådan noget nedenfor.
Upload nu koden til PIC-mikrocontrolleren ved hjælp af PICkit3. Du kan henvise LED Blink-projektet til vejledning. Du skal bemærke, at det gule lys går højt, så snart programmet er uploadet. Brug nu joysticket og varier knappen, for hver retning af joysticket vil du bemærke, at den respektive LED går højt. Når der trykkes på kontakten i midten, slukker den for LED i midten.
Dette arbejde er bare et eksempel, du kan bygge en masse interessante projekter oven på det. Den komplette bearbejdning af projektet kan også findes i videoen i slutningen af denne side.
Håber du forstod projektet og nød at bygge det, hvis du har problemer med at gøre det, er du velkommen til at skrive det i kommentarfeltet nedenfor eller skrive det på foraene for at få hjælp.