I denne vejledning skal vi interface et joystick-modul med atmega8 mikrocontroller. EN JOY STICK er et input-modul, der bruges til kommunikation. Det gør dybest set let brugerens maskinkommunikation. Et joystick er vist i nedenstående figur.
Joystickmodulet har to akser - den ene er vandret og den anden er lodret. Hver akse af joystick er monteret på et potentiometer eller pot eller variabel modstand. Midtpunkterne bringes ned som Rx og Ry. Disse stifter bærer som udgangssignalstifter til JOYSTICK. Når pinden bevæges langs vandret akse, med forsyningsspændingen til stede, ændres spændingen ved Rx-stift.
Spændingen ved Rx stiger, når den flyttes fremad, spændingen ved Rx-stiften falder, når den flyttes bagud. Tilsvarende øges spændingen ved Ry, når den flyttes opad, spændingen ved Ry-stiften falder, når den flyttes nedad.
Så vi har fire retninger af JOYSTICK på to ADC-kanaler. I normale tilfælde har vi 1Volt på hver pin under normale omstændigheder. Når pinden flyttes, går spændingen på hver stift høj eller lav afhængigt af retning. Så fire retninger som (0V, 5V på kanal 0) for x-aksen; (0V, 5V på kanal 1) for y-aksen.
Vi skal bruge to ADC-kanaler i ATMEGA8 til at udføre jobbet. Vi skal bruge kanal 0 og kanal 1.
Komponenter, der kræves
Hardware: ATMEGA8, strømforsyning (5v), AVR-ISP-PROGRAMMER, LED (4 stk.), 1000uF kondensator, 100nF kondensator (5 stykker), 1KΩ modstand (6 stk.).
Software: Atmel studio 6.1, progisp eller flash-magi.
Kredsløbsdiagram og arbejdsforklaring
Spændingen over JOYSTICK er ikke helt lineær; det vil være støjende. For at filtrere støjen placeres der kondensatorer på tværs af hver modstand i kredsløbet som vist i figuren.
Som vist i figuren er der fire lysdioder i kredsløbet. Hver LED repræsenterer hver retning af JOYSTICK. Når pinden bevæges i en retning, lyser den tilsvarende LED.
Før vi går videre, skal vi tale om ADC af ATMEGA8, I ATMEGA8 kan vi give analogt input til en af de fire kanaler i PORTC, det betyder ikke noget, hvilken kanal vi vælger, da alle er ens, vi vælger kanal 0 eller PIN0 for PORTC.
I ATMEGA8 har ADC 10 bit opløsning, så controlleren kan registrere en fornemmelse af en minimal ændring af Vref / 2 ^ 10, så hvis referencespændingen er 5V, får vi en digital udgangsstigning for hver 5/2 ^ 10 = 5mV. Så for hver 5 mV forøgelse i indgangen vil vi have en forøgelse på en ved digital udgang.
Nu er vi nødt til at indstille registeret over ADC baseret på følgende vilkår, 1. Først og fremmest skal vi aktivere ADC-funktionen i ADC.
2. Her får du en maksimal indgangsspænding til ADC-konvertering er + 5V. Så vi kan indstille maksimal værdi eller reference for ADC til 5V.
3. Controlleren har en triggerkonverteringsfunktion, der betyder, at ADC-konvertering kun finder sted efter en ekstern trigger, da vi ikke ønsker, at vi skal indstille registre for, at ADC skal køre i kontinuerlig fri kørselstilstand.
4. For enhver ADC er konverteringsfrekvensen (analog værdi til digital værdi) og nøjagtigheden af det digitale output omvendt proportional. Så for bedre nøjagtighed af digital output skal vi vælge mindre frekvens. For normalt ADC-ur indstiller vi forsalget på ADC til maksimumsværdien (2). Da vi bruger det interne ur på 1MHZ, vil uret til ADC være (1000000/2).
Dette er de eneste fire ting, vi har brug for at vide for at komme i gang med ADC.
Alle de ovennævnte fire funktioner er indstillet af to registre:
RØD (ADEN): Denne bit skal indstilles for at aktivere ADC-funktionen i ATMEGA.
BLÅ (REFS1, REFS0): Disse to bits bruges til at indstille referencespændingen (eller den maksimale indgangsspænding, vi skal give). Da vi ønsker at have referencespænding 5V, skal REFS0 indstilles ved bordet.
GUL (ADFR): Denne bit skal indstilles for at ADC'en skal køre kontinuerligt (frit kørselstilstand).
PINK (MUX0-MUX3): Disse fire bits er til at fortælle inputkanalen. Da vi skal bruge ADC0 eller PIN0, behøver vi ikke indstille bits som ved bordet.
BRUN (ADPS0-ADPS2): disse tre bits er til indstilling af prescalar for ADC. Da vi bruger en prescalar på 2, skal vi indstille en bit.
MØRK GRØN (ADSC): dette bit sæt til ADC'en til at starte konvertering. Denne bit kan deaktiveres i programmet, når vi skal stoppe konverteringen.