- Nødvendige komponenter og hardwareopsætning
- Nuvoton N76E003 kredsløbsdiagram til aflæsning af analog spænding
- Oplysninger om GPIO og analoge pins i N76E003
- Oplysninger om ADC Peripheral i N76E003
- Programmering N76E003 til ADC
- Blinker koden og output
Analog til digital konverter (ADC) er den mest anvendte hardwarefunktion på en mikrocontroller. Den optager analog spænding og konverterer den til en digital værdi. Da mikrocontrollere er digitale enheder og arbejder med det binære ciffer 1 og 0, kunne den ikke behandle de analoge data direkte. Således bruges en ADC til at optage analog spænding og konvertere den til sin ækvivalente digitale værdi, som en mikrocontroller kan forstå. Hvis du ønsker mere om Analog til Digital Converter (ADC), kan du kontrollere den linkede artikel.
Der er forskellige sensorer til rådighed i elektronik, der leverer Analog output, som MQ-gassensorer, ADXL335 Accelerometer-sensor osv. Således, ved hjælp af Analog til Digital-konverter, kan disse sensorer interfaceres med en mikrocontroller-enhed. Du kan også tjekke andre tutorials, der er anført nedenfor, til brug af ADC med andre mikrokontrollere.
- Hvordan bruges ADC i Arduino Uno?
- Interfacing ADC0808 med 8051 Microcontroller
- Brug af ADC-modul fra PIC Microcontroller
- Raspberry Pi ADC vejledning
- Sådan bruges ADC i MSP430G2 - Måling af analog spænding
- Sådan bruges ADC i STM32F103C8
I denne vejledning bruger vi den indbyggede ADC-periferi af N76E003-mikrocontroller- enheden, så lad os evaluere, hvilken type hardwareopsætning, vi har brug for til denne applikation.
Nødvendige komponenter og hardwareopsætning
For at bruge ADC på N76E003 bruger vi en spændingsdeler ved hjælp af et potentiometer og læser spændingen fra 0V til 5,0V. Spændingen vises i 16x2 tegn-LCD, hvis du er ny med LCD og N76E003, kan du kontrollere, hvordan LCD-interface til Nuvoton N76E003 interageres. Således er hovedkomponenten, der kræves til dette projekt, 16x2 Character LCD. Til dette projekt vil vi bruge nedenstående komponenter-
- Karakter LCD 16x2
- 1k modstand
- 50k potentiometer eller trimpot
- Få Berg-ledninger
- Få tilslutningsledninger
- Brødbræt
For ikke at nævne, bortset fra de ovennævnte komponenter, har vi brug for det N76E003 mikrokontroller- baserede udviklingskort såvel som Nu-Link Programmer. En yderligere 5V strømforsyningsenhed er også påkrævet, da LCD'et trækker tilstrækkelig strøm, som programmøren ikke kunne levere.
Nuvoton N76E003 kredsløbsdiagram til aflæsning af analog spænding
Som vi kan se i skemaet, bruges porten P0 til LCD-relateret forbindelse. Yderst til venstre vises forbindelsen til programmeringsgrænsefladen. Potentiometeret fungerer som en spændingsdeler, og det registreres af den analoge indgang 0 (AN0).
Oplysninger om GPIO og analoge pins i N76E003
Nedenstående billede illustrerer de GPIO-ben, der er tilgængelige på N76E003AT20 mikrokontroller-enheden. Imidlertid anvendes ud af de 20 ben, til LCD-relateret forbindelse, Port P0 (P0.0, P0.1, P0.2, P0.4, P0.5, P0.6 og P0.7). De analoge ben er fremhævet i RØDE farver.
Som vi kan se, har Port P0 maksimalt analoge ben, men de bruges til LCD-relateret kommunikation. P3.0 og P1.7 er således tilgængelige som analoge inputstifter AIN1 og AIN0. Da dette projekt kun kræver en analog pin, P1.7, som er Analog input kanal 0, bruges til dette projekt.
Oplysninger om ADC Peripheral i N76E003
N76E003 giver en 12-bit SAR ADC. Det er en meget god funktion ved N76E003, at den har en meget god opløsning på ADC. ADC har 8-kanals indgange i single-end-tilstand. Interfacering af ADC er ret simpelt og ligetil.
Det første trin er at vælge ADC-kanalindgangen. Der er 8-kanals indgange tilgængelige i N76E003 mikrokontrollere. Efter valg af ADC-indgange eller I / O-stifter skal alle stifter indstilles til retningen i koden. Alle stifter, der bruges til den analoge indgang, er indgangsstifter på mikrokontrolleren, og alle stifter skal derfor indstilles til indgangstilstand (højimpedans). Disse kan indstilles ved hjælp af PxM1 og PxM2 registeret. Disse to registre indstiller I / O-tilstande, hvor x står for portnummeret (for eksempel Port P1.0 vil registret være P1M1 og P1M2, for P3.0 vil det være P3M1 og P3M2 osv.) Konfigurationen kan ses i nedenstående billede-
Konfigurationen af ADC udføres af to registre ADCCON0 og ADCCON1. ADCCON0 Registerbeskrivelsen er vist nedenfor.
De første 4 bits i registeret fra bit 0 til bit 3 bruges til at indstille ADC-kanalvalget. Da vi bruger kanalen AIN0, vil valget være 0000 for disse fire bits.
Den 6. og 7. bit er de vigtige. ADCS kræves for at indstille 1 til start af ADC-konvertering, og ADCF vil give oplysninger om den vellykkede ADC-konvertering. Det skal indstilles 0 af firmwaren for at starte ADC-konverteringen. Det næste register er ADCCON1-
ADCCON1-registeret bruges hovedsageligt til ADC-konvertering udløst af eksterne kilder. For normale afstemningsrelaterede operationer kræves imidlertid den første bit ADCEN for at indstille 1 til at tænde ADC-kredsløbet.
Dernæst skal ADC-kanalens indgang styres i AINDIDS- registeret, hvor de digitale indgange kan frakobles.
N står for kanalbit (F.eks. Skal AIN0-kanalen styres ved hjælp af den første bit P17DIDS i AINDIDS- registeret). Den digitale indgang skal aktiveres, ellers læses den som 0. Alt dette er den grundlæggende indstilling af ADC. Nu, når du rydder ADCF'en og indstiller ADCS, kan ADC-konverteringen startes. Den konverterede værdi vil være tilgængelig i nedenstående registre -
Og
Begge registre er 8-bit. Da ADC leverer 12-bit data, bruges ADCRH som fuld (8-bit), og ADCRL bruges som halv (4-bit).
Programmering N76E003 til ADC
Kodning til et specifikt modul hver gang er et hektisk job, så der leveres et simpelt, men kraftfuldt LCD-bibliotek, der vil være meget nyttigt til 16x2 tegn LCD-interface med N76E003. 16x2 LCD-biblioteket er tilgængeligt i vores Github-arkiv, som kan downloades fra nedenstående link.
Download 16x2 LCD-bibliotek til Nuvoton N76E003
Vær venlig at have biblioteket (ved at klone eller downloade) og inkluder bare lcd.c- og LCD.h- filerne i dit Keil N76E003-projekt for nem integration af 16x2 LCD i det ønskede program eller projekt. Biblioteket giver følgende nyttige displayrelaterede funktioner-
- Initialiser LCD'et.
- Send kommando til LCD'et.
- Skriv til LCD'et.
- Sæt en streng i LCD-skærmen (16 tegn).
- Udskriv tegn ved at sende hex-værdi.
- Rul lange beskeder med mere end 16 tegn.
- Udskriv heltal direkte i LCD'et.
Kodningen til ADC er enkel. I opsætningsfunktionen Enable_ADC_AIN0; bruges til opsætning af ADC til AIN0- indgang. Dette er defineret i filen.
#define Enable_ADC_AIN0 ADCCON0 & = 0xF0; P17_Input_Mode; AINDIDS = 0x00; AINDIDS- = SET_BIT0; ADCCON1- = SET_BIT0 // P17
Så ovenstående linje indstiller stiften som en input og konfigurerer ADCCON0, ADCCON1- registeret såvel som AINDIDS- registeret også. Funktionen nedenfor vil læse ADC fra ADCRH og ADCRL- registret, men med 12-bit opløsning.
usigneret int ADC_read (ugyldigt) { register unsigned int adc_value = 0x0000; clr_ADCF; sæt_ADCS; mens (ADCF == 0); adc_value = ADCRH; adc_value << = 4; adc_value - = ADCRL; returner adc_value; }
Biten venstreforskydes 4 gange og føjes derefter til datavariablen. I hovedfunktionen læser ADC dataene og bliver udskrevet direkte på skærmen. Imidlertid konverteres spændingen også ved hjælp af et forhold eller forholdet mellem spænding divideret med bitværdien.
En 12-bit ADC giver 4095 bit på 5.0V input. Deling af 5.0V / 4095 = 0.0012210012210012V
Så, 1 cifre af bitændringer vil være lig med ændringerne i 0,001V (ca.). Dette gøres i hovedfunktionen vist nedenfor.
ugyldigt hoved (ugyldigt) { int adc_data; Opsætning(); lcd_com (0x01); mens (1) { lcd_com (0x01); lcd_com (0x80); lcd_puts ("ADC Data:"); adc_data = ADC_read (); lcd_print_number (adc_data); spænding = 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 bitværdi til spænding, og ved hjælp af en sprintf- funktion konverteres output til en streng og sendes til LCD'et.
Blinker koden og output
Koden returnerede 0 advarsel og 0 fejl og blev blinket ved hjælp af standardblinkmetoden af Keil, du kan se den blinkende besked nedenfor. Hvis du er ny hos Keil eller Nuvoton, skal du tjekke at komme i gang med Nuvoton-mikrocontroller for at forstå det grundlæggende og hvordan du uploader koden.
Genopbygningen startede: Projekt: timer Genopbyg mål 'Target 1', der samler STARTUP.A51… kompilering af main.c… kompilering af lcd.c… kompilering af Delay.c… sammenkædning… Programstørrelse: data = 101.3 xdata = 0 code = 4162 opretter hex-fil fra ". \ Objects \ timer"… ". \ Objects \ timer" - 0 Fejl, 0 Advarsel. Forløbet byggetid: 00:00:02 Indlæs "G: \\ n76E003 \\ Display \\ Objekter \\ timer" Flash Slet udført. Flash-skrivning udført: 4162 byte programmeret. Flash-bekræftelse udført: 4162 bytes verificeret. Flashbelastning afsluttet kl. 11:56:04
Billedet nedenfor viser den hardware, der er tilsluttet strømkilden ved hjælp af en DC-adapter, og displayet viser den spændingsoutput, der er indstillet af potentiometeret til højre.
Hvis vi drejer potentiometeret, ændres spændingen til ADC-stiften også, og vi kan bemærke ADC-værdien og den analoge spænding, der vises på LCD'et. Du kan tjekke videoen nedenfor for den komplette arbejdsdemonstration af denne vejledning.
Håber du nød artiklen og lærte noget nyttigt, hvis du har spørgsmål, skal du lade dem være i kommentarfeltet nedenfor, eller du kan bruge vores fora til at sende andre tekniske spørgsmål.