En aquest tutorial farem una interfície d'un mòdul de joystick amb microcontrolador atmega8. A JOY STICK és un mòdul d’entrada utilitzat per a la comunicació. Bàsicament, facilita la comunicació de la màquina de l'usuari. A la figura següent es mostra un joystick.

El mòdul del joystick té dos eixos: un és horitzontal i l’altre vertical. Cada eix del joystick està muntat a un potenciòmetre o pot o resistència variable. Els punts mitjans es redueixen com Rx i Ry. Aquests pins porten com a pins de senyal de sortida per a JOYSTICK. Quan el pal es mou al llarg de l'eix horitzontal, amb la tensió d'alimentació present, la tensió en el pin Rx canvia.
El voltatge a Rx augmenta quan es mou cap endavant, el voltatge al pin Rx disminueix quan es mou cap enrere. De la mateixa manera, la tensió a Ry augmenta quan es mou cap amunt, la tensió a Ry pin disminueix quan es mou cap avall.
Per tant, tenim quatre direccions de JOYSTICK en dos canals ADC. En casos normals, tenim 1 Volt a cada passador en circumstàncies normals. Quan es mou el pal, el voltatge de cada pas augmenta o baixa segons la direcció. Així doncs, quatre direccions com (0V, 5V al canal 0) per a l'eix x; (0V, 5V al canal 1) per a l'eix y.
Utilitzarem dos canals ADC d’ATMEGA8 per fer la feina. Utilitzarem el canal 0 i el canal 1.
Components necessaris
Maquinari: ATMEGA8, font d'alimentació (5v), PROGRAMADOR AVR-ISP, LED (4 peces), condensador 1000uF, condensador 100nF (5 peces), resistència 1KΩ (6 peces).
Programari: Atmel studio 6.1, progisp o flash magic.
Diagrama de circuits i explicació de treball

El voltatge a través de JOYSTICK no és completament lineal; serà sorollós. Per filtrar el soroll, es col·loquen condensadors a cada resistència del circuit, tal com es mostra a la figura.
Com es mostra a la figura, hi ha quatre LED al circuit. Cada LED representa cada direcció de JOYSTICK. Quan el pal es mou en una direcció, es llueix el LED corresponent.
Abans d’anar més lluny, hem de parlar de l’ADC d’ATMEGA8, A ATMEGA8, podem donar entrada analògica a qualsevol dels QUATRE canals de PORTC, no importa quin canal escollim, ja que tots són iguals, escollirem el canal 0 o PIN0 de PORTC.
A ATMEGA8, l’ADC té una resolució de 10 bits, de manera que el controlador pot detectar un canvi mínim de Vref / 2 ^ 10, de manera que si la tensió de referència és de 5V obtindrem un increment de sortida digital per cada 5/2 ^ 10 = 5mV. Així doncs, per cada increment de 5 mV a l’entrada tindrem un increment d’un a la sortida digital.
Ara hem d’ establir el registre d’ADC en funció dels termes següents, 1. Primer de tot, hem d’habilitar la funció ADC a ADC.
2. Aquí obtindreu un voltatge d'entrada màxim per a la conversió ADC de + 5V. Per tant, podem configurar el valor màxim o la referència de l’ADC a 5V.
3. El controlador té una funció de conversió d'activació que significa que la conversió ADC només té lloc després d'un activador extern, ja que no volem que hàgim de configurar els registres perquè l'ADC funcioni en mode d'execució lliure contínua.
4. Per a qualsevol ADC, la freqüència de conversió (valor analògic a valor digital) i la precisió de la sortida digital són inversament proporcionals. Per tant, per a una millor precisió de la sortida digital hem de triar una freqüència menor. Per al rellotge ADC normal, estem establint la prevenda d’ADC al valor màxim (2). Com que fem servir el rellotge intern d'1 MHz, el rellotge d'ADC serà (1000000/2).
Aquestes són les úniques quatre coses que hem de saber per començar a utilitzar ADC.
Les quatre funcions anteriors estan configurades per dos registres:


VERMELL (ADEN): aquest bit s'ha d'establir per habilitar la funció ADC d'ATMEGA.
BLAU (REFS1, REFS0): Aquests dos bits s’utilitzen per configurar la tensió de referència (o tensió màxima d’entrada que donarem). Com que volem tenir una tensió de referència 5V, s'hauria d'establir REFS0, a la taula.

GROC (ADFR): aquest bit s’ha d’establir perquè l’ADC funcioni contínuament (mode d’execució lliure).
ROSA (MUX0-MUX3): aquests quatre bits serveixen per indicar el canal d’entrada. Com que farem servir ADC0 o PIN0, no hem d’establir cap bit segons la taula.

MARRÓ (ADPS0-ADPS2): aquests tres bits serveixen per configurar el prescalar per ADC. Com que fem servir un prescalar de 2, hem d’establir un bit.

VERD FOSC (ADSC): aquest bit definit per a l'ADC per iniciar la conversió. Aquest bit es pot desactivar al programa quan necessitem aturar la conversió.
