I denne opplæringen skal vi grensesnitt FLEX sensor med ATMEGA8 mikrokontroller. I ATMEGA8 skal vi bruke 10bit ADC (Analog til Digital Conversion) -funksjon for å gjøre denne jobben. Nå kan ikke ADC i ATMEGA ta mer enn + 5V.
Hva er en Flex Sensor?
En FLEX-sensor er en svinger som endrer motstand når formen endres. Det er vist i figuren nedenfor.
Denne sensoren brukes til å fornemme endringene i linearitet. Så når FLEX-sensoren er bøyd, bøyes motstanden drastisk. Dette er vist i figuren nedenfor.
Nå for å konvertere denne endringen i motstand mot spenningsendring, skal vi bruke en spenningsdelerkrets. I dette resistive nettverket har vi en konstant motstand og annen variabel motstand. Som vist i figuren nedenfor, er R1 her en konstant motstand og R2 er FLEX-sensor som fungerer som en motstand. Grensens midtpunkt blir tatt til måling. Når motstand R2 endres, endres Vout med det lineært. Så med dette har vi en spenning som endres med linearitet.
Nå er det viktig å merke seg at inngangen som er tatt av kontrolleren for ADC-konvertering er så lav som 50 µAmp. Denne belastningseffekten av motstandsbasert spenningsdeler er viktig da strømmen hentet fra Vout av spenningsdeleren øker feilprosenten, for nå trenger vi ikke bekymre oss for belastningseffekt.
Vi skal ta to motstander og danne en delerkrets slik at vi for en 25 Volt Vin får en 5 Volt Volt. Så alt vi trenger å gjøre er å multiplisere Vout-verdien med "5" i programmet for å få den virkelige inngangsspenningen.
Komponenter kreves
HARDWARE: ATMEGA8, strømforsyning (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), 100uF kondensator, 100nF kondensator (5 stk), 100KΩ motstand.
PROGRAMVARE: Atmel studio 6.1, progisp eller flash magi.
Kretsdiagram og arbeidsforklaring
I kretsen er PORTD på ATMEGA8 koblet til dataport LCD. I 16x2 LCD er det 16 pinner overalt hvis det er baklys, hvis det ikke er noe bakgrunnslys, vil det være 14 pinner. Man kan drive eller la baklyspinnene ligge. Nå i de 14 pinnene er det 8 datapinner (7-14 eller D0-D7), 2 strømforsyningspinner (1 & 2 eller VSS & VDD eller GND & + 5V), 3. pin for kontrastkontroll (VEE-styrer hvor tykke tegnene skal være vist) og 3 kontrollpinner (RS & RW & E).
I kretsen kan du observere at jeg bare har tatt to kontrollpinner. Kontrastbiten og LES / SKRIV brukes ikke ofte slik at de kan kortsluttes til bakken. Dette setter LCD i høyest kontrast og lesemodus. Vi trenger bare å kontrollere ENABLE- og RS-pinner for å sende tegn og data tilsvarende.
LCD-tilkoblingene med ATmega8 er som følger:
PIN1 eller VSS til bakken
PIN2 eller VDD eller VCC til + 5v strøm
PIN3 eller VEE til bakken (gir maksimal kontrast best for en nybegynner)
PIN4 eller RS (Register Selection) til PB0 på uC
PIN5 eller RW (lese / skrive) til bakken (setter LCD i lesemodus forenkler kommunikasjonen for brukeren)
PIN6 eller E (Aktiver) til PB1 i uC
PIN7 eller D0 til PD0 på uC
PIN8 eller D1 til PD1 i uC
PIN9 eller D2 til PD2 på uC
PIN10 eller D3 til PD3 i uC
PIN11 eller D4 til D4 av uC
PIN12 eller D5 til PD5 i uC
PIN13 eller D6 til PD6 i uC
PIN14 eller D7 til PD7 i uC
I kretsen kan du se at vi har brukt 8bit kommunikasjon (D0-D7) men dette er ikke obligatorisk, vi kan bruke 4bit kommunikasjon (D4-D7) men med 4 bit kommunikasjonsprogram blir litt komplisert så vi gikk bare med 8 bit kommunikasjon. (Sjekk også denne opplæringen: 16x2 LCD-grensesnitt med AVR-mikrokontroller)
Så fra bare observasjon fra tabellen ovenfor kobler vi 10 pinner LCD til kontrolleren der 8 pinner er datapinner og 2 pinner er for kontroll.
Spenningen over R2 er ikke helt lineær; det vil være bråkete. For å filtrere ut er støykondensatorene plassert over hver motstand i delerkretsen som vist på figuren.
1K-potten her er for å justere nøyaktigheten til ADC. La oss nå diskutere 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.
FLEX-sensorgrensesnitt med ATmega8 forklares trinn for trinn i C-koden gitt nedenfor.