- Što je ADC?
- ADC u ARM7-LPC2148
- ADC igle u ARM7-LPC2148
- ADC registri u ARM7-LPC2148
- ADxCR Registrirajte se u LPC2148
- ADxGDR: ADC globalni registar podataka
- Komponente potrebne
- Kružni dijagram
- Programiranje ARM7-LPC2148 za ADC
U svijetu elektronike na tržištu postoji mnogo vrsta analognih senzora koji se koriste za mjerenje temperature, brzine, pomaka, tlaka itd. Analogni senzori koriste se za proizvodnju izlaznih podataka koji se kontinuirano mijenjaju tijekom vremena. Ti su signali analognih senzora obično vrlo mali u vrijednosti od nekoliko mikrovolta (uV) do nekoliko milivolti (mV), pa je potreban neki oblik pojačanja. Za upotrebu ovih analognih signala u mikrokontroleru moramo pretvoriti analogni signal u digitalni signal jer mikrokontroler razumije i obrađuje samo digitalne signale. Dakle, većina mikrokontrolera ima ugrađenu važnu značajku nazvanu ADC (analogni u digitalni pretvarač). Naš mikrokontroler ARM7-LPC2148 također ima značajku ADC.
U ovom uputstvu vidjet ćemo kako koristiti ADC u ARM7-LPC2148 isporučivanjem različitog napona na analogni pin i prikazati ga na LCD zaslonu 16x2 nakon analogne u digitalnu pretvorbu. Pa krenimo od kratkog uvoda o ADC-u.
Što je ADC?
Kao što je ranije rečeno, ADC je kratica za analognu u digitalnu pretvorbu i koristi se za pretvaranje analognih vrijednosti iz stvarnog svijeta u digitalne vrijednosti poput 1 i 0. Pa koje su to analogne vrijednosti? To su oni koje vidimo u svakodnevnom životu poput temperature, brzine, svjetline itd. Ti se parametri odgovarajućim senzorima mjere kao analogni naponi, a zatim se te analogne vrijednosti pretvaraju u digitalne vrijednosti za mikrokontrolere.
Pretpostavimo da je naš raspon ADC-a od 0 V do 3,3 V, a mi imamo 10-bitni ADC, što znači da će se naš ulazni napon 0-3,3 V podijeliti na 1024 razine diskretnih analognih vrijednosti (2 10 = 1024). Značenje 1024 je razlučivost za 10-bitni ADC, slično će za 8-bitnu ADC razlučivost biti 512 (28), a za 16-bitnu ADC razlučivost 65.536 (216). LPC2148 ima 10-bitnu ADC rezoluciju.
Ako je stvarni ulazni napon 0V, tada će ga ADC MCU-a očitati kao 0, a ako je 3.3V, MCU će očitati 1024, a ako je negdje između 1,65v, MCU će očitati 512. Možemo koristiti dolje formule za izračunavanje digitalne vrijednosti koju će MCU očitati na temelju razlučivosti ADC-a i radnog napona.
(ADC razlučivost / radni napon) = (ADC digitalna vrijednost / stvarna vrijednost napona)
Kao na primjer ako je referentni napon 3v:

ADC smo detaljno objasnili u prethodnom članku.
ADC u ARM7-LPC2148
- LPC2148 sadrži dva analogno-digitalna pretvarača.
- Ovi pretvarači su pojedinačni 10-bitni uzastopni približni analogni digitalni pretvarači.
- Dok ADC0 ima šest kanala, ADC1 ima osam kanala.
- Stoga je ukupan broj dostupnih ADC ulaza za LPC2148 14.
- Pretvara ulazni napon u rasponu od (0 do 3,3 V). Ne smije prelaziti 3.3V referentnog napona. Kako će oštetiti IC, a također će pružiti nesigurne vrijednosti.
Neke važne značajke ADC-a u LPC2148
- Svaki pretvarač sposoban je izvesti više od 400000 10-bitnih uzoraka u sekundi.
- Svaki analogni ulaz ima namjenski registar rezultata za smanjenje prekomjernih troškova.
- Način burst pretvorbe za jedan ili više ulaza.
- Neobvezna konverzija na prijelazu na ulaznom pinu ili signalu podudaranja timera.
- Naredba Global Start za oba pretvarača.
Također provjerite kako koristiti ADC u drugim mikrokontrolerima:
- Kako koristiti ADC u Arduino Uno?
- Povezivanje ADC0808 s 8051 mikrokontrolerom
- Korištenje ADC modula PIC mikrokontrolera
- Vodič za ADC za Raspberry Pi
- Kako se koristi ADC u MSP430G2 - Mjerenje analognog napona
- Kako koristiti ADC u STM32F103C8
ADC igle u ARM7-LPC2148
Kao što je Earliar rekao, u ARM7-LPC2148 postoje dva kanala ADC0 sa 6 analognih ulaznih pinova i ADC1 s 8 analognih ulaznih pinova. Dakle, u potpunosti postoji 14 pinova za analogne ulaze. Donji dijagram prikazuje pinove koji su dostupni za analogni ulaz.

