- Materiaal vereist
- Inzicht in de joystickmodule:
- Schakelschema:
- Programmering voor het koppelen van de joystick:
- Simulatieweergave:
- Hardware en werken:
Invoerapparaten spelen een cruciale rol in elk elektronicaproject. Deze invoerapparatuur helpt de gebruiker om te communiceren met de digitale wereld. Een invoerapparaat kan zo simpel zijn als een drukknop of zo ingewikkeld als een aanraakscherm; het varieert op basis van de vereisten van het project. In deze tutorial gaan we leren hoe we een joystick kunnen koppelen aan onze PIC-microcontroller, een joystick is een coole manier om te communiceren met de digitale wereld en bijna iedereen zou er een hebben gebruikt voor het spelen van videogames in hun puberteit.
Een joystick lijkt misschien een geavanceerd apparaat, maar het is eigenlijk gewoon een combinatie van twee Potentiometers en een drukknop. Daarom is het ook heel gemakkelijk om met elke MCU te communiceren, op voorwaarde dat we weten hoe we de ADC-functie van die MCU moeten gebruiken. We hebben al geleerd hoe we ADC met PIC kunnen gebruiken, dus het zou slechts een oplossing zijn om de joystick te koppelen. Voor mensen die nieuw zijn om te kiezen, wordt het aanbevolen om het bovenstaande ADC-project en het LED Blinking Sequence-project te leren om het project gemakkelijker te begrijpen.
Materiaal vereist
- PicKit 3 voor programmeren
- Joy Stick-module
- PIC16F877A IC
- 40 - Pin IC houder
- Perf bord
- 20 MHz Crystal OSC
- Bergstik pinnen
- 220ohm weerstand
- 5-leds in elke kleur
- 1 soldeerkit
- IC 7805
- 12V adapter
- Draden aansluiten
- Breadboard
Inzicht in de joystickmodule:
Joysticks zijn er in verschillende soorten en maten. Een typische joystickmodule wordt weergegeven in de onderstaande afbeelding. Een joystick is niets meer dan een paar potmeters en drukknoppen die over een slimme mechanische opstelling zijn gemonteerd. De potentiometer wordt gebruikt om de X- en Y-beweging van de joystick bij te houden en de knop wordt gebruikt om te voelen of de joystick wordt ingedrukt. Beide Potentiometers geven een analoge spanning af die afhankelijk is van de positie van de joystick. En we kunnen de bewegingsrichting bepalen door deze spanningsveranderingen te interpreteren met behulp van een microcontroller. Eerder koppelden we Joystick met AVR, Joystick met Arduino en Raspberry Pi.
Voordat u een sensor of module met een microcontroller verbindt, is het belangrijk om te weten hoe deze werkt. Hier heeft onze joystick 5 uitgangspennen waarvan er twee voor stroom en drie voor gegevens zijn. De module moet worden gevoed met + 5V. De datapinnen heten VRX, VRY en SW.
De term "VRX" staat voor Variabele spanning op X-as en de term "VRY" staat voor Variabele spanning in Y-as en "SW" staat voor schakelaar.
Dus wanneer we de joystick naar links of rechts bewegen, zal de spanningswaarde op VRX variëren en wanneer we deze omhoog of omlaag variëren, zal VRY variëren. Evenzo zullen we zowel VRX als VRY variëren als we het diagonaal verplaatsen. Als we op de schakelaar drukken, wordt de SW-pin verbonden met aarde. De onderstaande afbeelding zal u helpen om de outputwaarden veel beter te begrijpen
Schakelschema:
Nu we weten hoe de joystick werkt, kunnen we tot de conclusie komen dat we twee ADC-pinnen en één digitale invoerpin nodig hebben om alle drie datapinnen van de joystickmodule te lezen. Het volledige schakelschema is weergegeven in de onderstaande afbeelding
Zoals je in het schakelschema kunt zien, hebben we in plaats van de joystick twee potentiometers RV1 en RV3 gebruikt als analoge spanningsingangen en een logische ingang voor de schakelaar. U kunt de labels volgen die in violette kleur zijn geschreven om overeen te komen met de namen van de pinnen en uw verbindingen dienovereenkomstig maken.
Merk op dat de analoge pinnen zijn verbonden met kanalen A0 en A1 en de digitale schakelaar is verbonden met RB0. We zullen ook 5 LED-lampjes hebben aangesloten als uitgang, zodat we er een kunnen laten branden op basis van de richting waarin de joystick wordt bewogen. Dus deze outputpinnen zijn verbonden met PORT C van RC0 tot RC4. Nadat we ons schakelschema hebben gepand, kunnen we doorgaan met het programmeren, vervolgens het programma op dit circuit simuleren en vervolgens het circuit op een breadboard bouwen en vervolgens het programma uploaden naar de hardware. Om u een idee te geven van mijn hardware na het maken van bovenstaande aansluitingen is hieronder weergegeven
Programmering voor het koppelen van de joystick:
Het programma om de joystick te koppelen aan PIC is eenvoudig en ongecompliceerd. We weten al op welke pinnen de joystick is aangesloten en wat hun functie is, dus we hoeven alleen maar de analoge spanning van de pinnen af te lezen en de output-LED's dienovereenkomstig te regelen.
Het volledige programma om dit te doen staat aan het einde van dit document, maar om dingen uit te leggen, breek ik de code in kleine betekenisvolle fragmenten hieronder.
Zoals altijd wordt het programma gestart door de configuratiebits in te stellen, we gaan niet veel praten over het instellen van configuratiebits omdat we het al hebben geleerd in het LED Blinking-project en het is ook hetzelfde voor dit project. Zodra de configuratiebits zijn ingesteld, moeten we de ADC-functies definiëren voor het gebruik van de ADC-module in onze PIC. Deze functies zijn ook geleerd in de zelfstudie ADC met PIC. Daarna moeten we aangeven welke pinnen inputs zijn en welke output pinnen. Hier is de LED verbonden met PORTC, dus het zijn outputpinnen en de Switch-pin van Joystick is een digitale inputpin. Dus gebruiken we de volgende regels om hetzelfde te verklaren:
// ***** I / O-configuratie **** // TRISC = 0X00; // POORT C wordt gebruikt als uitvoerpoorten PORTC = 0X00; // MAAK alle pinnen laag TRISB0 = 1; // RB0 wordt gebruikt als invoer // *** Einde van I / O-configuratie ** ///
De ADC-pinnen hoeven niet als invoerpinnen te worden gedefinieerd, omdat ze bij gebruik van de ADC-functie als invoerpin worden toegewezen. Zodra de pinnen zijn gedefinieerd, kunnen we de ADC_initialize- functie aanroepen die we eerder hebben gedefinieerd. Deze functie stelt de vereiste ADC-registers in en bereidt de ADC-module voor.
ADC_Initialize (); // Configureer de ADC-module
Nu stappen we in onze oneindige while- lus. Binnen deze lus moeten we de waarden van VRX, VRY en SW bewaken en op basis van de waarden die we hebben om de output van de led te regelen. We kunnen het monitoringproces beginnen door de analoge spanning van VRX en VRY te lezen met behulp van de onderstaande regels
int joy_X = (ADC_Read (0)); // Lees de X-as van joystick int joy_Y = (ADC_Read (1)); // Lees de Y-as van de joystick
Deze regel zal de waarde van VRX en VRY opslaan in respectievelijk de variabele joy_X en joy_Y . De functie ADC_Read (0) betekent dat we de ADC-waarde lezen van kanaal 0, dat is pin A0. We hebben VRX en VRY aangesloten op pin A0 en A1 en dus lezen we van 0 en 1.
Als je je kunt herinneren van onze ADC-tutorial, weten we dat we de analoge spanning lezen, dat de PIC een digitaal apparaat is, deze zal lezen van 0 tot 1023. Deze waarde hangt af van de positie van de joystickmodule. U kunt het bovenstaande labeldiagram gebruiken om te weten welke waarde u kunt verwachten voor elke positie van de joystick.
Hier heb ik de grenswaarde van 200 als ondergrens gebruikt en een waarde van 800 als bovengrens. U kunt alles gebruiken wat u maar wilt. Laten we deze waarden dus gebruiken en de LED's dienovereenkomstig laten gloeien. Om dit te doen, moeten we de waarde van joy_X vergelijken met de vooraf gedefinieerde waarden met behulp van een IF-lus en de LED-pinnen hoog of laag maken, zoals hieronder weergegeven. De commentaarregels zullen u helpen om het beter te begrijpen
if (joy_X <200) // Joy schoof omhoog {RC0 = 0; RC1 = 1;} // Gloeiende bovenste LED anders als (joy_X> 800) // Vreugde naar beneden {RC0 = 1; RC1 = 0;} // Glow Lower LED anders // Indien niet verplaatst {RC0 = 0; RC1 = 0;} // Schakel beide leds uit
We kunnen hetzelfde doen voor de waarde van de Y-as. We hoeven alleen de variabele joy_X te vervangen door joy_Y en ook de volgende twee LED-pinnen te besturen, zoals hieronder weergegeven. Merk op dat wanneer de joystick niet wordt bewogen, we beide LED-lampjes uitschakelen.
if (joy_Y <200) // Joy verplaatst naar links {RC2 = 0; RC3 = 1;} // Gloeiende linker LED anders als (joy_Y> 800) // Vreugde naar rechts verplaatst {RC2 = 1; RC3 = 0;} // Glow Right LED anders // Indien niet verplaatst {RC2 = 0; RC3 = 0;} // Schakel beide LED's uit
Nu hebben we nog een laatste ding te doen, we moeten controleren of de schakelaar is ingedrukt. De schakelpin is verbonden met RB0, dus we kunnen opnieuw de if-lus gebruiken en controleren of deze aan staat. Als deze wordt ingedrukt, schakelen we de LED uit om aan te geven dat de schakelaar is ingedrukt.
if (RB0 == 1) // Als Joy wordt ingedrukt RC4 = 1; // Gloeiende middelste LED anders RC4 = 0; // UIT middelste LED
Simulatieweergave:
Het volledige project kan worden gesimuleerd met behulp van de Proteus-software. Zodra je het programma hebt geschreven, compileer je de code en koppel je de hex-code van de simulatie aan het circuit. Dan zou je moeten opmerken dat de LED-lampjes oplichten volgens de positie van de potmeters. De simulatie wordt hieronder weergegeven:
Hardware en werken:
Nadat we de code hebben geverifieerd met behulp van de simulatie, kunnen we het circuit op een breadboard bouwen. Als je de PIC-tutorials hebt gevolgd, zou je hebben gemerkt dat we hetzelfde perf-bord gebruiken waarop het PIC- en 7805-circuit is gesoldeerd. Als je er ook een wilt maken, zodat je het met al je PIC-projecten kunt gebruiken, soldeer dan het circuit op een perfboard. Of je kunt ook het complete circuit op een breadboard bouwen. Zodra de hardware klaar is, zou het hieronder ongeveer zo zijn.
Upload nu de code naar de PIC-microcontroller met behulp van de PICkit3. U kunt het LED Blink-project raadplegen voor hulp. U zou moeten opmerken dat het gele lampje hoog wordt zodra het programma is geüpload. Gebruik nu de joystick en verander de knop, voor elke richting van de joystick zul je merken dat de respectievelijke LED hoog gaat. Als de schakelaar in het midden wordt ingedrukt, gaat de led in het midden uit.
Dit werken is slechts een voorbeeld, je kunt er veel interessante projecten bovenop bouwen. De volledige werking van het project is ook te vinden op de video aan het einde van deze pagina.
Ik hoop dat je het project hebt begrepen en het leuk vond om het te bouwen, als je daar een probleem mee hebt, kun je het in de commentaarsectie hieronder posten of op de forums schrijven voor hulp.