In deze tutorial gaan we een joystickmodule koppelen aan een atmega8-microcontroller. Een JOY STICK is een ingangsmodule die wordt gebruikt voor communicatie. Het maakt de communicatie van de gebruikersmachine in feite eenvoudig. Een joystick wordt getoond in onderstaande afbeelding.
De joystickmodule heeft twee assen: de ene is horizontaal en de andere is verticaal. Elke as van de joystick is gemonteerd op een potentiometer of pot of variabele weerstand. De middelpunten worden naar beneden gebracht als Rx en Ry. Deze pinnen dragen als uitgangssignaalpennen voor JOYSTICK. Wanneer de stick langs de horizontale as wordt bewogen, met de voedingsspanning aanwezig, verandert de spanning op de Rx-pin.
De spanning op Rx neemt toe wanneer deze naar voren wordt bewogen, de spanning op de Rx-pin neemt af wanneer deze naar achteren wordt bewogen. Evenzo neemt de spanning op Ry toe wanneer deze naar boven wordt bewogen, de spanning op de Ry-pin neemt af wanneer deze naar beneden wordt bewogen.
We hebben dus vier richtingen van JOYSTICK op twee ADC-kanalen. In normale gevallen hebben we onder normale omstandigheden 1Volt op elke pin. Wanneer de stick wordt bewogen, wordt de spanning op elke pin hoog of laag, afhankelijk van de richting. Dus vier richtingen als (0V, 5V op kanaal 0) voor x-as; (0V, 5V op kanaal 1) voor y-as.
We gaan twee ADC-kanalen van ATMEGA8 gebruiken om de klus te klaren. We gaan kanaal 0 en kanaal 1 gebruiken.
Componenten vereist
Hardware: ATMEGA8, voeding (5v), AVR-ISP PROGRAMMER, LED (4 stuks), 1000uF condensator, 100nF condensator (5 stuks), 1KΩ weerstand (6 stuks).
Software: Atmel studio 6.1, progisp of flash magie.
Schakelschema en werkuitleg
De spanning over JOYSTICK is niet volledig lineair; het zal luidruchtig zijn. Om de ruis eruit te filteren, worden condensatoren over elke weerstand in het circuit geplaatst, zoals weergegeven in de afbeelding.
Zoals te zien is in de afbeelding, zijn er vier LED's in het circuit. Elke LED vertegenwoordigt elke richting van JOYSTICK. Wanneer de stick in een richting wordt bewogen, licht de bijbehorende LED op.
Voordat we verder gaan, moeten we het hebben over ADC van ATMEGA8, In ATMEGA8 kunnen we analoge invoer geven aan elk van de VIER kanalen van PORTC, het maakt niet uit welk kanaal we kiezen, want ze zijn allemaal hetzelfde, we gaan kanaal 0 of PIN0 van PORTC kiezen.
In ATMEGA8 heeft de ADC een resolutie van 10 bits, zodat de controller een minimale verandering van Vref / 2 ^ 10 kan detecteren, dus als de referentiespanning 5V is, krijgen we een digitale outputstap voor elke 5/2 ^ 10 = 5mV. Dus voor elke stap van 5mV in de ingang hebben we een toename van één bij digitale uitgang.
Nu moeten we het register van ADC instellen op basis van de volgende voorwaarden, 1. Allereerst moeten we de ADC-functie in ADC inschakelen.
2. Hier krijg je een maximale ingangsspanning voor ADC-conversie is + 5V. We kunnen dus de maximale waarde of referentie van ADC naar 5V instellen.
3. De controller heeft een trigger-conversiefunctie, wat betekent dat ADC-conversie alleen plaatsvindt na een externe trigger, aangezien we niet willen dat we de registers hoeven in te stellen om de ADC continu vrij te laten draaien.
4. Voor elke ADC zijn de conversiefrequentie (analoge waarde naar digitale waarde) en nauwkeurigheid van digitale uitvoer omgekeerd evenredig. Dus voor een betere nauwkeurigheid van de digitale uitvoer moeten we een lagere frequentie kiezen. Voor een normale ADC-klok stellen we de voorverkoop van ADC in op maximale waarde (2). Omdat we de interne klok van 1MHZ gebruiken, zal de klok van ADC (1000000/2) zijn.
Dit zijn de enige vier dingen die we moeten weten om aan de slag te gaan met ADC.
Alle bovenstaande vier functies worden ingesteld door twee registers:
ROOD (ADEN): Dit bit moet worden ingesteld om de ADC-functie van ATMEGA in te schakelen.
BLAUW (REFS1, REFS0): deze twee bits worden gebruikt om de referentiespanning in te stellen (of de maximale ingangsspanning die we gaan geven). Omdat we een referentiespanning van 5V willen, moet REFS0 worden ingesteld volgens de tabel.
GEEL (ADFR): deze bit moet worden ingesteld om de ADC continu te laten werken (vrijloopmodus).
PINK (MUX0-MUX3): deze vier bits zijn voor het aangeven van het ingangskanaal. Omdat we ADC0 of PIN0 gaan gebruiken, hoeven we geen bits in te stellen zoals bij de tabel.
BRUIN (ADPS0-ADPS2): deze drie bits zijn voor het instellen van de prescalar voor ADC. Omdat we een prescalar van 2 gebruiken, moeten we een bit instellen.
DONKERGROEN (ADSC): deze bit is ingesteld voor de ADC om de conversie te starten. Dit bit kan in het programma worden uitgeschakeld wanneer we de conversie moeten stoppen.