- Nødvendige komponenter og maskinvareoppsett
- Nuvoton N76E003 kretsdiagram for å lese analog spenning
- Informasjon om GPIO og analoge pins i N76E003
- Informasjon om ADC Peripheral i N76E003
- Programmering N76E003 for ADC
- Blinker koden og utdataene
Analog til digital omformer (ADC) er den mest brukte maskinvarefunksjonen på en mikrokontroller. Den tar inn analog spenning og konverterer den til en digital verdi. Siden mikrokontrollere er digitale enheter og fungerer med det binære sifferet 1 og 0, kunne det ikke behandle de analoge dataene direkte. Dermed brukes en ADC til å ta inn analog spenning og konvertere den til sin tilsvarende digitale verdi som en mikrokontroller kan forstå. Hvis du vil ha mer informasjon om Analog to Digital Converter (ADC), kan du sjekke artikkelen som er lenket.
Det er forskjellige sensorer tilgjengelig i elektronikk som gir analog utgang, som MQ-gassensorer, ADXL335 akselerometer-sensor, etc. Ved å bruke Analog til Digital-omformer kan disse sensorene grensesnittes med en mikrokontrollerenhet. Du kan også sjekke ut andre opplæringsprogrammer som er oppført nedenfor, for bruk av ADC med andre mikrokontrollere.
- Hvordan bruke ADC i Arduino Uno?
- Grensesnitt ADC0808 med 8051 mikrokontroller
- Bruker ADC-modulen til PIC Microcontroller
- Raspberry Pi ADC opplæring
- Hvordan bruke ADC i MSP430G2 - Måling av analog spenning
- Hvordan bruke ADC i STM32F103C8
I denne opplæringen vil vi bruke den innebygde ADC-periferien til N76E003-mikrokontrollerenheten, så la oss evaluere hva slags maskinvareoppsett vi trenger for dette programmet.
Nødvendige komponenter og maskinvareoppsett
For å bruke ADC på N76E003 vil vi bruke en spenningsdeler ved hjelp av et potensiometer og lese av spenningen fra 0V til 5,0V. Spenningen vil vises i 16x2 tegn-LCD-skjermen. Hvis du er ny med LCD og N76E003, kan du sjekke hvordan du kobler LCD-skjerm til Nuvoton N76E003. Dermed er hovedkomponenten som kreves for dette prosjektet 16x2 Character LCD. For dette prosjektet vil vi bruke komponentene nedenfor -
- Karakter LCD 16x2
- 1k motstand
- 50k potensiometer eller trimgryte
- Få Berg-ledninger
- Få tilkoblingskabler
- Brettbrett
For ikke å nevne, bortsett fra de ovennevnte komponentene, trenger vi N76E003 mikrokontroller- basert utviklingskort samt Nu-Link Programmer. En ekstra 5V strømforsyningsenhet er også nødvendig da LCD-en trekker tilstrekkelig strøm som programmereren ikke kunne levere.
Nuvoton N76E003 kretsdiagram for å lese analog spenning
Som vi kan se i skjemaet, brukes porten P0 til LCD-relatert tilkobling. Ytterst til venstre vises programmeringsgrensesnittforbindelsen. Potensiometeret fungerer som en spenningsdeler, og det registreres av den analoge inngangen 0 (AN0).
Informasjon om GPIO og analoge pins i N76E003
Bildet nedenfor illustrerer GPIO-pinnene som er tilgjengelige på N76E003AT20 mikrokontrollerenhet. For de LCD-relaterte tilkoblingene brukes imidlertid porten P0 (P0.0, P0.1, P0.2, P0.4, P0.5, P0.6 og P0.7) av de 20 pinnene. De analoge pinnene er uthevet i RØDE farger.
Som vi kan se, har Port P0 maksimalt analoge pinner, men de brukes til LCD-relatert kommunikasjon. Dermed er P3.0 og P1.7 tilgjengelig som analoge inngangspinner AIN1 og AIN0. Ettersom dette prosjektet bare krever en analog pin, P1.7 som er Analog inngangskanal 0, brukes til dette prosjektet.
Informasjon om ADC Peripheral i N76E003
N76E003 gir en 12-bit SAR ADC. Det er en veldig god funksjon av N76E003 at den har en veldig god oppløsning på ADC. ADC har 8-kanals innganger i single-end-modus. Grensesnitt ADC er ganske enkelt og greit.
Det første trinnet er å velge ADC-kanalinngang. Det er 8-kanals innganger tilgjengelig i N76E003 mikrokontrollere. Etter at du har valgt ADC-inngangene eller I / O-pinnene, må alle pinnene stilles inn i retningen i koden. Alle pinnene som brukes til den analoge inngangen, er inngangspinnene til mikrokontrolleren, og derfor må alle pinnene stilles inn som kun inngangsmodus (høyimpedans). Disse kan stilles inn ved hjelp av PxM1 og PxM2-registeret. Disse to registerene setter I / O-modusene der x står for portnummeret (for eksempel port P1.0 vil registeret være P1M1 og P1M2, for P3.0 vil det være P3M1 og P3M2 osv.) Konfigurasjonen kan ses i bildet nedenfor-
Konfigurasjonen av ADC utføres av to register ADCCON0 og ADCCON1. ADCCON0-registerbeskrivelsen er vist nedenfor.
De første 4 bitene i registeret fra bit 0 til bit 3 brukes til å stille inn ADC-kanalvalget. Siden vi bruker kanalen AIN0, vil valget være 0000 for disse fire bitene.
Den 6. og 7. biten er den viktigste. ADCS kreves for å sette 1 for å starte ADC-konverteringen, og ADCF vil gi informasjon om vellykket ADC-konvertering. Det må settes 0 av firmwaren for å starte ADC-konverteringen. Neste register er ADCCON1-
ADCCON1-registeret brukes hovedsakelig til ADC-konvertering utløst av eksterne kilder. Imidlertid, for normale avstemningsrelaterte operasjoner, kreves den første biten ADCEN å sette 1 for å slå på ADC-kretsene.
Deretter må ADC-kanalens inngang styres i AINDIDS- registeret der de digitale inngangene kan kobles fra.
N står for kanalbit (For eksempel må AIN0-kanalen styres ved hjelp av den første biten P17DIDS i AINDIDS- registeret). Den digitale inngangen må aktiveres, ellers vil den lese som 0. Alt dette er den grunnleggende innstillingen for ADC. Nå, når du tømmer ADCF og stiller inn ADCS, kan ADC-konverteringen startes. Den konverterte verdien vil være tilgjengelig i registrene nedenfor -
Og
Begge registerene er 8-bits. Siden ADC gir 12-bits data, brukes ADCRH som full (8-bits) og ADCRL brukes som halv (4-bits).
Programmering N76E003 for ADC
Koding for en bestemt modul hver gang er en hektisk jobb, og det er derfor tilgjengelig et enkelt, men kraftig LCD-bibliotek som vil være veldig nyttig for 16x2 tegn LCD-grensesnitt med N76E003. 16x2 LCD-biblioteket er tilgjengelig i Github-arkivet vårt, som kan lastes ned fra lenken nedenfor.
Last ned 16x2 LCD-bibliotek for Nuvoton N76E003
Vennligst ha biblioteket (ved å klone eller laste ned) og bare ta med lcd.c- og LCD.h- filene i Keil N76E003-prosjektet for enkel integrering av 16x2 LCD i ønsket program eller prosjekt. Biblioteket vil tilby følgende nyttige displayrelaterte funksjoner-
- Initialiser LCD-skjermen.
- Send kommando til LCD-skjermen.
- Skriv til LCD-skjermen.
- Sett en streng i LCD-skjermen (16 tegn).
- Skriv ut tegnet ved å sende hexverdien.
- Bla lange meldinger med mer enn 16 tegn.
- Skriv ut heltall direkte i LCD-skjermen.
Kodingen for ADC er enkel. I oppsettfunksjonen Enable_ADC_AIN0; brukes til å sette opp ADC for AIN0- inngang. Dette er definert i filen.
#define Enable_ADC_AIN0 ADCCON0 & = 0xF0; P17_Input_Mode; AINDIDS = 0x00; AINDIDS- = SET_BIT0; ADCCON1- = SET_BIT0 // P17
Så, linjen ovenfor setter pinnen som en inngang og konfigurerer ADCCON0, ADCCON1- registeret, så vel som AINDIDS- registeret også. Funksjonen nedenfor vil lese ADC fra ADCRH og ADCRL- registeret, men med 12-biters oppløsning.
usignert int ADC_read (ugyldig) { register usignert int adc_value = 0x0000; clr_ADCF; sett_ADCS; mens (ADCF == 0); adc_value = ADCRH; adc_value << = 4; adc_value - = ADCRL; returner adc_value; }
Biten er venstreforskyvet 4 ganger og legges til i datavariabelen. I hovedfunksjonen leser ADC dataene og blir skrevet ut direkte på skjermen. Imidlertid blir spenningen også konvertert ved hjelp av et forhold eller forholdet mellom spenning delt på bitverdien.
En 12-biters ADC vil gi 4095 bit på 5.0V-inngang. Dermed deles 5.0V / 4095 = 0.0012210012210012V
Så, 1 siffer med bitendringer vil være lik endringene i 0,001V (Omtrent). Dette gjøres i hovedfunksjonen vist nedenfor.
ugyldig hoved (ugyldig) { int adc_data; oppsett (); lcd_com (0x01); mens (1) { lcd_com (0x01); lcd_com (0x80); lcd_puts ("ADC Data:"); adc_data = ADC_read (); lcd_print_number (adc_data); spenning = adc_data * bit_to_voltage_ratio; sprintf (str_voltage, "Volt:% 0.2fV", voltage); lcd_com (0xC0); lcd_puts (str_voltage); Timer0_Delay1ms (500); } }
Dataene konverteres fra bitverdi til spenning, og ved hjelp av en sprintf- funksjon konverteres utgangen til en streng og sendes til LCD-skjermen.
Blinker koden og utdataene
Koden returnerte 0 advarsler og 0 feil og ble blinket ved hjelp av standard blinkemetode av Keil, du kan se den blinkende meldingen nedenfor. Hvis du ikke er kjent med Keil eller Nuvoton, kan du ta en titt på å komme i gang med Nuvoton mikrokontroller for å forstå det grunnleggende og hvordan du laster opp koden.
Ombyggingen startet: Prosjekt: timer Gjenopprett mål 'Target 1' som setter sammen STARTUP.A51… kompilerer main.c… kompilerer lcd.c… kompilerer Delay.c… linking… Programstørrelse: data = 101.3 xdata = 0 code = 4162 oppretter heksefil fra ". \ Objects \ timer"… ". \ Objects \ timer" - 0 Feil (er), 0 Advarsel (er). Bygget tid forløpt: 00:00:02 Last "G: \\ n76E003 \\ Display \\ Objects \\ timer" Flash Erase Done. Flash Skriv ut: 4162 byte programmert. Flash-bekreftelse utført: 4162 byte bekreftet. Flash Load avsluttet kl. 11:56:04
Bildet nedenfor viser maskinvaren som er koblet til strømkilden ved hjelp av en DC-adapter, og skjermen viser spenningsutgangen som er satt av potensiometeret til høyre.
Hvis vi dreier potensiometeret, vil også spenningen som blir gitt til ADC-pinnen endres, og vi kan legge merke til ADC-verdien og den analoge spenningen som vises på LCD-skjermen. Du kan sjekke ut videoen nedenfor for å få en fullstendig demonstrasjon av denne veiledningen.
Håper du likte artikkelen og lærte noe nyttig, hvis du har spørsmål, kan du legge dem i kommentarfeltet nedenfor, eller du kan bruke forumene våre til å legge ut andre tekniske spørsmål.