În acest tutorial vom interfața un modul joystick cu microcontrolerul ATMEGA8. A JOY STICK este un modul de intrare utilizat pentru comunicare. Practic, facilitează comunicarea utilizatorului cu mașina. Un joystick este prezentat în figura de mai jos.
Modulul joystick-ului are două axe - una este orizontală și alta este verticală. Fiecare axă a joystick-ului este montată pe un potențiometru sau o oală sau rezistență variabilă. Punctele medii sunt reduse ca Rx și Ry. Acești pini poartă ca pini de semnal de ieșire pentru JOYSTICK. Când stick-ul este deplasat de-a lungul axei orizontale, cu tensiunea de alimentare prezentă, tensiunea la pinul Rx se schimbă.
Tensiunea la Rx crește atunci când este deplasată înainte, tensiunea la pinul Rx scade când este mișcată înapoi. În mod similar, tensiunea la Ry crește atunci când este deplasată în sus, tensiunea la pinul Ry scade când este mișcată în jos.
Deci, avem patru direcții ale JOYSTICK pe două canale ADC. În cazuri normale, avem 1 Volt pe fiecare știft în circumstanțe normale. Când butonul este mutat, tensiunea pe fiecare știft crește sau scade în funcție de direcție. Deci patru direcții ca (0V, 5V pe canalul 0) pentru axa x; (0V, 5V pe canalul 1) pentru axa y.
Vom folosi două canale ADC ale ATMEGA8 pentru a face treaba. Vom folosi canalul 0 și canalul 1.
Componente necesare
Hardware: ATMEGA8, sursă de alimentare (5v), PROGRAMATOR AVR-ISP, LED (4 bucăți), condensator 1000uF, condensator 100nF (5 bucăți), rezistor 1KΩ (6 bucăți).
Software: Atmel studio 6.1, progisp sau flash magic.
Diagrama circuitului și explicația de lucru
Tensiunea pe JOYSTICK nu este complet liniară; va fi unul zgomotos. Pentru a filtra zgomotul, un condensator este plasat pe fiecare rezistor din circuit, așa cum se arată în figură.
După cum se arată în figură, există patru LED-uri în circuit. Fiecare LED reprezintă fiecare direcție a JOYSTICK. Când stick-ul este deplasat într-o direcție, atunci LED-ul corespunzător luminează.
Înainte de a merge mai departe, trebuie să vorbim despre ADC al ATMEGA8, În ATMEGA8, putem da intrare analogică oricăruia dintre PATRU canale ale PORTC, nu contează canalul pe care îl alegem, deoarece toate sunt aceleași, vom alege canalul 0 sau PIN0 al PORTC.
În ATMEGA8, ADC are o rezoluție de 10 biți, astfel încât controlerul poate detecta o schimbare minimă a Vref / 2 ^ 10, deci dacă tensiunea de referință este de 5V, obținem o creștere de ieșire digitală pentru fiecare 5/2 ^ 10 = 5mV. Deci, pentru fiecare increment de 5mV în intrare vom avea o creștere de unul la ieșirea digitală.
Acum trebuie să setăm registrul ADC pe baza următoarelor condiții, 1. În primul rând trebuie să activăm caracteristica ADC în ADC.
2. Aici veți obține o tensiune maximă de intrare pentru conversia ADC este de + 5V. Deci, putem seta valoarea maximă sau referința ADC la 5V.
3. Controlerul are o caracteristică de conversie a declanșatorului, ceea ce înseamnă că conversia ADC are loc numai după un declanșator extern, deoarece nu dorim să setăm registrele pentru ca ADC să ruleze în modul de rulare liberă continuă.
4. Pentru orice ADC, frecvența conversiei (valoarea analogică la valoarea digitală) și precizia ieșirii digitale sunt invers proporționale. Deci, pentru o mai bună precizie a ieșirii digitale, trebuie să alegem o frecvență mai mică. Pentru ceasul ADC normal, setăm pre-vânzarea ADC la valoarea maximă (2). Deoarece folosim ceasul intern de 1 MHz, ceasul ADC va fi (1000000/2).
Acestea sunt singurele patru lucruri pe care trebuie să le cunoaștem pentru a începe cu ADC.
Toate cele patru caracteristici de mai sus sunt setate prin două registre:
ROȘU (ADEN): Acest bit trebuie setat pentru a activa caracteristica ADC a ATMEGA.
ALBASTRU (REFS1, REFS0): Acești doi biți sunt utilizați pentru a seta tensiunea de referință (sau tensiunea maximă de intrare pe care o vom da). Din moment ce dorim să avem tensiunea de referință 5V, REFS0 ar trebui setat de tabel.
GALBEN (ADFR): Acest bit trebuie setat pentru ca ADC să ruleze continuu (modul de rulare liber).
ROSE (MUX0-MUX3): Acești patru biți sunt pentru a spune canalului de intrare. Deoarece vom folosi ADC0 sau PIN0, nu trebuie să setăm niciun biți ca în tabel.
BROWN (ADPS0-ADPS2): acești trei biți sunt pentru setarea prescalarului pentru ADC. Deoarece folosim un prescalar de 2, trebuie să setăm un bit.
DARK GREEN (ADSC): acest bit setat pentru ca ADC să înceapă conversia. Acest bit poate fi dezactivat în program atunci când trebuie să oprim conversia.