- Material krävs
- Förstå joystickmodulen:
- Kretsschema:
- Programmering för interfacering av joysticken:
- Simuleringsvy:
- Hårdvara och arbete:
Ingångsenheter spelar en viktig roll i alla elektronikprojekt. Dessa inmatningsenheter hjälper användaren att interagera med den digitala världen. En inmatningsenhet kan vara så enkel som en tryckknapp eller så komplicerad som en pekskärm; det varierar beroende på projektets krav. I denna handledning ska vi lära oss hur man kopplar en joystick med vår PIC-mikrokontroller, en joystick är ett häftigt sätt att interagera med den digitala världen och nästan alla skulle ha använt en för att spela videospel i tonåren.
En joystick kan tyckas vara en sofistikerad enhet, men det är faktiskt bara en kombination av två potentiometrar och en tryckknapp. Därför är det också väldigt enkelt att gränssnitt med vilken MCU som helst, förutsatt att vi vet hur man använder ADC-funktionen i den MCU: n. Vi har redan lärt oss hur man använder ADC med PIC, det är därför bara ett arbete för att koppla ihop joysticken. För människor som är nya inom pickit rekommenderas att lära sig ovanstående ADC-projekt samt LED Blinking Sequence Project för att göra det lättare att förstå projektet.
Material krävs
- PicKit 3 för programmering
- Joy Stick-modul
- PIC16F877A IC
- 40 - IC-hållare
- Perf styrelse
- 20 MHz Crystal OSC
- Bergstik stift
- 220 ohm motstånd
- 5-lysdioder i vilken färg som helst
- 1 Lödkit
- IC 7805
- 12V-adapter
- Anslutande ledningar
- Bakbord
Förstå joystickmodulen:
Joysticks finns i olika former och storlekar. En typisk joystickmodul visas i figuren nedan. En joystick är inget annat än ett par potentiometrar och tryckknapp monterad över ett smart mekaniskt arrangemang. Potentiometern används för att hålla reda på X- och Y-rörelsen för joysticken och knappen används för att känna av om joysticken trycks in. Båda potentiometrarna matar ut en analog spänning som beror på styrspakens läge. Och vi kan få rörelseriktningen genom att tolka dessa spänningsförändringar med hjälp av någon mikrokontroller. Tidigare kopplade vi Joystick med AVR, Joystick med Arduino och Raspberry Pi.
Innan du kopplar ihop en sensor eller modul med en mikrokontroller är det viktigt att veta hur den fungerar. Här har vår joystick 5 utgångsstift, varav två är för ström och tre är för data. Modulen ska drivas med + 5V. Datapinnarna heter VRX, VRY och SW.
Termen "VRX" står för variabel spänning på X-axeln och termen "VRY" står för variabel spänning i Y-axeln och "SW" står för switch.
Så när vi flyttar joysticken åt vänster eller höger kommer spänningsvärdet på VRX att variera och när vi varierar upp eller ner kommer VRY att variera. På samma sätt när vi flyttar det diagonalt kommer vi både VRX och VRY att variera. När vi trycker på strömbrytaren kommer SW-stiftet att anslutas till jord. Nedanstående figur hjälper dig att förstå utdatavärdena mycket bättre
Kretsschema:
Nu när vi vet hur Joy-stick fungerar, kan vi komma fram till en slutsats att vi behöver två ADC-stift och en digital ingångsstift för att läsa alla de tre datastiften i Joystick-modulen. Hela kretsschemat visas på bilden nedan
Som du kan se i kretsschemat har vi istället för joysticken använt två potentiometer RV1 och RV3 som analoga spänningsingångar och en logisk ingång för växeln. Du kan följa etiketterna skrivna i violett färg för att matcha stiften och göra dina anslutningar därefter.
Observera att de analoga stiften är anslutna till kanalerna A0 och A1 och den digitala omkopplaren är ansluten till RB0. Vi kommer också att ha 5 LED-lampor anslutna som utgång, så att vi kan lysa en baserat på riktningen som joysticken flyttas. Så dessa utgångsstift är anslutna till PORT C från RC0 till RC4. När vi väl har panorerat vårt kretsschema kan vi fortsätta med programmeringen, simulera sedan programmet på den här kretsen, bygg sedan kretsen på ett bräda och ladda sedan upp programmet till hårdvaran. För att ge dig en uppfattning visas min hårdvara efter att ha gjort ovanstående anslutningar nedan
Programmering för interfacering av joysticken:
Det program för att kommunicera joystick med PIC är enkelt och rakt framåt. Vi vet redan att vilka stift joysticken är ansluten till och vad deras funktion är, så vi måste helt enkelt läsa av den analoga spänningen från stiften och styra utgångslamporna i enlighet därmed.
Det kompletta programmet för att göra detta ges i slutet av detta dokument, men för att förklara saker bryter jag in koden till små meningsfulla utdrag nedan.
Som alltid startas programmet genom att ställa in konfigurationsbitarna, vi kommer inte att diskutera mycket om att ställa in konfigurationsbitar eftersom vi redan har lärt oss det i LED Blinking-projektet och det är detsamma för detta projekt också. När konfigurationsbitarna har ställts in måste vi definiera ADC-funktionerna för att använda ADC-modulen i vår PIC. Dessa funktioner lärde sig också i hur man använder ADC med PIC-handledning. Därefter måste vi deklarera vilka stift som är ingångar och vilka utgångar. Här är LED-enheten ansluten till PORTC så att de är utgångsstift och omkopplingsstiftet på styrspaken är en digital ingångsstift. Så vi använder följande rader för att förklara samma:
// ***** I / O-konfiguration **** // TRISC = 0X00; // PORT C används som utgångsportar PORTC = 0X00; // Gör alla stift låga TRISB0 = 1; // RB0 används som ingång // *** Slut på I / O-konfiguration ** ///
De ADC stift behöver inte definieras som ingångsstiften, eftersom de vid användning av ADC-funktionen kommer att tilldelas som ingångsstiftet. När stiften är definierade kan vi ringa funktionen ADC_initialize som vi definierade tidigare. Denna funktion ställer in nödvändiga ADC-register och förbereder ADC-modulen.
ADC_Initialize (); // Konfigurera ADC-modulen
Nu, vi kliver in i vår oändliga medan loop. Inuti denna slinga måste vi övervaka värdena för VRX, VRY och SW och baserat på värdena måste vi kontrollera ledningens utgång. Vi kan börja övervakningsprocessen genom att läsa den analoga spänningen för VRX och VRY med hjälp av nedanstående rader
int joy_X = (ADC_Read (0)); // Läs X-axeln för joystick int joy_Y = (ADC_Read (1)); // Läs Y-axeln för joystick
Denna rad sparar värdet på VRX och VRY i variabeln joy_X respektive joy_Y . Funktionen ADC_Read (0) betyder att vi läser ADC-värdet från kanal 0 som är stift A0. Vi har anslutit VRX och VRY till stift A0 och A1 och så läser vi från 0 och 1.
Om du kan komma ihåg från vår ADC-handledning vet vi att vi läser den analoga spänningen, PIC som en digital enhet kommer att läsa den från 0 till 1023. Detta värde beror på joystickmodulens läge. Du kan använda etikettdiagrammet ovan för att veta vilket värde du kan förvänta dig för varje joystickposition.
Här har jag använt gränsvärdet på 200 som nedre gräns och ett värde på 800 som övre gräns. Du kan använda vad du vill. Så låt oss använda dessa värden och börja lysa lysdioderna i enlighet därmed. För att göra detta måste vi jämföra värdet på joy_X med de fördefinierade värdena med hjälp av en IF-slinga och göra LED-stiften höga eller låga som visas nedan. Kommentarraderna hjälper dig att förstå bättre
om (joy_X <200) // Joy flyttade upp {RC0 = 0; RC1 = 1;} // Glöd övre lysdiod annars om (joy_X> 800) // Glädje flyttade ner {RC0 = 1; RC1 = 0;} // Glöd Lägre lysdiod annars // Om den inte flyttas {RC0 = 0; RC1 = 0;} // Stäng av båda lysdioderna
Vi kan också göra detsamma för värdet på Y-axeln. Vi måste bara byta ut variabeln joy_X med joy_Y och även styra de två nästa LED-stiften som visas nedan. Observera att när joysticken inte flyttas stänger vi av båda LED-lamporna.
om (joy_Y <200) // Joy flyttade till vänster {RC2 = 0; RC3 = 1;} // Glöd vänster lysdiod annars om (joy_Y> 800) // Joy flyttade höger {RC2 = 1; RC3 = 0;} // Glöd Höger LED annars // Om den inte flyttas {RC2 = 0; RC3 = 0;} // Stäng av båda lysdioderna
Nu har vi en sista sak att göra, vi måste kontrollera omkopplaren om den trycks ned. Strömställaren är ansluten till RB0 så att vi igen kan använda if loop och kontrollera om den är på. Om den trycks in kommer vi att tända lampan för att indikera att omkopplaren har tryckts in.
if (RB0 == 1) // Om Joy trycks ned RC4 = 1; // Glöd mitt LED annars RC4 = 0; // AV mitt-LED
Simuleringsvy:
Hela projektet kan simuleras med hjälp av Proteus-programvaran. När du har skrivit programmet sammanställer du koden och länkar hexkoden för simuleringen till kretsen. Då bör du märka att LED-lamporna lyser beroende på potentiometrarnas position. Simuleringen visas nedan:
Hårdvara och arbete:
Efter att ha verifierat koden med simuleringen kan vi bygga kretsen på ett brödbräda. Om du har följt PIC-självstudierna skulle du ha märkt att vi använder samma perf-kort som har PIC- och 7805-kretsen lödda på den. Om du också är intresserad av att göra en så att du använder den med alla dina PIC-projekt löd sedan kretsen på ett perfekt kort. Eller så kan du också bygga hela kretsen på en bräda. När hårdvaran är klar skulle det vara ungefär så här nedan.
Ladda nu upp koden till PIC-mikrokontrollern med hjälp av PICkit3. Du kan hänvisa LED Blink-projektet för vägledning. Du bör märka att det gula ljuset går högt så snart programmet laddas upp. Använd nu joysticken och variera ratten, för varje riktning på joysticken kommer du att märka att respektive LED lyser högt. När man trycker på omkopplaren i mitten slocknar den lysdioden i mitten.
Detta arbete är bara ett exempel, du kan bygga många intressanta projekt på toppen av det. Det fullständiga arbetet med projektet finns också i videon i slutet av denna sida.
Hoppas att du förstod projektet och gillade att bygga det, om du har några problem att göra det är du välkommen att lägga upp det i kommentarsektionen nedan eller skriva det på forumet för att få hjälp.