- Material requerit
- Descripció del mòdul Joystick:
- Esquema de connexions:
- Programació per a la interfície del joystick:
- Visualització de simulació:
- Maquinari i funcionament:
Els dispositius d’entrada tenen un paper vital en qualsevol projecte electrònic. Aquests dispositius d’entrada ajuden l’usuari a interactuar amb el món digital. Un dispositiu d’entrada pot ser tan simple com un polsador o tan complicat com una pantalla tàctil; varia en funció del requisit del projecte. En aquest tutorial aprendrem a relacionar un joystick amb el nostre microcontrolador PIC, un joystick és una manera divertida d’interactuar amb el món digital i gairebé tothom n’hauria utilitzat per jugar a videojocs a la seva adolescència.
Un joystick pot semblar un dispositiu sofisticat, però en realitat només és una combinació de dos potenciòmetres i un polsador. Per tant, també és molt fàcil connectar-se amb qualsevol MCU, sempre que sabem utilitzar la funció ADC d’aquesta MCU. Ja hem après a utilitzar ADC amb PIC, per tant, seria només una solució per a la interfície del joystick. Per a les persones que són noves a pickit, es recomana aprendre el projecte ADC anterior, així com el Projecte de seqüència intermitent de LED, per facilitar la comprensió del projecte.
Material requerit
- PicKit 3 per a la programació
- Mòdul Joy Stick
- PIC16F877A IC
- 40 - Suport IC de pin
- Tauler de perf
- 20 MHz Crystal OSC
- Pins de Bergstik
- Resistència de 220ohm
- 5-LEDs de qualsevol color
- 1 kit de soldadura
- IC 7805
- Adaptador de 12V
- Connexió de cables
- Taula de pa
Descripció del mòdul Joystick:
Els joysticks estan disponibles en diferents formes i mides. A la figura següent es mostra un mòdul Joystick típic. Un joystick no és res més que un parell de potenciòmetres i un polsador muntats sobre una disposició mecànica intel·ligent. El potenciòmetre s’utilitza per fer un seguiment del moviment X i Y del joystick i el botó s’utilitza per detectar si es pressiona el joystick. Tots dos potenciòmetres emeten una tensió analògica que depèn de la posició del joystick. I podem obtenir la direcció del moviment interpretant aquests canvis de voltatge mitjançant algun microcontrolador. Anteriorment, hem interrelacionat Joystick amb AVR, Joystick amb Arduino i Raspberry Pi.

Abans d’interfacar qualsevol sensor o mòdul amb un microcontrolador, és important saber com funciona. Aquí el nostre joystick té 5 pins de sortida, dels quals dos són per a alimentació i tres per a dades. El mòdul hauria d’estar alimentat amb + 5V. Els pins de dades s’anomenen VRX, VRY i SW.
El terme "VRX" significa tensió variable a l'eix X i el terme "VRY" significa tensió variable a l'eix Y i "SW" significa commutador.
Per tant, quan movem el joystick cap a l’esquerra o la dreta, el valor de la tensió del VRX variarà i quan el varem cap amunt o cap avall, el VRY variarà. De la mateixa manera, quan el movem en diagonal, VRX i VRY variaran. Quan premem l'interruptor, el pin SW estarà connectat a terra. La figura següent us ajudarà a entendre els valors de sortida molt millor

Esquema de connexions:
Ara que sabem com funciona el joystick, podem arribar a la conclusió que necessitarem dos pins ADC i un pin d’entrada digital per llegir els tres pins de dades del mòdul Joystick. El diagrama complet del circuit es mostra a la imatge següent

Com podeu veure al diagrama de circuits, en lloc del joystick hem utilitzat dos potenciòmetres RV1 i RV3 com a entrades de tensió analògiques i una entrada lògica per al commutador. Podeu seguir les etiquetes escrites en color violeta perquè coincideixin amb els noms dels pins i establir les vostres connexions en conseqüència.
Tingueu en compte que els pins analògics estan connectats als canals A0 i A1 i el commutador digital està connectat a RB0. També tindrem 5 llums LED connectats com a sortida, de manera que puguem brillar en funció de la direcció en què es mogui el joystick. Per tant, aquests pins de sortida estan connectats a PORT C de RC0 a RC4. Un cop hem analitzat el nostre diagrama de circuits, podem continuar amb la programació, simular el programa en aquest circuit i, a continuació, construir el circuit en una taula de programació i després penjar el programa al maquinari. Per fer-vos una idea, el meu maquinari després de fer les connexions anteriors es mostra a continuació

