- Kaj je ADC?
- ADC v ARM7-LPC2148
- ADC zatiči v ARM7-LPC2148
- Registri ADC v ARM7-LPC2148
- Registracija ADxCR v LPC2148
- ADxGDR: Globalni register podatkov ADC
- Potrebne komponente
- Shema vezja
- Programiranje ARM7-LPC2148 za ADC
V elektronskem svetu je na trgu veliko različnih analognih senzorjev, ki se uporabljajo za merjenje temperature, hitrosti, premika, tlaka itd. Analogni senzorji se uporabljajo za ustvarjanje izhodnih vrednosti, ki se skozi čas nenehno spreminjajo. Ti signali analognih senzorjev so ponavadi zelo majhni, od nekaj mikrovoltov (uV) do več milivoltov (mV), zato je potrebna določena oblika ojačanja. Za uporabo teh analognih signalov v mikrokrmilniku moramo pretvoriti analogni signal v digitalni signal, saj mikrokrmilnik razume in obdeluje samo digitalne signale. Tako ima večina mikrokrmilnika vgrajeno pomembno funkcijo ADC (analogni v digitalni pretvornik). Naš mikrokrmilnik ARM7-LPC2148 ima tudi funkcijo ADC.
V tej vadnici bomo videli, kako uporabiti ADC v ARM7-LPC2148 tako, da na analogni pin priklopite različno napetost in jo po analogni v digitalno pretvorbo prikažete na LCD zaslonu 16x2. Začnimo torej s kratkim uvodom o ADC.
Kaj je ADC?
Kot smo že omenili, ADC pomeni analogno v digitalno pretvorbo in se uporablja za pretvorbo analognih vrednosti iz resničnega sveta v digitalne vrednosti, kot so 1 in 0. Torej, katere so te analogne vrednosti? To so tiste, ki jih vidimo v vsakdanjem življenju, kot so temperatura, hitrost, svetlost itd. Ti parametri se izmerijo kot analogne napetosti s pomočjo ustreznih senzorjev, nato pa se te analogne vrednosti pretvorijo v digitalne vrednosti za mikrokrmilnike.
Predpostavimo, da je naš obseg ADC od 0V do 3,3V in imamo 10-bitni ADC, kar pomeni, da bo naša vhodna napetost 0-3,3 voltov razdeljena na 1024 ravni diskretnih analognih vrednosti (2 10 = 1024). Pomen 1024 je ločljivost za 10-bitni ADC, podobno za 8-bitni ADC bo ločljivost 512 (28), za 16-bitnega ADC pa 65.536 (216). LPC2148 ima 10-bitni ADC ločljivost.
S tem, če je dejanska vhodna napetost 0V, jo ADC MCU-ja odčita kot 0, in če je 3,3V, MCU odčita 1024 in če je nekje vmes približno 1,65v, potem MCU odčita 512. Lahko uporabimo spodnje formule za izračun digitalne vrednosti, ki jo bo prebral MCU na podlagi ločljivosti ADC in delovne napetosti.
[Ločljivost ADC / delovna napetost] = (Digitalna vrednost ADC / dejanska vrednost napetosti)
Tako kot na primer, če je referenčna napetost 3v:
ADC smo podrobno razložili v prejšnjem članku.
ADC v ARM7-LPC2148
- LPC2148 vsebuje dva analogno-digitalna pretvornika.
- Ti pretvorniki so enojni 10-bitni zaporedni približni analogni digitalni pretvorniki.
- Medtem ko ima ADC0 šest kanalov, ima ADC1 osem kanalov.
- Zato je skupno število razpoložljivih vhodov ADC za LPC2148 14.
- Pretvori vhodno napetost samo v območju (od 0 do 3,3 V). Ne sme presegati 3,3 V referenčne napetosti. Ker bo poškodoval IC in bo zagotovil tudi negotove vrednosti.
Nekaj pomembnih lastnosti ADC v LPC2148
- Vsak pretvornik zmore izvesti več kot 400000 10-bitnih vzorcev na sekundo.
- Vsak analogni vhod ima namenski register rezultatov za zmanjšanje režijskih stroškov.
- Način rafalne pretvorbe za en ali več vhodov.
- Izbirna pretvorba na prehodu na vhodnem zatiču ali signalu ujemanja časovnika.
- Ukaz Global Start za oba pretvornika.
Preverite tudi, kako uporabljati ADC v drugih mikrokrmilnikih:
- Kako uporabljati ADC v Arduino Uno?
- Povezava ADC0808 z mikrokrmilnikom 8051
- Uporaba modula ADC mikrokrmilnika PIC
- Vadnica za ADC Raspberry Pi
- Kako uporabljati ADC v MSP430G2 - Merjenje analogne napetosti
- Kako uporabljati ADC v STM32F103C8
ADC zatiči v ARM7-LPC2148
Kot je povedal Earliar, sta v ARM7-LPC2148 dva kanala ADC0 s 6 analognimi vhodnimi nožicami in ADC1 z 8 analognimi vhodnimi nožicami. Torej v celoti obstaja 14 nožic za analogne vhode. Spodnji diagram prikazuje nožice, ki so na voljo za analogni vhod.
Ker so vhodni zatiči ADC multipleksirani z drugimi zatiči GPIO. Omogočiti jih moramo s konfiguracijo registra PINSEL, da izberemo funkcijo ADC.
Spodnja tabela prikazuje nožice ADC in spoštovani ADC kanal št. V LPC2148. AD0 je kanal 0 in AD1 je kanal 1
LPC2148 Pin |
Št. Kanala ADC |
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 |
Registri ADC v ARM7-LPC2148
Registri se uporabljajo pri programiranju za uporabo funkcije pretvorbe A / D v LPC2148.
Spodaj je seznam registrov, ki se uporabljajo v LPC2148 za A / D pretvorbo
1. ADCR: analogno-digitalni nadzorni register
Uporaba: Ta register se uporablja za konfiguriranje A / D pretvornika v LPC2148
2. ADGDR: Analogni digitalni globalni register podatkov
Uporaba: V tem registru je končano bit za A / D pretvornik in tukaj je shranjen REZULTAT pretvorbe.
3. ADINTERN: Register za omogočanje analognih in digitalnih prekinitev
Uporaba: To je register za omogočanje prekinitev.
4. ADDR0 - ADDR7: Analogni register podatkov digitalnih kanalov
Uporaba: Ta register vsebuje vrednost A / D za posamezne kanale.
5. ADSTAT: Analogni digitalni register stanja.
Uporaba: Ta register vsebuje zastavico KONČANO za posamezni kanal ADC in tudi OVERRUN zastavico za ustrezen kanal ADC.
V tej vadnici bomo uporabljali samo registre ADCR in ADGDR. Oglejmo si jih podrobneje
Registracija ADxCR v LPC2148
AD0CR in AD1CR za kanal 0 oziroma kanal 1. To je 32-bitni register. Spodnja tabela označuje bitna polja za register ADCR.
31:28 |
27. |
26:24 |
23:22 |
21. |
20. |
19:17 |
16. |
15: 8 |
7: 0 |
REZERVIRANO |
ROB |
START |
REZERVIRANO |
PDN |
REZERVIRANO |
CLKS |
IZBRUH |
CLCKDIV |
SEL |
Poglejmo, kako konfigurirati posamezne registre
1. SEL: Biti od (0 do 7) se uporabljajo za izbiro kanala za pretvorbo ADC. Za vsak kanal je dodeljen en bit. Če na primer nastavite Bit-0, bo ADC vzorec AD0.1 za pretvorbo. In nastavitev bita -1 bo AD0,1; podobno nastavitev bit-7 izvede pretvorbo za AD0.7. Pomemben korak je, da imamo PINSEL glede na vrata, ki jih uporabljamo, na primer PINSEL0 za PORT0 v PLC2148.
2. CLCKDIV: Biti od (8 do 15) so za delilec ure. Tu je ura APB (ura ARM periferne vodila) deljena s to vrednostjo plus ena, da se ustvari ura, potrebna za A / D pretvornik, ki naj bo manjša ali enaka 4,5 MHz, saj v LPC2148 uporabljamo zaporedno metodo približevanja.
3. BURST: Bit 16 se uporablja za način pretvorbe BURST.
Nastavitev 1: ADC izvede pretvorbo za vse kanale, ki so izbrani v bitih SEL.
Nastavitev 0: onemogoči način pretvorbe BURST.
4. CLCKS: Biti od (17 do 19) treh bitov se uporabljajo za izbiro ločljivosti in števila ur za A / D pretvorbo v zaporednem načinu, saj gre za neprekinjeno A / D pretvorbo.
Vrednost za bite (17 do 19) |
Bit (natančnost) |
Št. Ure |
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 je namenjen izbiri načina izklopa ADC v LPC2148.
- A / D je v načinu PDN.
- A / D je v operativnem načinu
6. START: Biti od (24 do 26) so za START. Ko je način pretvorbe BURST IZKLOPLJEN z nastavitvijo 0, so ti BITI bitni uporabni za začetek A / D pretvorbe. START se uporablja tudi za pretvorbo z nadzorom roba. Takrat se A / D začne pretvarjati v vhodu v zatič CAP ali MAT na LPC2148. Preverimo spodnjo tabelo
Vrednost za bite (24 do 26) |
Zatiči LPC2148 |
Funkcija ADC |
000 |
Uporablja se za nastavitev ADC v načinu PDN Brez začetka |
|
001 |
Začni A / D pretvorbo |
|
010 |
CAP0,2 / MAT0,2 |
Začnite A / D pretvorbo na EDGE, izbranem na zatiču 27 (naraščajoče ali padajoče) na zatičih CAP / MAT LPC2148 |
011 |
CAP0,0 / MAT0,0 |
|
100 |
MAT0.1 |
|
101 |
MAT0.3 |
|
110 |
MAT1.0 |
|
111 |
MAT1.1 |
7. EDGE: 27 TH bit za EDGE se uporablja samo pri štartni bit vsebuje 010-111. Pretvorba se začne, ko je vnos CAP ali MAT, kar lahko vidite v zgornji tabeli.
Nastavitev : 0 - Na padajočem robu
1 - Na naraščajočem robu
ADxGDR: Globalni register podatkov ADC
AD0GDR in AD1GDR za ADC Channel 0 in ADC Channel 1.
To je 32-bitni register, ki vsebuje REZULTAT A / D pretvorbe in tudi KONČANI bit, kar pomeni, da je A / D pretvorba opravljena. Spodnja tabela označuje bitna polja za register ADGDR.
31. |
30. |
29:27 |
26:24 |
23:16 |
15: 6 |
5: 0 |
KONČANO |
PREKRIVANJE |
REZERVIRANO |
CHN |
REZERVIRANO |
REZULTAT |
REZERVIRANO |
1. REZULTAT: Ti biti (6 do 15) vsebujejo rezultat A / D pretvorbe za izbrani kanal v registru ADCR SEL. Vrednost se prebere šele po zaključku A / D pretvorbe, kar je označeno z DONE bit.
PRIMER: Za 10-bitni rezultat ADC se shranjena vrednost razlikuje od (0 do 1023).
2. KANAL: Ti biti od 24 do 26 vsebujejo številko kanala, za katerega je narejena A / D pretvorba. Pretvorjena digitalna vrednost je prisotna v bitu RESULT.
PRIMER: 000 je za ADC kanal 0 in 001 je za ADC kanal 1 itd
3. ZAMIK: 30- th bit za preplavili se uporablja v načinu poči. Ko nastavite 1, bo pretvorjena vrednost ADC prepisana z novo pretvorjeno vrednostjo ADC. Po branju registra zbriše bit OVERRUN.
4. KONČANO: 31. bit je za KONČANO bit.
1. sklop: Ko je A / D pretvorba končana.
Nastavite 0: Ko je register prebran in zapisan ADCR.
Videli smo o pomembnih registrih, ki se uporabljajo v ADC v LPC2148. Zdaj začnimo uporabljati ADC v ARM7.
Potrebne komponente
Strojna oprema
- Mikrokrmilnik ARM7-LPC2148
- 3.3V napetostni regulator IC
- 5V napetostni regulator IC
- 10K potenciometer - 2 št
- LED (poljubna barva)
- LCD zaslon (16X2)
- 9V baterija
- Breadboard
- Povezovanje žic
Programska oprema
- Keil uVision5
- Magic Flash Tool
Shema vezja
Spodnja tabela prikazuje povezave vezij med LCD in ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (izbira registra) |
P0.6 |
E (Omogoči) |
P0.12 |
D4 (podatkovni zatič 4) |
P0.13 |
D5 (podatkovni zatič 5) |
P0.14 |
D6 (podatkovni zatič 6) |
P0.15 |
D7 (podatkovni zatič 7) |
Preberite več o uporabi LCD-ja z ARM 7 - LPC2148.
POMEMBNO: Tu uporabljamo dve IC-napetosti regulatorja, eno za 5V LCD zaslon in drugo 3.3V za analogni vhod, ki ju lahko spreminja potenciometer.
Povezave med 5V napetostnim regulatorjem z LCD in ARM7 Stick
5V napetostni regulator IC |
Funkcija zatiča |
LCD & ARM-7 LPC2148 |
1. Levi zatič |
+ Ve od vhoda baterije 9V |
NC |
2. Center Pin |
- Od baterije |
VSS, R / W, K LCD GND ARM7 |
3. Desni zatič |
Reguliran + 5V izhod |
VDD, A LCD + 5V ARM7 |
Potenciometer z LCD
Potenciometer se uporablja za spreminjanje kontrasta LCD zaslona. Lonec ima tri zatiče, levi zatič (1) je povezan na + 5V, sredinski (2) pa na VEE ali V0 modula LCD, desni zatič (3) pa na GND. Kontrast lahko nastavimo z obračanjem gumba.
Povezava med LPC2148 in potenciometrom z napetostnim regulatorjem 3,3 V
3.3V napetostni regulator IC |
Funkcija zatiča |
ARM-7 LPC2148 |
1. Levi zatič |
- Od baterije |
Zatič GND |
2. Center Pin |
Reguliran + 3.3V izhod |
Na potenciometer Vhod in izhod potenciometra na P0.28 |
3. Desni zatič |
+ Ve od vhoda baterije 9V |
NC |
Programiranje ARM7-LPC2148 za ADC
Za programiranje ARM7-LPC2148 potrebujemo orodje keil uVision & Flash Magic. Za programiranje ARM7 Stick preko mikro USB vrat uporabljamo kabel USB. Kodo napišemo s pomočjo Keila in ustvarimo šestnajstiško datoteko, nato pa datoteko HEX z Flash Magic utripnemo na ARM7. Če želite izvedeti več o namestitvi keil uVision in Flash Magic ter kako jih uporabljati, sledite povezavi Uvod v mikrokrmilnik ARM7 LPC2148 in ga programirajte s pomočjo Keil uVision.
V tej vadnici pretvorimo analogno vhodno napetost (0 do 3,3 V) v digitalno vrednost z uporabo ADC v LPC2148 in prikažemo analogno napetost na LCD zaslonu (16x2). Za spreminjanje vhodne analogne napetosti bo uporabljen potenciometer.
Če želite izvedeti več o povezovanju LCD-ja s 4-bitnim načinom ARM7-LPC2148, sledite tej povezavi.
Popolna koda za uporabo ADC z ARM 7 je podan na koncu vadnice, tu smo razložiti nekaj dele.
Koraki pri programiranju LPC2148-ADC
1. Register PINSEL se uporablja za izbiro priključka LPC2148 in funkcije ADC kot analognega vhoda.
PINSEL1 = 0x01000000; // Izberite P0.28 kot AD0.1
2. Izberite uro in bitno natančnost za pretvorbo tako, da zapišete vrednost v ADxCR (nadzorni register ADC).
AD0CR = 0x00200402; // Nastavi delovanje ADC kot 10-bit / 11 CLK za pretvorbo (000)
3. Začnite pretvorbo tako, da v ADxCR zapišete vrednost v bit START.
Tukaj sem napisal do 24 th malo AD0CR registra.
AD0CR = AD0CR - (1 << 24);
4. Zdaj moramo preveriti KONČANI bit (31.) ustreznega ADxDRy (podatkovni register ADC), ko se spremeni od 0 do 1. Torej uporabljamo zanko while za stalno preverjanje, ali je pretvorba izvedena na 31. bitnem registru podatkov.
medtem ko (! (AD0DR1 & 0x80000000));
5. Ko je nastavljeni bit nastavljen na 1, je pretvorba uspešna, nato preberemo rezultat iz istega podatkovnega registra ADC AD0DR1 in vrednost shranimo v spremenljivko.
adcvalue = AD0DR1;
Nato s formulo pretvorimo digitalno vrednost v napetost in shranimo v spremenljivko z imenom napetost .
napetost = ((adcvalue / 1023.0) * 3.3);
5. Za prikaz digitalnih vrednosti (0 do 1023) po analogni v digitalno pretvorbo se uporabljajo naslednje vrstice.
adc = adcvalue; sprintf (displayadc, "adcvalue =% f", adc); LCD_DISPLAY (displayadc); // Prikaži vrednost ADC (0 do 1023)
6. Za prikaz vhodne analogne napetosti (0 do 3,3 V) po analogni v digitalno pretvorbo in po koraku 5 se uporabljajo naslednje vrstice.
LCD_SEND (0xC0); sprintf (voltvalue, "Napetost =%. 2f V", napetost); LCD_DISPLAY (voltvalue); // Prikaz (vhodna analogna napetost)
7. Zdaj moramo na LCD zaslonu prikazati vhodno napetost in digitalne vrednosti. Pred tem moramo LCD zaslon inicializirati in uporabiti ustrezne ukaze za pošiljanje sporočila na prikaz.
Spodnja koda se uporablja za inicializacijo LCD-ja
void LCD_INITILIZE (void) // Funkcija za pripravo LCD-ja { IO0DIR = 0x0000FFF0; // Nastavi pin P0.12, P0.13, P0.14, P0.15, P0.4, P0.6 kot IZHOD zakasnitve (20); LCD_SEND (0x02); // inicializiramo lcd v 4-bitnem načinu delovanja LCD_SEND (0x28); // 2 vrstici (16X2) LCD_SEND (0x0C); // Prikaz na kazalcu izklopljen LCD_SEND (0x06); // Samodejni prirastek kurzorja LCD_SEND (0x01); // Prikaži jasen LCD_SEND (0x80); // Prva pozicija prve vrstice }
Spodnja koda se uporablja za prikaz vrednosti na LCD-prikazovalniku
nična LCD_DISPLAY (char * spor) // Funkcija natisniti znake pošlje eno za drugo { uint8_t i = 0; medtem ko (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // pošlje zgornji grizljaj IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH za tiskanje podatkov IO0CLR = 0x00000020; // RW LOW Način pisanja delay_ms (2); IO0CLR = 0x00000040; // EN = 0, RS in RW nespremenjeni (tj. RS = 1, RW = 0) delay_ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // pošlje spodnji griz IO0SET = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; zamuda_ms (2); IO0CLR = 0x00000040; delay_ms (5); i ++; } }
Spodnja funkcija se uporablja za ustvarjanje zakasnitve
void delay_ms (uint16_t j) // Funkcija za zakasnitev v milisekundah { uint16_t x, i; za (i = 0; i
Celotna koda z demonstracijskim videom je navedena spodaj.