I denne vejledning skal vi interface FLEX-sensor med ATMEGA8 mikrocontroller. I ATMEGA8 skal vi bruge 10bit ADC (analog til digital konvertering) -funktion til at udføre dette job. Nu kan ADC i ATMEGA ikke tage en input mere end + 5V.
Hvad er en Flex Sensor?
En FLEX-sensor er en transducer, der ændrer dens modstand, når dens form ændres. Det er vist i nedenstående figur.
Denne sensor bruges til at registrere ændringer i linearitet. Så når FLEX-sensoren er bøjet, bøjes modstanden drastisk. Dette er vist i nedenstående figur.
Nu til konvertering af denne ændring i modstand mod spændingsændring skal vi bruge et spændingsdelerkredsløb. I dette resistive netværk har vi en konstant modstand og anden variabel modstand. Som vist i nedenstående figur er R1 her en konstant modstand, og R2 er FLEX-sensor, der fungerer som en modstand. Grænsens midtpunkt føres til måling. Når modstand R2 ændres, ændres Vout lineært med den. Så med dette har vi en spænding, der ændres med linearitet.
Nu er det vigtigt at bemærke her, at inputet fra controlleren til ADC-konvertering er så lavt som 50 µAmp. Denne belastningseffekt af modstandsbaseret spændingsdeler er vigtig, da strømmen trukket fra Vout af spændingsdeler øger fejlprocenten, for nu behøver vi ikke bekymre os om belastningseffekt.
Vi tager to modstande og danner et skillekredsløb, så for en 25 volt Vin får vi en 5 volt volt. Så alt hvad vi skal gøre er at gange Vout-værdien med "5" i programmet for at få den reelle indgangsspænding.
Komponenter, der kræves
HARDWARE: ATMEGA8, strømforsyning (5v), AVR-ISP-PROGRAMMER, JHD_162ALCD (16x2LCD), 100uF kondensator, 100nF kondensator (5 stykker), 100KΩ modstand.
SOFTWARE: Atmel studio 6.1, progisp eller flash-magi.
Kredsløbsdiagram og arbejdsforklaring
I kredsløbet er PORTD på ATMEGA8 forbundet til dataport LCD. I 16x2 LCD er der overalt 16 ben, hvis der er baggrundslys, hvis der ikke er baggrundslys, vil der være 14 ben. Man kan tænde eller lade bagbelysningsstifterne stå. Nu i de 14 stifter er der 8 data stifter (7-14 eller D0-D7), 2 Strømforsyning stifter (1 & 2 eller VSS & VDD eller gnd & + 5V), 3 rd pin for kontraststyring (VEE-styringer, hvor tyk tegnene bør være vist) og 3 kontrolben (RS & RW & E).
I kredsløbet kan du se, at jeg kun har taget to kontrolben. Kontrastbit og LÆS / SKRIV bruges ikke ofte, så de kan kortsluttes til jorden. Dette sætter LCD i højeste kontrast og læsetilstand. Vi skal bare kontrollere ENABLE og RS-ben for at sende tegn og data i overensstemmelse hermed.
LCD-forbindelserne med ATmega8 er som følger:
PIN1 eller VSS til jorden
PIN2 eller VDD eller VCC til + 5v strøm
PIN3 eller VEE til jorden (giver maksimal kontrast bedst for en nybegynder)
PIN4 eller RS (Registrer valg) til PB0 i uC
PIN5 eller RW (læse / skrive) til jorden (sætter LCD i læsefunktion letter kommunikationen for brugeren)
PIN6 eller E (Aktiver) til PB1 i uC
PIN7 eller D0 til PD0 for uC
PIN8 eller D1 til PD1 i uC
PIN9 eller D2 til PD2 i uC
PIN10 eller D3 til PD3 i uC
PIN11 eller D4 til D4 af uC
PIN12 eller D5 til PD5 i uC
PIN13 eller D6 til PD6 i uC
PIN14 eller D7 til PD7 i uC
I kredsløbet kan du se, at vi har brugt 8bit kommunikation (D0-D7) men dette er ikke obligatorisk, vi kan bruge 4bit kommunikation (D4-D7) men med 4 bit kommunikationsprogram bliver lidt komplekst, så vi gik bare med 8 bit meddelelse. (Se også denne vejledning: 16x2 LCD-interface med AVR-mikrocontroller)
Så fra blot observation fra ovenstående tabel forbinder vi 10 ben på LCD til controller, hvor 8 ben er datapinde og 2 ben er til kontrol.
Spændingen over R2 er ikke helt lineær; det vil være støjende. For at filtrere ud er støjkondensatorerne placeret over hver modstand i delerkredsløbet som vist i figuren.
1K potten her er til at justere nøjagtigheden af ADC. Lad os nu diskutere 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.
FLEX-sensor-interface med ATmega8 forklares trin for trin i C-koden nedenfor.