I denna handledning ska vi gränssnitt en joystick-modul med atmega8 mikrokontroller. En JOY STICK är en ingångsmodul används för kommunikation. Det gör det i grunden lätt för användarens maskinkommunikation. En joystick visas i bilden nedan.
Joystickmodulen har två axlar - den ena är horisontell och den andra är vertikal. Varje joystickaxel är monterad på en potentiometer eller pot eller variabelt motstånd. Mittpunkterna tas ner som Rx och Ry. Dessa stift har som utgångssignalstift för JOYSTICK. När pinnen flyttas längs den horisontella axeln, med matningsspänningen närvarande, ändras spänningen vid Rx-stiftet.
Spänningen vid Rx ökar när den flyttas framåt, spänningen vid Rx-stiftet minskar när den flyttas bakåt. På samma sätt ökar spänningen vid Ry när den flyttas uppåt, spänningen vid Ry-stiftet minskar när den flyttas nedåt.
Så vi har fyra riktningar av JOYSTICK på två ADC-kanaler. I normala fall har vi 1Volt på varje stift under normala omständigheter. När pinnen flyttas blir spänningen på varje stift hög eller låg beroende på riktning. Så fyra riktningar som (0V, 5V på kanal 0) för x-axeln; (0V, 5V på kanal 1) för y-axeln.
Vi ska använda två ADC-kanaler i ATMEGA8 för att göra jobbet. Vi ska använda kanal 0 och kanal 1.
Komponenter krävs
Hårdvara: ATMEGA8, strömförsörjning (5v), AVR-ISP-PROGRAMMER, LED (4 st), 1000uF kondensator, 100nF kondensator (5 st), 1KΩ motstånd (6 st).
Programvara: Atmel studio 6.1, progisp eller flash magi.
Kretsschema och arbetsförklaring
Spänningen över JOYSTICK är inte helt linjär; det blir en högljudd. För att filtrera bort bruset placeras kondensatorer över varje motstånd i kretsen som visas i figuren.
Som visas i figuren finns fyra lysdioder i kretsen. Varje lysdiod representerar JOYSTICKs riktning. När pinnen flyttas i en riktning lyser motsvarande lysdiod.
Innan vi går vidare måste vi prata om ADC för ATMEGA8, I ATMEGA8 kan vi ge analog ingång till någon av de fyra PORTC-kanalerna, det spelar ingen roll vilken kanal vi väljer eftersom alla är desamma, vi kommer att välja kanal 0 eller PIN0 för PORTC.
I ATMEGA8 har ADC 10 bitars upplösning, så att styrenheten kan känna av en känsla av en minsta förändring av Vref / 2 ^ 10, så om referensspänningen är 5V får vi en digital utgångsinkrement för varje 5/2 ^ 10 = 5mV. Så för varje 5mV-steg i ingången kommer vi att öka en på digital utgång.
Nu måste vi ställa in ADC-registret baserat på följande villkor, 1. Först och främst måste vi aktivera ADC-funktionen i ADC.
2. Här kommer att få en maximal ingångsspänning för ADC-omvandling är + 5V. Så vi kan ställa in maximalt värde eller referens för ADC till 5V.
3. Styrenheten har en utlösningsomvandlingsfunktion som innebär att ADC-omvandling endast sker efter en extern utlösare, eftersom vi inte vill att vi behöver ställa in registren för att ADC ska kunna köras i kontinuerligt frilöpande läge.
4. För varje ADC är omvandlingsfrekvensen (analogt värde till digitalt värde) och noggrannheten för digital utgång omvänt proportionell. Så för bättre noggrannhet för digital utgång måste vi välja lägre frekvens. För normal ADC-klocka ställer vi in förförsäljningen av ADC till maximalt värde (2). Eftersom vi använder den interna klockan på 1MHZ kommer klockan till ADC att vara (1000000/2).
Det här är de enda fyra sakerna vi behöver veta för att komma igång med ADC.
Alla ovanstående fyra funktioner är inställda av två register:
RÖD (ADEN): Denna bit måste ställas in för att aktivera ADC-funktionen i ATMEGA.
BLÅ (REFS1, REFS0): Dessa två bitar används för att ställa in referensspänningen (eller max ingångsspänningen vi ska ge). Eftersom vi vill ha referensspänning 5V, bör REFS0 ställas in enligt tabellen.
GUL (ADFR): Denna bit måste ställas in för att ADC ska kunna köras kontinuerligt (frilöpande läge).
PINK (MUX0-MUX3): Dessa fyra bitar är för att berätta ingångskanalen. Eftersom vi ska använda ADC0 eller PIN0 behöver vi inte ställa in några bitar som i tabellen.
BRUN (ADPS0-ADPS2): dessa tre bitar är för att ställa in prescalar för ADC. Eftersom vi använder en prescalar på 2 måste vi ställa in en bit.
MÖRK GRÖN (ADSC): denna bituppsättning för att ADC ska starta omvandlingen. Denna bit kan inaktiveras i programmet när vi behöver stoppa konverteringen.