Budući da su ADC ulazne igle multipleksirane s drugim GPIO pinovima. Moramo ih omogućiti konfiguriranjem registra PINSEL za odabir funkcije ADC.
Tablica u nastavku prikazuje pinove ADC-a i poštovani ADC kanal broj u LPC2148. AD0 je kanal 0, a AD1 je kanal 1
|
LPC2148 Pribadača |
ADC kanal br |
|
P0.28 |
AD0.1 |
|
P0.29 |
AD0.2 |
|
P0,30 |
AD0.3 |
|
P0.25 |
AD0.4 |
|
P0.4 |
AD0.6 |
|
P0.5 |
AD0.7 |
|
P0.6 |
AD1.0 |
|
P0.8 |
AD1.1 |
|
P0.10 |
AD1.2 |
|
P0.12 |
AD1.3 |
|
P0.13 |
AD1.4 |
|
P0.15 |
AD1,5 |
|
P0.21 |
AD1.6 |
|
P0.22 |
AD1.7 |
ADC registri u ARM7-LPC2148
Registri se koriste u programiranju za korištenje značajke A / D pretvorbe u LPC2148.
Ispod je popis registara koji se koriste u LPC2148 za A / D pretvorbu
1. ADCR: analogno-digitalni registar upravljanja
Upotreba: Ovaj se registar koristi za konfiguriranje A / D pretvarača u LPC2148
2. ADGDR: Analogni digitalni globalni registar podataka
Upotreba: Ovaj registar ima GOTOVO bit za A / D pretvarač i REZULTAT pretvorbe je ovdje pohranjen.
3. ADINTERN: Registar za omogućavanje analognih i digitalnih prekida
Upotreba: Ovo je registar za omogućavanje prekida.
4. ADDR0 - ADDR7: Analogni registar podataka digitalnih kanala
Upotreba: Ovaj registar sadrži A / D vrijednost za odgovarajuće kanale.
5. ADSTAT: Analogni do digitalni registar statusa.
Upotreba: Ovaj registar sadrži oznaku GOTOVO za odgovarajući ADC kanal i također OVERRUN zastavicu za odgovarajući ADC kanal.
U ovom uputstvu koristit ćemo samo ADCR i ADGDR registre. Pogledajmo ih detaljno
ADxCR Registrirajte se u LPC2148
AD0CR i AD1CR za kanal 0 i kanal 1. To je 32-bitni registar. Ispod tablice naznačena su bitna polja za ADCR registar.
|
31:28 |
27 |
26:24 |
23:22 |
21 |
20 |
19:17 |
16 |
15: 8 |
7: 0 |
|
REZERVIRANO |
RUB |
POČETAK |
REZERVIRANO |
PDN |
REZERVIRANO |
KLIKOVI |
POPUŠTINA |
CLCKDIV |
SEL |
Pogledajmo kako konfigurirati pojedinačne registre
1. SEL: Bitovi od (0 do 7) koriste se za odabir kanala za ADC pretvorbu. Za svaki kanal dodijeljen je jedan bit. Na primjer, postavljanjem Bit-0 učinit će ADC uzorkom AD0.1 za pretvorbu. A postavljanjem bita -1 učinit će AD0.1; slično će postavka bit-7 izvršiti pretvorbu za AD0.7. Važan korak je da imamo PINSEL prema priključku koji koristimo, na primjer PINSEL0 za PORT0 u PLC2148.
2. CLCKDIV: Bitovi od (8 do 15) su za djelitelj sata. Ovdje je APB sat (ARM Peripheral Bus clock) podijeljen s ovom vrijednošću plus jedan da bi se dobio sat potreban za A / D pretvarač, koji bi trebao biti manji od ili jednak 4,5 MHz jer u LPC2148 koristimo uzastopnu metodu aproksimacije.
3. BURST: Bit 16 koristi se za način pretvorbe BURST.
Postavka 1: ADC će izvršiti pretvorbu za sve kanale koji su odabrani u SEL bitovima.
Postavka 0: Onemogućit će način pretvorbe BURST.
4. CLCKS: Bitovi od (17 do 19) tri bita koriste se za odabir razlučivosti i broja satova za A / D pretvorbu u brzom načinu rada, jer je to kontinuirani A / D način pretvorbe.
|
Vrijednost za bitove (17 do 19) |
Bitovi (točnost) |
Broj sata |
|
000 |
10 |
11 |
|
001 |
9 |
10 |
|
010 |
8 |
9 |
|
011 |
7 |
8 |
|
100 |
6 |
7 |
|
101 |
5 |
6 |
|
110 |
4 |
5 |
|
111 |
3 |
4 |
5. PDN: Bit 21 služi za odabir načina isključivanja ADC-a u LPC2148.
- A / D je u PDN načinu.
- A / D je u operativnom načinu
6. START: Bitovi od (24 do 26) su za START. Kada je način pretvorbe BURST ISKLJUČEN postavkom 0, ovi START bitovi korisni su za početak započinjanja A / D pretvorbe. START se koristi i za pretvorbu kontroliranu rubom. Tada postoji ulaz u CAP ili MAT pin LPC2148, A / D počinje pretvarati. Provjerimo donju tablicu
|
Vrijednost za bitove (24 do 26) |
Pribadače LPC2148 |
Funkcija ADC-a |
|
000 |
Koristi se za postavljanje ADC-a u PDN načinu Nema početka |
|
|
001 |
Započnite A / D pretvorbu |
|
|
010 |
CAP0.2 / MAT0.2 |
Započnite A / D pretvorbu na EDGE odabranom na pinu 27 (raste ili pada) na CAP / MAT pinovima LPC2148 |
|
011 |
CAP0.0 / MAT0.0 |
|
|
100 |
MAT0.1 |
|
|
101 |
MAT0.3 |
|
|
110 |
MAT1.0 |
|
|
111 |
MAT1.1 |
7. EDGE: 27 th bita za EDGE se koristiti samo kad START bita sadrži 010-111. Pokreće pretvorbu kada postoji CAP ili MAT ulaz koji za to možete vidjeti u gornjoj tablici.
Postavka : 0 - Na padajućem rubu
1 - Na rastućem rubu
ADxGDR: ADC globalni registar podataka
AD0GDR i AD1GDR za ADC kanal 0 i ADC kanal 1.
Riječ je o 32-bitnom registru koji sadrži REZULTAT A / D pretvorbe, a također i GOTOVO, što znači da je A / D pretvorba izvršena. Ispod tablice naznačena su bitna polja za ADGDR registar.
|
31 |
30 |
29:27 |
26:24 |
23:16 |
15: 6 |
5: 0 |
|
GOTOVO |
PRETJERATI |
REZERVIRANO |
CHN |
REZERVIRANO |
PROIZLAZITI |
REZERVIRANO |
1. REZULTAT: Ovi bitovi (6 do 15) sadrže rezultat A / D pretvorbe za odabrani kanal u ADCR SEL registru. Vrijednost se očitava tek nakon dovršetka A / D pretvorbe i to je označeno DONE bit.
PRIMJER: Za 10-bitni ADC rezultat pohranjena vrijednost varira od (0 do 1023).
2. KANAL: Ovi bitovi 24 do 26 sadrže broj kanala za koji se vrši A / D pretvorba. Pretvorena digitalna vrijednost prisutna je u RESULT bitu.
PRIMJER: 000 je za ADC kanal 0, a 001 je za ADC kanal 1, itd
3. prekoračen: od 30 -og bit za prekoračenje koristi u Burst način. Kada se postavi 1, pretvorena vrijednost ADC zamjenjuje se novo pretvorenom vrijednošću ADC. Kada se čita registar, briše se PREKRETNI bit.
4. GOTOVO: 31. bit je za GOTOVO bit.
1. set: Kada se završi A / D pretvorba.
Postavite 0: Kada se registr pročita i upiše ADCR.
Vidjeli smo o važnim registrima koji se koriste u ADC u LPC2148. Počnimo sada koristiti ADC u ARM7.
Komponente potrebne
Hardver
- ARM7-LPC2148 Mikrokontroler
- 3.3V regulator napona IC
- IC regulator napona 5V
- 10K potenciometar - 2 br
- LED (bilo koja boja)
- LCD zaslon (16X2)
- 9V baterija
- Breadboard
- Spajanje žica
Softver
- Keil uVision5
- Magic Flash Tool
Kružni dijagram


