- Componente necesare și configurare hardware
- Diagrama circuitului Nuvoton N76E003 pentru citirea tensiunii analogice
- Informații despre GPIO și pini analogici în N76E003
- Informații despre perifericul ADC în N76E003
- Programare N76E003 pentru ADC
- Clipește codul și ieșirea
Convertorul analog la digital (ADC) este cea mai utilizată caracteristică hardware a unui microcontroler. Acesta preia tensiune analogică și o transformă într-o valoare digitală. Deoarece microcontrolerele sunt dispozitive digitale și funcționează cu cifrele binare 1 și 0, nu ar putea procesa direct datele analogice. Astfel, un ADC este utilizat pentru a prelua tensiunea analogică și a o converti în valoarea sa digitală echivalentă pe care un microcontroler o poate înțelege. Dacă doriți mai multe despre convertorul analog la digital (ADC), puteți verifica articolul legat.
Există diferiți senzori disponibili în electronică care oferă ieșire analogică, cum ar fi senzorii de gaz MQ, senzorul accelerometrului ADXL335 etc. Astfel, utilizând convertorul analogic la digital, acei senzori pot fi interfațați cu o unitate de microcontroler. De asemenea, puteți consulta alte tutoriale enumerate mai jos, pentru utilizarea ADC cu alte microcontrolere.
- Cum se utilizează ADC în Arduino Uno?
- Interfațarea ADC0808 cu microcontrolerul 8051
- Utilizarea modulului ADC al microcontrolerului PIC
- Tutorial ADC Raspberry Pi
- Cum se utilizează ADC în MSP430G2 - Măsurarea tensiunii analogice
- Cum se utilizează ADC în STM32F103C8
În acest tutorial, vom utiliza perifericul ADC încorporat al unității de microcontroler N76E003, așa că haideți să evaluăm ce fel de configurare hardware avem nevoie pentru această aplicație.
Componente necesare și configurare hardware
Pentru a utiliza ADC pe N76E003, vom folosi un divizor de tensiune folosind un potențiometru și vom citi tensiunea variind de la 0V-5.0V. Tensiunea va fi afișată pe ecranul LCD de 16x2 caractere, dacă sunteți nou cu LCD și N76E003, puteți verifica modul de interfață LCD cu Nuvoton N76E003. Astfel, componenta majoră care este necesară pentru acest proiect este LCD de 16x2 caractere. Pentru acest proiect, vom folosi componentele de mai jos-
- Caracter LCD 16x2
- 1k rezistor
- Potențiometru 50k sau oală de tăiere
- Puține fire Berg
- Câteva fire de conectare
- Breadboard
Ca să nu mai vorbim, în afară de componentele de mai sus, avem nevoie de placa de dezvoltare bazată pe microcontroler N76E003, precum și de programatorul Nu-Link. Este necesară, de asemenea, o unitate de alimentare suplimentară de 5V, deoarece ecranul LCD atrage un curent suficient pe care programatorul nu l-ar putea furniza.
Diagrama circuitului Nuvoton N76E003 pentru citirea tensiunii analogice
După cum putem vedea în schemă, portul P0 este utilizat pentru conexiunea LCD. În extrema stângă, este afișată conexiunea interfeței de programare. Potențiometrul acționează ca un divizor de tensiune și este detectat de intrarea analogică 0 (AN0).
Informații despre GPIO și pini analogici în N76E003
Imaginea de mai jos ilustrează pinii GPIO disponibili pe unitatea de microcontroler N76E003AT20. Cu toate acestea, din cei 20 de pini, pentru conexiunea LCD, se utilizează portul P0 (P0.0, P0.1, P0.2, P0.4, P0.5, P0.6 și P0.7). Pinii analogici sunt evidențiați în culori roșii.
După cum putem vedea, portul P0 are pini analogici maximi, dar aceștia sunt utilizați pentru comunicarea LCD. Astfel, P3.0 și P1.7 sunt disponibile ca pinii de intrare analogici AIN1 și AIN0. Deoarece acest proiect necesită un singur pin analogic, P1.7, care este canalul de intrare analogic 0, este utilizat pentru acest proiect.
Informații despre perifericul ADC în N76E003
N76E003 oferă un ADC SAR pe 12 biți. Este o caracteristică foarte bună a N76E003 că are o rezoluție foarte bună de ADC. ADC are intrări cu 8 canale în modul single-end. Interfața ADC este destul de simplă și simplă.
Primul pas este selectarea intrării canalului ADC. Există intrări cu 8 canale disponibile în microcontrolerele N76E003. După selectarea intrărilor ADC sau a pinilor I / O, toți pinii trebuie să fie setați pentru direcția din cod. Toți pinii utilizați pentru intrarea analogică sunt pinii de intrare ai microcontrolerului, astfel încât toți pinii trebuie să fie setați doar ca mod de intrare (cu impedanță ridicată). Acestea pot fi setate folosind registrul PxM1 și PxM2. Aceste două registre stabilesc modurile I / O în care x reprezintă numărul portului (de exemplu, portul P1.0 registrul va fi P1M1 și P1M2, pentru P3.0 va fi P3M1 și P3M2 etc.) să fie văzut în imaginea de mai jos-
Configurarea ADC se face prin două registre ADCCON0 și ADCCON1. Descrierea registrului ADCCON0 este prezentată mai jos.
Primii 4 biți ai registrului de la bitul 0 la bitul 3 sunt utilizați pentru a seta selecția canalului ADC. Deoarece utilizăm canalul AIN0, selecția va fi 0000 pentru acești patru biți.
Al 6-lea și al 7-lea bit sunt cei importanți. ADCS este necesar pentru a seta 1 pentru pornirea conversiei ADC și ADCF va furniza informații despre conversia ADC reușită. Trebuie setat 0 de firmware pentru a începe conversia ADC. Următorul registru este ADCCON1-
Registrul ADCCON1 este utilizat în principal pentru conversia ADC declanșată de surse externe. Cu toate acestea, pentru operații normale legate de sondare, ADCEN pe primul bit este necesar pentru a seta 1 pentru pornirea circuitelor ADC.
Apoi, intrarea canalului ADC trebuie controlată în registrul AINDIDS unde intrările digitale pot fi deconectate.
N reprezintă bitul de canal (De exemplu, canalul AIN0 va trebui controlat folosind primul bit P17DIDS din registrul AINDIDS). Intrarea digitală trebuie activată, în caz contrar, se va citi ca 0. Toate acestea sunt setările de bază ale ADC. Acum, ștergerea ADCF și setarea ADCS poate începe conversia ADC. Valoarea convertită va fi disponibilă în registrele de mai jos-
Și
Ambele registre sunt de 8 biți. Deoarece ADC oferă date pe 12 biți, ADCRH este utilizat ca complet (8 biți) și ADCRL este folosit ca jumătate (4 biți).
Programare N76E003 pentru ADC
Codificarea pentru un anumit modul de fiecare dată este o sarcină agitată, astfel este prevăzută o bibliotecă LCD simplă, dar puternică, care va fi foarte utilă pentru interfața LCD de 16x2 caractere cu N76E003. Biblioteca LCD 16x2 este disponibilă în depozitul nostru Github, care poate fi descărcat de pe linkul de mai jos.
Descărcați biblioteca LCD 16x2 pentru Nuvoton N76E003
Vă rugăm să aveți biblioteca (prin clonare sau descărcare) și includeți doar fișierele lcd.c și LCD.h în proiectul dvs. Keil N76E003 pentru integrarea ușoară a ecranului LCD 16x2 în aplicația sau proiectul dorit. Biblioteca va furniza următoarele funcții utile legate de afișare:
- Inițializați ecranul LCD.
- Trimiteți comanda pe ecranul LCD.
- Scrieți pe ecranul LCD.
- Puneți un șir în ecranul LCD (16 caractere).
- Imprimați caracterul prin trimiterea unei valori hex.
- Derulați mesaje lungi cu mai mult de 16 caractere.
- Imprimați numere întregi direct pe ecranul LCD.
Codificarea pentru ADC este simplă. În funcția de configurare Enable_ADC_AIN0; este utilizat pentru configurarea ADC pentru intrarea AIN0 . Aceasta este definită în fișier.
#define Enable_ADC_AIN0 ADCCON0 & = 0xF0; P17_Input_Mode; AINDIDS = 0x00; AINDIDS- = SET_BIT0; ADCCON1- = SET_BIT0 // P17
Deci, linia de mai sus setează pinul ca intrare și configurează registrul ADCCON0, ADCCON1 , precum și registrul AINDIDS . Funcția de mai jos va citi ADC din registrele ADCRH și ADCRL, dar cu rezoluție de 12 biți.
unsigned int ADC_read (nul) { register unsigned int adc_value = 0x0000; clr_ADCF; set_ADCS; while (ADCF == 0); adc_value = ADCRH; adc_value << = 4; adc_value - = ADCRL; returnează adc_value; }
Bitul este deplasat la stânga de 4 ori și apoi adăugat la variabila de date. În funcția principală, ADC citește datele și se imprimă direct pe afișaj. Cu toate acestea, tensiunea este convertită și utilizând un raport sau relația dintre tensiune împărțită la valoarea bitului.
Un ADC pe 12 biți va oferi 4095 biți pe intrarea de 5.0V. Împărțind astfel 5.0V / 4095 = 0.0012210012210012V
Deci, o cifră a modificărilor de biți va fi egală cu modificările de 0,001 V (aproximativ). Acest lucru se face în funcția principală prezentată mai jos.
void main (void) { int adc_data; înființat(); lcd_com (0x01); while (1) { lcd_com (0x01); lcd_com (0x80); lcd_puts ("Date ADC:"); adc_data = ADC_read (); lcd_print_number (adc_data); voltage = adc_data * bit_to_voltage_ratio; sprintf (str_voltage, "Volt:% 0.2fV", tensiune); lcd_com (0xC0); lcd_puts (str_voltage); Timer0_Delay1ms (500); } }
Datele sunt convertite de la valoarea bitului la tensiune și folosind o funcție sprintf , ieșirea este convertită într-un șir și trimisă la LCD.
Clipește codul și ieșirea
Codul a returnat 0 avertisment și 0 erori și a fost intermitent folosind metoda intermitentă implicită de Keil, puteți vedea mesajul intermitent de mai jos. Dacă sunteți nou în Keil sau Nuvoton, verificați noțiunile de bază cu microcontrolerul Nuvoton pentru a înțelege elementele de bază și cum să încărcați codul.
Reconstruirea a început: Proiect: timer Reconstruiți ținta „Ținta 1” asamblând STARTUP.A51… compilând main.c… compilând lcd.c… compilând Delay.c… conectând… Dimensiunea programului: date = 101.3 xdata = 0 cod = 4162 crearea fișierului hex din ". \ Objects \ timer"… ". \ Objects \ timer" - 0 Eroare, 0 Avertisment (e). Timpul de construire scurs: 00:00:02 Încărcați „G: \\ n76E003 \\ Afișare \\ Obiecte \\ cronometru” Ștergere flash Efectuat. Scriere flash realizată: 4162 octeți programați. Bliț verificat finalizat: 4162 octeți verificați. Flash Load s-a terminat la 11:56:04
Imaginea de mai jos prezintă hardware-ul conectat la sursa de alimentare utilizând un adaptor DC și afișajul arată tensiunea de ieșire setată de potențiometrul din dreapta.
Dacă rotim potențiometrul, se va schimba și tensiunea dată pinului ADC și putem observa valoarea ADC și tensiunea analogică afișate pe LCD. Puteți consulta videoclipul de mai jos pentru demonstrația completă de lucru a acestui tutorial.
Sper că ți-a plăcut articolul și ai învățat ceva util, dacă ai întrebări, lasă-le în secțiunea de comentarii de mai jos sau poți folosi forumurile noastre pentru a posta alte întrebări tehnice.