I denne opplæringen skal vi grensesnitt en joystick-modul med atmega8 mikrokontroller. EN JOY STICK er en inngangsmodul som brukes til kommunikasjon. Det gjør i utgangspunktet enkel brukermaskinkommunikasjon. En styrespak er vist i figuren nedenfor.
Styrespakemodulen har to akser - den ene er vannrett og den andre er loddrett. Hver akse med styrespak er montert på et potensiometer eller gryte eller variabel motstand. Midtpunktene blir brakt ned som Rx og Ry. Disse pinnene bærer som utgangssignalpinner for JOYSTICK. Når pinnen beveges langs vannrett akse, med forsyningsspenningen til stede, endres spenningen ved Rx-pinnen.
Spenningen ved Rx øker når den beveges fremover, spenningen ved Rx-pinnen avtar når den beveges bakover. Tilsvarende øker spenningen ved Ry når den beveges oppover, spenningen ved Ry pin synker når den beveges nedover.
Så vi har fire retninger av JOYSTICK på to ADC-kanaler. I normale tilfeller har vi 1 volt på hver pinne under normale omstendigheter. Når pinnen flyttes, blir spenningen på hver pinne høy eller lav, avhengig av retning. Så fire retninger som (0V, 5V på kanal 0) for x-aksen; (0V, 5V på kanal 1) for y-aksen.
Vi skal bruke to ADC-kanaler til ATMEGA8 for å gjøre jobben. Vi skal bruke kanal 0 og kanal 1.
Komponenter kreves
Maskinvare: ATMEGA8, strømforsyning (5v), AVR-ISP PROGRAMMER, LED (4 stk), 1000uF kondensator, 100nF kondensator (5 stk), 1KΩ motstand (6 stk).
Programvare: Atmel studio 6.1, progisp eller flash magi.
Kretsdiagram og arbeidsforklaring
Spenningen over JOYSTICK er ikke helt lineær; det vil være bråkete. For å filtrere ut støyen plasseres kondensatorer over hver motstand i kretsen som vist på figuren.
Som vist i figuren er det fire lysdioder i kretsen. Hver LED representerer hver retning av JOYSTICK. Når pinnen beveges i en retning, lyser den tilsvarende lysdioden.
Før vi går videre må vi snakke om ADC av ATMEGA8, I ATMEGA8 kan vi gi analoge innganger til noen av FOUR kanaler i PORTC, det spiller ingen rolle hvilken kanal vi velger, ettersom alle er like, vi skal velge kanal 0 eller PIN0 i PORTC.
I ATMEGA8 har ADC 10 bit oppløsning, slik at kontrolleren kan oppdage en følelse av en minimum endring av Vref / 2 ^ 10, så hvis referansespenningen er 5V, får vi en digital utgangsøkning for hver 5/2 ^ 10 = 5mV. Så for hver 5mV økning i inngangen vil vi ha en økning på en på digital utgang.
Nå må vi sette registeret over ADC basert på følgende vilkår, 1. Først og fremst trenger vi å aktivere ADC-funksjonen i ADC.
2. Her kommer til å få en maksimal inngangsspenning for ADC-konvertering er + 5V. Så vi kan sette opp maksimumsverdi eller referanse for ADC til 5V.
3. Kontrolleren har en utløserkonverteringsfunksjon som betyr at ADC-konvertering bare finner sted etter en ekstern utløser, siden vi ikke vil at vi trenger å sette registrene for at ADC skal kjøre i kontinuerlig friløpsmodus.
4. For enhver ADC er konverteringsfrekvensen (analog verdi til digital verdi) og nøyaktigheten av digital utgang omvendt proporsjonal. Så for bedre nøyaktighet av digital utgang må vi velge mindre frekvens. For normal ADC-klokke setter vi forhåndssalget til ADC til maksimumsverdien (2). Siden vi bruker den interne klokken på 1MHZ, vil klokken til ADC være (1000000/2).
Dette er de eneste fire tingene vi trenger å vite for å komme i gang med ADC.
Alle de ovennevnte fire funksjonene er satt av to registre:
RØD (ADEN): Denne biten må stilles inn for å aktivere ADC-funksjonen til ATMEGA.
BLÅ (REFS1, REFS0): Disse to bitene brukes til å stille inn referansespenningen (eller maks inngangsspenning vi skal gi). Siden vi ønsker å ha referansespenning 5V, bør REFS0 settes ved tabellen.
GUL (ADFR): Denne biten må være satt for at ADC skal kjøre kontinuerlig (friløpsmodus).
PINK (MUX0-MUX3): Disse fire bitene er for å fortelle inngangskanalen. Siden vi skal bruke ADC0 eller PIN0, trenger vi ikke å sette noen biter som ved tabellen.
BRUN (ADPS0-ADPS2): disse tre bitene er for å sette prescalar for ADC. Siden vi bruker en prescalar på 2, må vi sette en bit.
MØRK GRØNN (ADSC): denne biten er satt for at ADC skal starte konvertering. Denne biten kan deaktiveres i programmet når vi trenger å stoppe konverteringen.