Tablica u nastavku prikazuje veze kruga između LCD-a i ARM7-LPC2148.
|
ARM7-LPC2148 |
LCD (16x2) |
|
P0.4 |
RS (odabir registra) |
|
P0.6 |
E (Omogući) |
|
P0.12 |
D4 (podatkovni pin 4) |
|
P0.13 |
D5 (podatkovni pin 5) |
|
P0.14 |
D6 (podatkovni pin 6) |
|
P0.15 |
D7 (podatkovni pin 7) |
Saznajte više o korištenju LCD-a s ARM 7 - LPC2148.
VAŽNO: Ovdje koristimo dva IC-a regulatora napona jedan za 5V LCD zaslon i drugi 3.3V za analogni ulaz koji se mogu mijenjati potenciometrom.
Priključci između 5V regulatora napona s LCD i ARM7 Stick
|
IC 5V regulator napona |
Funkcija pribadače |
LCD i ARM-7 LPC2148 |
|
1.Lijeva igla |
+ Ve od ulaza 9V baterije |
NC |
|
2.Centre Pin |
- Ve od baterije |
VSS, R / W, K LCD-a GND ARM7 |
|
3. Desna pribadača |
Regulirani + 5V izlaz |
VDD, A od LCD-a + 5V ARM7 |
Potenciometar s LCD-om
Potenciometar se koristi za promjenu kontrasta LCD zaslona. Lonac ima tri pina, lijevi zatik (1) spojen je na + 5V, a središnji (2) za VEE ili V0 LCD modula, a desni zatik (3) spojen je na GND. Kontrast možemo podesiti okretanjem gumba.
Veza između LPC2148 i potenciometra s regulatorom napona od 3,3 V
|
IC regulatora napona 3.3V |
Funkcija pribadače |
ARM-7 LPC2148 |
|
1.Lijeva igla |
- Ve od baterije |
GND pribadača |
|
2.Centre Pin |
Regulirani + 3.3V izlaz |
Na potenciometar Ulaz i izlaz potenciometra na P0.28 |
|
3. Desna pribadača |
+ Ve od ulaza 9V baterije |
NC |
Programiranje ARM7-LPC2148 za ADC
Za programiranje ARM7-LPC2148 potreban nam je alat keil uVision & Flash Magic. Koristimo USB kabel za programiranje ARM7 Stick putem mikro USB priključka. Napisujemo kod pomoću Keila i stvaramo hex datoteku, a zatim se HEX datoteka bljeska na ARM7 stick pomoću Flash Magic. Da biste saznali više o instaliranju keil uVision i Flash Magic, te kako ih koristiti, slijedite vezu Početak rada s mikrokontrolerom ARM7 LPC2148 i programirajte ga pomoću Keil uVision.
U ovom uputstvu pretvaramo analogni ulazni napon (0 do 3,3 V) u digitalnu vrijednost pomoću ADC-a u LPC2148 i prikazujemo analogni napon na LCD zaslonu (16x2). Za promjenu ulaznog analognog napona koristit će se potenciometar.
Da biste saznali više o povezivanju LCD zaslona s ARM7-LPC2148 4-bitnim načinom rada, slijedite ovu vezu.
Kompletan kod za korištenje ADC sa ARM 7 dana je na kraju ovog vodiča, ovdje smo objašnjavajući nekoliko dijelova.
Koraci uključeni u programiranje LPC2148-ADC
1. Registar PINSEL koristi se za odabir pin priključka LPC2148 i ADC funkcije kao analognog ulaza.
PINSEL1 = 0x01000000; // Odaberite P0.28 kao AD0.1
2. Odaberite tačnost sata i bita za pretvorbu upisivanjem vrijednosti u ADxCR (kontrolni registar ADC).
AD0CR = 0x00200402; // Postavlja ADC rad kao 10-bit / 11 CLK za pretvorbu (000)
3. Započnite pretvorbu upisivanjem vrijednosti u bitove START u ADxCR.
Ovdje sam napisao na 24 th malo AD0CR registar.
AD0CR = AD0CR - (1 << 24);
4. Sada moramo provjeriti IZVRŠENI bit (31.) odgovarajućeg ADxDRy-a (ADC registar podataka) jer se mijenja od 0 do 1. Dakle, koristimo while petlju da neprestano provjeravamo je li izvršena konverzija na 31. bitnom registru podataka.
dok (! (AD0DR1 & 0x80000000));
5. Nakon što je gotov bit postavljen na 1, pretvorba je uspješna, zatim čitamo rezultat iz istog ADC registra podataka AD0DR1 i pohranjujemo vrijednost u varijablu.
adcvalue = AD0DR1;
Dalje koristimo formulu za pretvaranje digitalne vrijednosti u napon i pohranjivanje u varijablu pod nazivom napon .
napon = ((adcvalue / 1023.0) * 3.3);
5. Sljedeći se redovi koriste za prikaz digitalnih vrijednosti (0 do 1023) nakon analogne u digitalnu pretvorbu.
adc = adcvalue; sprintf (displayadc, "adcvalue =% f", adc); LCD_DISPLAY (displayadc); // Prikazivanje vrijednosti ADC (0 do 1023)
6. Sljedeći se redovi koriste za prikaz ulaznog analognog napona (0 do 3,3 V) nakon analogne u digitalnu pretvorbu i nakon koraka 5.
LCD_SEND (0xC0); sprintf (voltvalue, "Napon =%. 2f V", napon); LCD_DISPLAY (voltvalue); // Prikaz (ulazni analogni napon)
7. Sada moramo prikazati ulazni napon i digitalne vrijednosti na LCD zaslonu. Prije toga moramo inicijalizirati LCD zaslon i upotrijebiti odgovarajuće naredbe za slanje poruke na prikaz.
Ispod se koristi kod inicijalizacije LCD-a
void LCD_INITILIZE (void) // Funkcija pripreme LCD-a { IO0DIR = 0x0000FFF0; // Postavlja pin P0.12, P0.13, P0.14, P0.15, P0.4, P0.6 kao OUTPUT delay_ms (20); LCD_SEND (0x02); // Inicijalizirajte lcd u 4-bitnom načinu rada LCD_SEND (0x28); // 2 retka (16X2) LCD_SEND (0x0C); // Prikaz na pokazivaču isključen LCD_SEND (0x06); // Kursor za automatsko povećanje LCD_SEND (0x01); // Prikažite jasan LCD_SEND (0x80); // Prva pozicija prvog retka }
Ispod se koristi kôd za prikaz vrijednosti na LCD-u
void LCD_DISPLAY (char * poruka) // funkcija za ispis znakove šalje jednu po jednu { uint8_t i = 0; while (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // šalje gornji grickanje IO0SET = 0x00000050; // RS HIGH & Omogući HIGH za ispis podataka IO0CLR = 0x00000020; // RW LOW Način pisanja delay_ms (2); IO0CLR = 0x00000040; // EN = 0, RS i RW nepromijenjeni (tj. RS = 1, RW = 0) delay_ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // šalje donji grickanje IO0SET = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; kašnjenje_ms (2); IO0CLR = 0x00000040; kašnjenje_ms (5); i ++; } }
Ispod se koristi funkcija za stvaranje kašnjenja
void delay_ms (uint16_t j) // Funkcija za kašnjenje u milisekundama { uint16_t x, i; za (i = 0; i
Kompletni kod s demonstracijskim videom dat je u nastavku.