Programació per a la interfície del joystick:
El programa per connectar el joystick amb PIC és senzill i directe. Ja sabem a quins pins està connectat el joystick i quina és la seva funció, de manera que simplement hem de llegir el voltatge analògic dels pins i controlar els LED de sortida en conseqüència.
El programa complet per fer-ho es dóna al final d’aquest document, però per explicar les coses estic dividint el codi en petits fragments significatius a continuació.
Com sempre, el programa s’inicia configurant els bits de configuració, no discutirem gaire sobre la configuració dels bits de configuració perquè ja ho hem après al projecte LED intermitent i és el mateix per a aquest projecte. Un cop configurats els bits de configuració, hem de definir les funcions ADC per utilitzar el mòdul ADC al nostre PIC. Aquesta funció també es va aprendre al tutorial sobre com utilitzar ADC amb PIC. Després d'això, hem de declarar quins pins són entrades i quins són pins de sortida. Aquí el LED està connectat a PORTC, de manera que són pins de sortida i el pin de commutació del joystick és un pin d’entrada digital. Per tant, fem servir les línies següents per declarar el mateix:
// ***** Configuració d'E / S **** // TRISC = 0X00; // PORT C s’utilitza com a ports de sortida PORTC = 0X00; // Feu baix tots els pins TRISB0 = 1; // RB0 s'utilitza com a entrada // *** Fi de la configuració d'E / S ** ///
Els pins ADC no cal definir-los com a pins d’ entrada, ja que quan s’utilitza la funció ADC s’assignaran com a pins d’entrada. Un cop definits els pins, podem anomenar la funció ADC_initialize que hem definit anteriorment. Aquesta funció establirà els registres ADC necessaris i prepararà el mòdul ADC.
ADC_Initialize (); // Configureu el mòdul ADC
Ara entrem en el nostre bucle while infinit. Dins d’aquest bucle hem de controlar els valors de VRX, VRY i SW i en funció dels valors que hem de controlar la sortida del led. Podem començar el procés de monitorització llegint la tensió analògica de VRX i VRY mitjançant les línies següents
int joy_X = (ADC_Read (0)); // Llegiu l'eix X del joystick int joy_Y = (ADC_Read (1)); // Llegiu l'eix Y del joystick
Aquesta línia guardarà el valor de VRX i VRY a la variable joy_X i joy_Y respectivament. La funció ADC_Read (0) significa que estem llegint el valor ADC del canal 0 que és el pin A0. Hem connectat VRX i VRY als pins A0 i A1, així que llegim del 0 i l’1.
Si podeu recordar del nostre tutorial ADC, sabem que llegim el voltatge analògic, el PIC que és un dispositiu digital el llegirà de 0 a 1023. Aquest valor depèn de la posició del mòdul de joystick. Podeu utilitzar el diagrama d’etiquetes anterior per saber quin valor podeu esperar per a cada posició del joystick.
Aquí he utilitzat el valor límit de 200 com a límit inferior i un valor de 800 com a límit superior. Podeu utilitzar qualsevol cosa que vulgueu. Així que anem a utilitzar aquests valors i comencen a brillar el LED s en conseqüència. Per fer-ho, hem de comparar el valor de joy_X amb els valors predefinits mitjançant un bucle IF i fer que els pins LED siguin alts o baixos, tal com es mostra a continuació. Les línies de comentaris us ajudaran a entendre millor
if (alegria_X <200) // L’alegria va pujar {RC0 = 0; RC1 = 1;} // LED superior brillant més si (alegria_X> 800) // L’alegria es va desplaçar cap avall {RC0 = 1; RC1 = 0;} // LED inferior més brillant // Si no es mou {RC0 = 0; RC1 = 0;} // Apagueu els dos leds
De la mateixa manera, podem fer el mateix pel valor de l’eix Y. Només hem de substituir la variable joy_X per joy_Y i també controlar els següents dos pins LED com es mostra a continuació. Tingueu en compte que quan no es mou el joystick, apaguem els dos llums LED.
if (alegria_Y <200) // L’alegria es va moure cap a l’esquerra {RC2 = 0; RC3 = 1;} // Resplendor LED esquerre si (alegria_A> 800) // L’alegria es va moure cap a la dreta {RC2 = 1; RC3 = 0;} // LED de resplendor dret altre // Si no es mou {RC2 = 0; RC3 = 0;} // Apagueu els dos LED
Ara tenim una última cosa a fer, hem de comprovar el commutador si es prem. El pin del commutador està connectat a RB0, de manera que podem tornar a utilitzar if loop i comprovar si està activat. Si es prem, girarem el LED per indicar que s'ha pressionat l'interruptor.
if (RB0 == 1) // Si es pressiona Joy Joy RC4 = 1; // LED central de resplendor RC4 = 0; // LED central OFF
Visualització de simulació:
El projecte complet es pot simular mitjançant el programari Proteus. Un cop hàgiu escrit el programa, compileu el codi i enllaceu el codi hexadecimal de la simulació amb el circuit. Llavors heu de notar que els llums LED brillen segons la posició dels potenciòmetres. La simulació es mostra a continuació:

Maquinari i funcionament:
Després de verificar el codi mitjançant la simulació, podem construir el circuit en una placa de pa. Si heu seguit els tutorials de PIC, us haureu adonat que fem servir la mateixa placa de perfils que té soldats el circuit PIC i 7805. Si també esteu interessats en fer-ne un per fer-lo servir amb tots els vostres projectes PIC, soldeu el circuit en una placa perfecta. O també podeu crear el circuit complet en una taula de treball. Un cop fet el maquinari, seria una cosa així a continuació.

Ara pengeu el codi al microcontrolador PIC mitjançant PICkit3. Podeu consultar el projecte LED Blink per obtenir informació. Hauríeu de notar que el llum groc augmenta tan bon punt es penja el programa. Ara utilitzeu el joystick i varieu el comandament, per a cada direcció del joystick notareu que el LED respectiu puja. Quan es prem l'interruptor del centre, s'apagarà el LED del centre.
Aquest treball és només un exemple, a sobre hi podeu construir molts projectes interessants. El funcionament complet del projecte també es pot trobar al vídeo que es mostra al final d'aquesta pàgina.
Espero que hàgiu entès el projecte i us hagi agradat construir-lo, si teniu algun problema en fer-ho, no dubteu a publicar-lo a la secció de comentaris de sota o escriure'l als fòrums per obtenir ajuda.
