- Material necesar
- Înțelegerea modulului Joystick:
- Diagrama circuitului:
- Programare pentru interfațarea joystick-ului:
- Vizualizare Simulare:
- Hardware și funcționare:
Dispozitivele de intrare joacă un rol vital în orice proiecte electronice. Aceste dispozitive de intrare ajută utilizatorul să interacționeze cu lumea digitală. Un dispozitiv de intrare poate fi la fel de simplu ca un buton sau la fel de complicat ca un ecran tactil; variază în funcție de cerința proiectului. În acest tutorial vom învăța cum să interfațăm un joystick cu microcontrolerul nostru PIC, un joystick este un mod cool de a interacționa cu lumea digitală și aproape toată lumea ar fi folosit unul pentru a juca jocuri video în vârsta adolescenței.
Un joystick ar putea părea un dispozitiv sofisticat, dar de fapt este doar o combinație de două potențiometre și un buton. Prin urmare, este, de asemenea, foarte ușor de interfațat cu orice MCU, cu condiția să știm cum să folosim caracteristica ADC a acelui MCU. Am învățat deja cum să folosim ADC cu PIC, prin urmare ar fi doar o soluție pentru interfața Joystick-ului. Pentru persoanele care sunt noi la pickit, este recomandat să învețe proiectul ADC de mai sus, precum și proiectul de secvență intermitentă cu LED-uri pentru a face mai ușoară înțelegerea proiectului.
Material necesar
- PicKit 3 pentru programare
- Modulul Joy Stick
- PIC16F877A IC
- 40 - Suport IC pin
- Tablou de perfecționare
- 20 MHz Crystal OSC
- Pinii Bergstik
- Rezistor 220ohm
- 5-LED-uri de orice culoare
- 1 Set de lipit
- IC 7805
- Adaptor 12V
- Conectarea firelor
- Breadboard
Înțelegerea modulului Joystick:
Joystick-urile sunt disponibile în diferite forme și dimensiuni. Un modul tipic Joystick este prezentat în figura de mai jos. Un joystick nu este altceva decât câteva potențiometre și buton montat peste un aranjament mecanic inteligent. Potențiometrul este utilizat pentru a urmări mișcările X și Y ale joystick-ului și butonul este folosit pentru a detecta dacă joystick-ul este apăsat. Ambele potențiometre produc o tensiune analogică care depinde de poziția joystick-ului. Și putem obține direcția de mișcare interpretând aceste modificări de tensiune folosind un microcontroler. Anterior am interfațat Joystick cu AVR, Joystick cu Arduino și Raspberry Pi.
Înainte de a interfața orice senzor sau modul cu un microcontroler este important să știți cum funcționează. Aici joystick-ul nostru are 5 pini de ieșire, dintre care doi este pentru putere și trei este pentru date. Modulul trebuie alimentat cu + 5V. Pinii de date sunt denumiți VRX, VRY și SW.
Termenul „VRX” înseamnă tensiune variabilă pe axa X, iar termenul „VRY” înseamnă tensiune variabilă pe axa Y, iar „SW” înseamnă comutator.
Deci, atunci când deplasăm joystick-ul spre stânga sau spre dreapta, valoarea tensiunii pe VRX va varia și când o vom varia în sus sau în jos VRY va varia. În mod similar, atunci când îl mutăm în diagonală, ambele VRX și VRY vor varia. Când apăsăm comutatorul, pinul SW va fi conectat la masă. Figura de mai jos vă va ajuta să înțelegeți valorile de ieșire mult mai bine
Diagrama circuitului:
Acum, că știm cum funcționează joystick-ul, putem ajunge la concluzia că vom avea nevoie de doi pini ADC și un pin de intrare digitală pentru a citi toți cei trei pini de date ai modulului Joystick. Schema completă a circuitului este prezentată în imaginea de mai jos
După cum puteți vedea în schema de circuite, în locul joystick-ului am folosit două potențiometre RV1 și RV3 ca intrări analogice de tensiune și o intrare logică pentru comutator. Puteți urmări etichetele scrise în culoare violet pentru a se potrivi cu numele pinilor și pentru a vă face conexiunile în consecință.
Rețineți că pinii analogici sunt conectați la canalele A0 și A1, iar comutatorul digital este conectat la RB0. De asemenea, vom avea 5 lumini LED conectate ca ieșire, astfel încât să putem aprinde una în funcție de direcția în care este mișcat joystick-ul. Deci acești pini de ieșire sunt conectați la PORT C de la RC0 la RC4. Odată ce ne-am panoramat schema de circuit, putem continua cu programarea, apoi simula programul pe acest circuit, apoi construim circuitul pe o placă de calcul și apoi încărcați programul pe hardware. Pentru a vă face o idee hardware-ul meu după efectuarea conexiunilor de mai sus este prezentat mai jos
Programare pentru interfațarea joystick-ului:
Programul interfață pentru joystick - ul cu PIC este simplu și drept înainte. Știm deja la ce pini este conectat joystick-ul și care este funcția lor, așa că trebuie pur și simplu să citim tensiunea analogică de la pini și să controlăm LED-urile de ieșire în consecință.
Programul complet pentru a face acest lucru este dat la sfârșitul acestui document, dar pentru explicarea lucrurilor descompun codul în mici fragmente semnificative de mai jos.
Ca întotdeauna programul este pornit prin setarea biților de configurare, nu vom discuta prea multe despre setarea biților de configurație, deoarece l-am învățat deja în proiectul LED intermitent și este același lucru și pentru acest proiect. Odată ce biții de configurație sunt setați, trebuie să definim funcțiile ADC pentru utilizarea modulului ADC în PIC-ul nostru. Aceste funcții au fost învățate și în modul de utilizare a ADC cu tutorialul PIC. După aceea, trebuie să declarăm care pini sunt intrări și care sunt pini de ieșire. Aici LED-ul este conectat la PORTC, deci sunt pini de ieșire, iar pinul Switch al joystick-ului este un pin digital de intrare. Deci, folosim următoarele rânduri pentru a declara același lucru:
// ***** Configurare I / O **** // TRISC = 0X00; // PORT C este folosit ca porturi de ieșire PORTC = 0X00; // MAK toate pinii TRISB0 = 1; // RB0 este utilizat ca intrare // *** Sfârșitul configurării I / O ** ///
De pinii ADC nu trebuie să fie definite ca intrare pini, deoarece atunci când se utilizează funcția ADC va fi atribuit ca PIN - ul de intrare. Odată ce pinii sunt definiți, putem apela funcția ADC_initialize pe care am definit-o mai devreme. Această funcție va seta registrele ADC necesare și va pregăti modulul ADC.
ADC_Initialize (); // Configurați modulul ADC
Acum, pășim în bucla noastră infinită de timp . În interiorul acestei bucle trebuie să monitorizăm valorile VRX, VRY și SW și pe baza valorilor trebuie să controlăm ieșirea ledului. Putem începe procesul de monitorizare citind tensiunea analogică a VRX și VRY utilizând liniile de mai jos
int joy_X = (ADC_Read (0)); // Citiți axa X a joystick-ului int joy_Y = (ADC_Read (1)); // Citiți axa Y a joystick-ului
Această linie va salva valoarea VRX și VRY în variabila joy_X și respectiv joy_Y . Funcția ADC_Read (0) înseamnă că citim valoarea ADC de la canalul 0 care este pinul A0. Am conectat VRX și VRY la pinii A0 și A1 și astfel citim de la 0 și 1.
Dacă vă puteți aminti din tutorialul nostru ADC, știm că am citit tensiunea analogică, PIC fiind un dispozitiv digital, îl va citi de la 0 la 1023. Această valoare depinde de poziția modulului joystick. Puteți utiliza diagrama de etichete de mai sus pentru a afla la ce valoare vă puteți aștepta pentru fiecare poziție a joystick-ului.
Aici am folosit valoarea limită de 200 ca limită inferioară și o valoare de 800 ca limită superioară. Puteți folosi orice doriți. Deci, să folosim aceste valori și să începem să aprindem LED-urile în mod corespunzător. Pentru a face acest lucru, trebuie să comparăm valoarea joy_X cu valorile predefinite folosind o buclă IF și să facem pinii LED mari sau mici, așa cum se arată mai jos. Liniile de comentarii vă vor ajuta să înțelegeți mai bine
if (joy_X <200) // Bucuria s-a deplasat în sus {RC0 = 0; RC1 = 1;} // Strălucire LED superioară altul dacă (bucurie_X> 800) // Bucuria s-a deplasat în jos {RC0 = 1; RC1 = 0;} // LED-ul luminos inferior altceva // Dacă nu este mutat {RC0 = 0; RC1 = 0;} // Opriți ambele leduri
În mod similar, putem face același lucru și pentru valoarea axei Y. Trebuie doar să înlocuim variabila joy_X cu joy_Y și, de asemenea, să controlăm următorii doi pini LED, așa cum se arată mai jos. Rețineți că, atunci când joystick-ul nu este mutat, oprim ambele lumini LED.
if (bucurie_A <200) // Bucuria s-a deplasat la stânga {RC2 = 0; RC3 = 1;} // Strălucire LED stânga altceva dacă (bucurie_A> 800) // Bucuria s-a deplasat la dreapta {RC2 = 1; RC3 = 0;} // Lumina dreapta LED altceva // Dacă nu este mutat {RC2 = 0; RC3 = 0;} // Opriți ambele LED-uri
Acum avem încă un lucru final de făcut, trebuie să verificăm comutatorul dacă este apăsat. Pinul de comutare este conectat la RB0, astfel încât să putem folosi din nou if loop și să verificăm dacă este activat. Dacă este apăsat, vom întoarce LED-ul pentru a indica faptul că comutatorul a fost apăsat.
if (RB0 == 1) // Dacă Joy este apăsat RC4 = 1; // LED-ul mediu strălucitor altceva RC4 = 0; // OFF LED mediu
Vizualizare Simulare:
Proiectul complet poate fi simulat folosind software-ul Proteus. După ce ați scris programul, compilați codul și conectați codul hexagonal al simulării la circuit. Apoi, ar trebui să observați luminile LED care aprind în funcție de poziția potențiometrelor. Simularea este prezentată mai jos:
Hardware și funcționare:
După verificarea codului folosind simularea, putem construi circuitul pe o placă de pâine. Dacă ați urmat tutorialele PIC, ați fi observat că folosim aceeași placă de perfecționare care are lipit circuitul PIC și 7805. Dacă sunteți, de asemenea, interesat să faceți unul astfel încât să îl utilizați cu toate proiectele dvs. PIC, atunci lipiți circuitul pe o placă de perfecționare. Sau puteți, de asemenea, să construiți circuitul complet pe o placă de calcul. Odată ce hardware-ul este terminat, ar fi ceva de genul mai jos.
Acum încărcați codul pe microcontrolerul PIC utilizând PICkit3. Puteți consulta proiectul LED Blink pentru îndrumare. Ar trebui să observați că lumina galbenă se ridică de îndată ce programul este încărcat. Acum utilizați joystick-ul și variați butonul, pentru fiecare direcție a joystick-ului veți observa LED-ul respectiv ridicat. Când comutatorul din mijloc este apăsat, acesta va opri LED-ul din mijloc.
Acest lucru este doar un exemplu, puteți construi o mulțime de proiecte interesante deasupra acestuia. Funcționarea completă a proiectului poate fi găsită și la videoclipul prezentat la sfârșitul acestei pagini.
Sper că ați înțeles proiectul și v-a plăcut să îl construiți, dacă aveți vreo problemă în acest sens, nu ezitați să îl postați în secțiunea de comentarii de mai jos sau să-l scrieți pe forumuri pentru a primi ajutor.