- Nødvendig materiale
- Forstå styrespakmodulen:
- Kretsdiagram:
- Programmering for interfacering av styrespaken:
- Simuleringsvisning:
- Maskinvare og arbeid:
Inndataenheter spiller en viktig rolle i alle elektronikkprosjekter. Disse inngangsenhetene hjelper brukeren til å samhandle med den digitale verdenen. En inngangsenhet kan være så enkel som en trykknapp eller så komplisert som en berøringsskjerm; det varierer ut fra kravet til prosjektet. I denne opplæringen skal vi lære å koble et joystick til PIC-mikrokontrolleren vår, et joystick er en kul måte å samhandle med den digitale verdenen, og nesten alle ville ha brukt en til å spille videospill i ungdomsalderen.
En joystick kan synes å være en sofistikert enhet, men det er faktisk bare en kombinasjon av to potensiometre og en trykknapp. Derfor er det også veldig enkelt å grensesnitt med hvilken som helst MCU, forutsatt at vi vet hvordan du bruker ADC-funksjonen til den MCU. Vi har allerede lært hvordan du bruker ADC med PIC, og det er derfor bare å arbeide for å grensesnittet til styrespaken. For folk som er nye på pickit, anbefales det å lære ADC-prosjektet ovenfor, samt LED Blinking Sequence Project for å gjøre det lettere å forstå prosjektet.
Nødvendig materiale
- PicKit 3 for programmering
- Joy Stick-modul
- PIC16F877A IC
- 40 - IC-holder for pinne
- Perf brett
- 20 MHz Crystal OSC
- Bergstik pinner
- Motstand på 220 ohm
- 5-lysdioder i alle farger
- 1 Loddesett
- IC 7805
- 12V adapter
- Koble ledninger
- Brettbrett
Forstå styrespakmodulen:
Joysticks er tilgjengelige i forskjellige former og størrelser. En typisk joystick-modul er vist i figuren nedenfor. En joystick er ikke mer enn et par potensiometre og trykknapp montert over et smart mekanisk arrangement. Potensiometeret brukes til å holde styr på X- og Y-bevegelsen til styrespaken, og knappen brukes til å registrere om styrespaken trykkes. Begge potensiometrene sender ut en analog spenning som avhenger av styrespaken. Og vi kan få bevegelsesretningen ved å tolke disse spenningsendringene ved hjelp av en eller annen mikrokontroller. Tidligere grensesnittet vi Joystick med AVR, Joystick med Arduino og Raspberry Pi.
Før du kobler en sensor eller modul til en mikrokontroller, er det viktig å vite hvordan den fungerer. Her har styrespaken vår 5 utgangspinner, hvorav to er for strøm og tre for data. Modulen skal drives med + 5V. Datapinnene er navngitt som VRX, VRY og SW.
Uttrykket “VRX” står for variabel spenning på X-aksen og begrepet “VRY” står for variabel spenning i Y-aksen og “SW” står for bryter.
Så når vi beveger styrespaken til venstre eller høyre, vil spenningsverdien på VRX variere, og når vi varierer den opp eller ned, vil VRY variere. Tilsvarende når vi beveger det diagonalt, vil vi både VRX og VRY variere. Når vi trykker på bryteren, blir SW-pinnen koblet til bakken. Figuren nedenfor hjelper deg med å forstå utgangsverdiene mye bedre
Kretsdiagram:
Nå som vi vet hvordan Joy-pinnen fungerer, kan vi komme til en konklusjon at vi trenger to ADC-pinner og en digital inngangspinne for å lese alle de tre datapinnene i Joystick-modulen. Hele kretsskjemaet er vist på bildet nedenfor
Som du kan se i kretsskjemaet, har vi brukt to potensiometer RV1 og RV3 i stedet for styrespaken som analoge spenningsinnganger og en logisk inngang for bryteren. Du kan følge merkelappene skrevet i fiolett farge for å matche navnene på pinnene og gjøre forbindelsene dine tilsvarende.
Merk at de analoge pinnene er koblet til kanalene A0 og A1, og den digitale bryteren er koblet til RB0. Vi vil også ha 5 LED-lys tilkoblet som utgang, slik at vi kan gløde en basert på retningen joysticken beveges. Så disse utgangspinnene er koblet til PORT C fra RC0 til RC4. Når vi har panorert kretsskjemaet vårt, kan vi fortsette med programmeringen, deretter simulere programmet på denne kretsen og deretter bygge kretsen på et brødbord og deretter laste programmet opp til maskinvaren. For å gi deg en ide om maskinvaren min etter å ha gjort de ovennevnte tilkoblingene, vises nedenfor
Programmering for interfacering av styrespaken:
Den programmet til grensesnitt joystick med PIC er enkel og rett frem. Vi vet allerede at hvilke pinner styrespaken er koblet til, og hva deres funksjon er, så vi må bare lese den analoge spenningen fra pinnene og kontrollere utgangs-LED-ene tilsvarende.
Det komplette programmet for å gjøre dette er gitt på slutten av dette dokumentet, men for å forklare ting bryter jeg koden inn til små meningsfulle utdrag nedenfor.
Som alltid startes programmet med å sette konfigurasjonsbiter, vi skal ikke diskutere mye om å sette konfigurasjonsbiter fordi vi allerede har lært det i LED Blinking-prosjektet, og det er det samme for dette prosjektet også. Når konfigurasjonsbittene er satt, må vi definere ADC-funksjonene for bruk av ADC-modulen i vår PIC. Disse funksjonene ble også lært i hvordan man bruker ADC med PIC-opplæring. Etter det må vi erklære hvilke pinner som er innganger og hvilke som er utgangspinner. Her er LED-en koblet til PORTC, så de er utgangspinner og bryterpinnen på styrespaken er en digital inngangspinne. Så vi bruker følgende linjer for å erklære det samme:
// ***** I / O-konfigurasjon **** // TRISC = 0X00; // PORT C brukes som utgangsport PORTC = 0X00; // MAke alle pinnene lave TRISB0 = 1; // RB0 brukes som inngang // *** Slutt på I / O-konfigurasjon ** ///
Den ADC pinnene behøver ikke defineres som inngangs pinner fordi de da ved hjelp av ADC funksjon det vil bli tildelt som inngang pin. Når pinnene er definert, kan vi kalle ADC_initialize funksjon som vi definerte tidligere. Denne funksjonen vil sette de nødvendige ADC-registerene og forberede ADC-modulen.
ADC_Initialize (); // Konfigurer ADC-modulen
Nå går vi inn i vår uendelige stund . Inne i denne sløyfen må vi overvåke verdiene til VRX, VRY og SW, og basert på verdiene vi har for å kontrollere ledets utgang. Vi kan starte overvåkingsprosessen ved å lese den analoge spenningen til VRX og VRY ved å bruke linjene nedenfor
int joy_X = (ADC_Read (0)); // Les X-aksen til styrespaken int joy_Y = (ADC_Read (1)); // Les Y-aksen til styrespaken
Denne linjen vil lagre verdien av VRX og VRY i henholdsvis variabelen joy_X og joy_Y . Funksjonen ADC_Read (0) betyr at vi leser ADC-verdien fra kanal 0 som er pin A0. Vi har koblet VRX og VRY til pin A0 og A1, og så leser vi fra 0 og 1.
Hvis du kan huske fra ADC-opplæringen, vet vi at vi leser den analoge spenningen, og PIC-en som en digital enhet vil lese den fra 0 til 1023. Denne verdien avhenger av posisjonen til styrespakmodulen. Du kan bruke etikettdiagrammet ovenfor for å vite hvilken verdi du kan forvente for hver posisjon på styrespaken.
Her har jeg brukt grenseverdien på 200 som nedre grense og en verdi på 800 som øvre grense. Du kan bruke hva du vil. Så la oss bruke disse verdiene og begynne å gløde LED-lampene tilsvarende. For å gjøre dette må vi sammenligne verdien av joy_X med de forhåndsdefinerte verdiene ved hjelp av en IF-sløyfe og gjøre LED-pinnene høye eller lave som vist nedenfor. Kommentarlinjene vil hjelpe deg å forstå bedre
hvis (joy_X <200) // Joy flyttet opp {RC0 = 0; RC1 = 1;} // Glød øvre LED hvis (joy_X> 800) // Glede flyttet ned {RC0 = 1; RC1 = 0;} // Glød Nedre lysdiode ellers // Hvis ikke flyttet {RC0 = 0; RC1 = 0;} // Slå av begge ledene
Vi kan også gjøre det samme for verdien av Y-aksen. Vi må bare erstatte variabelen joy_X med joy_Y og også kontrollere de to neste LED-pinnene som vist nedenfor. Merk at når joysticken ikke beveges, slår vi av begge LED-lampene.
hvis (joy_Y <200) // Joy flyttet til venstre {RC2 = 0; RC3 = 1;} // Glød venstre LED hvis (joy_Y> 800) // Glede flyttet til høyre {RC2 = 1; RC3 = 0;} // Glød høyre LED ellers // Hvis ikke flyttet {RC2 = 0; RC3 = 0;} // Slå av begge LED-lampene
Nå har vi en siste ting å gjøre, vi må sjekke bryteren hvis du trykker på den. Bryterpinnen er koblet til RB0 slik at vi igjen kan bruke if loop og sjekke om den er på. Hvis du trykker på den, vil vi slå på lysdioden for å indikere at bryteren har blitt trykket.
hvis (RB0 == 1) // Hvis Joy trykkes RC4 = 1; // Glød midt LED annet RC4 = 0; // AV midt-LED
Simuleringsvisning:
Hele prosjektet kan simuleres ved hjelp av Proteus-programvaren. Når du har skrevet programmet, samler du koden og kobler heksekoden til simuleringen til kretsen. Da bør du legge merke til at LED-lysene lyser i henhold til posisjonen til potensiometrene. Simuleringen er vist nedenfor:
Maskinvare og arbeid:
Etter å ha bekreftet koden ved hjelp av simuleringen, kan vi bygge kretsen på et brødbrett. Hvis du har fulgt PIC-opplæringen, ville du ha lagt merke til at vi bruker det samme perfkortet som har PIC- og 7805-kretsen loddet til den. Hvis du også er interessert i å lage en slik at du bruker den med alle PIC-prosjektene dine, kan du lodde kretsen på et perf-kort. Eller du kan også bygge hele kretsen på et brødbrett også. Når maskinvaren er ferdig, vil det være noe slikt nedenfor.
Last nå opp koden til PIC-mikrokontrolleren ved hjelp av PICkit3. Du kan henvise til LED Blink-prosjektet for veiledning. Du bør legge merke til at det gule lyset går høyt så snart programmet er lastet opp. Bruk nå styrespaken og variér knappen, for hver retning av styrespaken vil du legge merke til at den respektive lysdioden går høyt. Når du trykker på bryteren i midten, slår den av LED-lampen i midten.
Dette arbeidet er bare et eksempel, du kan bygge mange interessante prosjekter på toppen av det. Fullstendig bearbeiding av prosjektet finner du også i videoen gitt på slutten av denne siden.
Håper du forsto prosjektet og likte å bygge det, hvis du har problemer med å gjøre det, kan du legge det ut på kommentarfeltet nedenfor eller skrive det på forumet for å få hjelp.