In questo tutorial interfacciamo un modulo joystick con il microcontrollore atmega8. Un JOY STICK è un modulo di ingresso utilizzato per la comunicazione. Fondamentalmente semplifica la comunicazione tra l'utente e la macchina. Un joystick è mostrato nella figura sottostante.
Il modulo joystick ha due assi: uno è orizzontale e l'altro è verticale. Ogni asse del joystick è montato su un potenziometro o pentola o resistenza variabile. I punti medi vengono abbassati come Rx e Ry. Questi pin portano come pin del segnale di uscita per JOYSTICK. Quando lo stick viene spostato lungo l'asse orizzontale, con la tensione di alimentazione presente, la tensione al pin Rx cambia.
La tensione su Rx aumenta quando viene spostata in avanti, la tensione sul pin Rx diminuisce quando viene spostata all'indietro. Allo stesso modo, la tensione su Ry aumenta quando viene spostata verso l'alto, la tensione sul pin Ry diminuisce quando viene spostata verso il basso.
Quindi abbiamo quattro direzioni di JOYSTICK su due canali ADC. In casi normali abbiamo 1 Volt su ogni pin in circostanze normali. Quando lo stick viene spostato, la tensione su ciascun pin aumenta o diminuisce a seconda della direzione. Quindi quattro direzioni come (0V, 5V sul canale 0) per l'asse x; (0V, 5V sul canale 1) per l'asse y.
Useremo due canali ADC di ATMEGA8 per fare il lavoro. Useremo il canale 0 e il canale 1.
Componenti richiesti
Hardware: ATMEGA8, alimentatore (5v), AVR-ISP PROGRAMMER, LED (4 pezzi), condensatore 1000uF, condensatore 100nF (5 pezzi), resistenza 1KΩ (6 pezzi).
Software: Atmel studio 6.1, progisp o flash magic.
Schema del circuito e spiegazione del funzionamento
La tensione ai capi del JOYSTICK non è completamente lineare; sarà rumoroso. Per filtrare il rumore, un condensatore viene posizionato su ciascun resistore nel circuito come mostrato in figura.
Come mostrato in figura ci sono quattro LED nel circuito. Ogni LED rappresenta ciascuna direzione del JOYSTICK. Quando la levetta viene spostata in una direzione, il LED corrispondente si accende.
Prima di andare oltre dobbiamo parlare di ADC di ATMEGA8, In ATMEGA8, possiamo dare un ingresso analogico a uno dei QUATTRO canali di PORTC, non importa quale canale scegliamo poiché sono tutti uguali, sceglieremo il canale 0 o PIN0 di PORTC.
In ATMEGA8, l'ADC ha una risoluzione di 10 bit, quindi il controller può rilevare una variazione minima di Vref / 2 ^ 10, quindi se la tensione di riferimento è 5V otteniamo un incremento dell'uscita digitale per ogni 5/2 ^ 10 = 5mV. Quindi per ogni incremento di 5mV in ingresso avremo un incremento di uno in uscita digitale.
Ora dobbiamo impostare il registro di ADC in base ai seguenti termini, 1. Prima di tutto dobbiamo abilitare la funzione ADC in ADC.
2. Qui si otterrà una tensione di ingresso massima per la conversione ADC è + 5V. Quindi possiamo impostare il valore massimo o il riferimento dell'ADC a 5V.
3. Il controller ha una funzione di conversione del trigger che significa che la conversione dell'ADC avviene solo dopo un trigger esterno, poiché non vogliamo che sia necessario impostare i registri affinché l'ADC funzioni in modalità di esecuzione libera continua.
4. Per qualsiasi ADC, la frequenza di conversione (da valore analogico a valore digitale) e la precisione dell'uscita digitale sono inversamente proporzionali. Quindi, per una migliore precisione dell'uscita digitale, dobbiamo scegliere una frequenza inferiore. Per il normale orologio ADC stiamo impostando la prevendita dell'ADC al valore massimo (2). Dato che stiamo utilizzando l'orologio interno di 1 MHZ, l'orologio dell'ADC sarà (1000000/2).
Queste sono le uniche quattro cose che dobbiamo sapere per iniziare con ADC.
Tutte le quattro funzioni precedenti sono impostate da due registri:
ROSSO (ADEN): questo bit deve essere impostato per abilitare la funzione ADC di ATMEGA.
BLU (REFS1, REFS0): Questi due bit vengono utilizzati per impostare la tensione di riferimento (o la tensione di ingresso massima che daremo). Dato che vogliamo avere una tensione di riferimento di 5V, REFS0 dovrebbe essere impostato, dalla tabella.
GIALLO (ADFR): questo bit deve essere impostato affinché l'ADC funzioni continuamente (modalità di funzionamento libero).
ROSA (MUX0-MUX3): questi quattro bit servono per indicare il canale di ingresso. Poiché utilizzeremo ADC0 o PIN0, non è necessario impostare alcun bit come da tabella.
MARRONE (ADPS0-ADPS2): questi tre bit servono per impostare il prescalar per ADC. Dato che stiamo usando un prescalar di 2, dobbiamo impostare un bit.
VERDE SCURO (ADSC): questo bit consente all'ADC di avviare la conversione. Questo bit può essere disabilitato nel programma quando è necessario interrompere la conversione.