I dette projekt skal vi interface LDR med ATMEGA8 mikrocontroller, og med dette kan vi måle LYSINTENSITET i området. I ATMEGA8 skal vi bruge 10bit ADC (analog til digital konvertering) -funktion til at måle lysintensiteten.
Am LDR er en transducer, der ændrer modstand, når LYS falder på overfladens ændringer. LDR-sensor fås i forskellige størrelser og former.
LDR'er er lavet af halvledermaterialer for at gøre det muligt for dem at have deres lysfølsomme egenskaber. Der er mange typer anvendte materialer, men den ene er populær er CADMIUM SULPHIDE (CdS). Disse LDR'er eller FOTOREISTORS arbejder på princippet om " Fotokonduktivitet ". Hvad dette princip siger, er, når lys falder på overfladen af LDR (i dette tilfælde) ledningsevnen af elementet stiger, eller med andre ord, modstanden af LDR falder, når lyset falder på overfladen af LDR. Denne egenskab ved faldet i modstand for LDR opnås, fordi det er en egenskab af halvledermateriale anvendt på overfladen. LDR bruges oftest til at detektere tilstedeværelse af lys eller til måling af lysintensiteten.
Der er forskellige typer LDR som vist i ovenstående figur, og hver har forskellige specifikationer. Typisk vil en LDR have 1MΩ-2MΩ ved total mørke, 10-20KΩ ved 10 LUX, 2-5KΩ ved 100 LUX. Den typiske modstandsdygtighed over for LUX-graf for en LDR er vist i figuren.
Som vist i ovenstående figur falder modstanden mellem sensorens to kontakter med lysintensitet, eller konduktansen mellem to sensorkontakter øges.
Nu for at konvertere denne ændring i modstand mod spændingsændring skal vi bruge spændingsdelerkredsløb. I dette resistive netværk har vi en konstant modstand og anden variabel modstand. Som vist i figur er R1 her en konstant modstand, og R2 er FORCE-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 vægten.
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.
Hvad vi skal gøre her, er, at vi tager to modstande og danner et skillekredsløb, så vi får en 5 volt Vout for en 25 volt Vin. 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
Hardware: ATMEGA8, strømforsyning (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16 * 2LCD), 100uF kondensator, 100nF kondensator (5 stykker), 10KΩ modstand, LDR (lysafhængig modstand).
Sofware: Atmel studio 6.1, progisp eller flash-magi.
Kredsløbsdiagram og arbejdsforklaring
I kredsløb er PORTD på ATMEGA8 forbundet til dataport LCD. I 16 * 2 LCD er der overalt 16 ben, hvis der er baggrundslys, hvis der ikke er noget 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.
De tilslutninger til LCD er angivet nedenfor:
PIN1 eller VSS ------------------ jord
PIN2 eller VDD eller VCC ------------ + 5v strøm
PIN3 eller VEE --------------- jorden (giver maksimal kontrast bedst for en nybegynder)
PIN4 eller RS (Registreringsvalg) --------------- PB0 for uC
PIN5 eller RW (læse / skrive) ----------------- jord (sætter LCD i læsetilstand letter kommunikationen for brugeren)
PIN6 eller E (Enable) ------------------- PB1 for uC
PIN7 eller D0 ----------------------------- PD0 for uC
PIN8 eller D1 ---------------------------- PD1 for uC
PIN9 eller D2 ---------------------------- PD2 for uC
PIN10 eller D3 ---------------------------- PD3 for uC
PIN11 eller D4 ---------------------------- PD4 for uC
PIN12 eller D5 ---------------------------- PD5 for uC
PIN13 eller D6 ---------------------------- PD6 af uC
PIN14 eller D7 ----------------------------- PD7 af 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 det lidt komplekst. Så fra blot observation fra ovenstående tabel forbinder vi 10 ben på LCD til controller, hvor 8 ben er datapinde og 2 ben 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.
I ATMEGA8 kan vi give analogt input til en af de fire PORTC-kanaler, 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 minimumæ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 skal vi 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.
Så med modstand fra LDR på 16x2 LCD-skærmen kan vi matche det med LUX-graf for at få lysintensiteten.