- Kas yra ADC?
- ADC ARM7-LPC2148
- ADC kaiščiai ARM7-LPC2148
- ADC registrai ARM7-LPC2148
- „ADxCR“ registruokitės LPC2148
- ADxGDR: ADC pasaulinis duomenų registras
- Būtini komponentai
- Grandinės schema
- ARM7-LPC2148 programavimas ADC
Elektronikos pasaulyje rinkoje yra daugybė analoginių jutiklių variantų, kurie naudojami temperatūrai, greičiui, poslinkiui, slėgiui ir kt. Matuoti. Analoginiai jutikliai naudojami produkcijai gaminti, kuri nuolat kinta. Šie analoginių jutiklių signalai paprastai būna labai mažos vertės, nuo kelių mikrovoltų (uV) iki kelių milioltų (mV), todėl reikia tam tikros formos stiprinimo. Norėdami naudoti šiuos analoginius signalus mikrovaldiklyje, turime konvertuoti analoginį signalą į skaitmeninį signalą, nes mikrovaldiklis supranta ir apdoroja tik skaitmeninius signalus. Taigi dauguma mikrovaldiklio turi integruotą svarbią funkciją, vadinamą ADC (analoginis į skaitmeninį keitiklį). Mūsų mikrovaldiklis ARM7-LPC2148 taip pat turi ADC funkciją.
Šioje pamokoje pamatysime, kaip naudoti ADC sistemoje ARM7-LPC2148 tiekiant kintamą įtampą į analoginį kaištį ir parodžius jį 16x2 LCD ekrane po analoginio į skaitmeninį keitimą. Taigi pradėkime nuo trumpos įžangos apie ADC.
Kas yra ADC?
Kaip minėta anksčiau, ADC reiškia analoginį į skaitmeninį konversiją ir jis naudojamas konvertuoti analogines vertes iš realaus pasaulio į skaitmenines vertes, tokias kaip 1 ir 0. Taigi, kas yra šios analoginės vertės? Tai yra tie, kuriuos matome kasdieniame gyvenime, pavyzdžiui, temperatūra, greitis, ryškumas ir kt. Šie parametrai atitinkamais jutikliais matuojami kaip analoginės įtampos, o vėliau šios analoginės vertės yra konvertuojamos į skaitmenines mikrovaldiklių vertes.
Tarkime, kad mūsų ADC diapazonas yra nuo 0 V iki 3,3 V ir mes turime 10 bitų ADC, tai reiškia, kad mūsų įėjimo įtampa 0-3,3 voltai bus padalinta į 1024 atskirų analoginių verčių lygius (2 10 = 1024). Tai reiškia, kad 1024 yra 10 bitų ADC skiriamoji geba, panašiai kaip 8 bitų ADC skiriamoji geba bus 512 (28), o 16 bitų ADC skiriamoji geba bus 65 536 (216). LPC2148 turi 10 bitų skiriamąją gebą ADC.
Tokiu atveju, jei faktinė įėjimo įtampa yra 0 V, MCU ADC ją perskaitys kaip 0, o jei ji yra 3,3 V, MCU parodys 1024, o jei jis bus kažkur tarp 1,65 V, tada MCU rodys 512. Mes galime naudoti žemiau formulės, skirtos apskaičiuoti skaitmeninę vertę, kurią perskaitys MCU, remiantis ADC skiriamąja geba ir darbine įtampa.
(ADC skiriamoji geba / darbinė įtampa) = (ADC skaitmeninė vertė / faktinė įtampos vertė)
Pavyzdžiui, jei atskaitos įtampa yra 3v:
ADC išsamiai paaiškinome ankstesniame straipsnyje.
ADC ARM7-LPC2148
- LPC2148 yra du analoginiai – skaitmeniniai keitikliai.
- Šie keitikliai yra pavieniai 10 bitų nuoseklūs apytiksliai analoginiai ir skaitmeniniai keitikliai.
- Nors ADC0 turi šešis kanalus, ADC1 turi aštuonis kanalus.
- Todėl bendras LPC2148 galimų ADC įėjimų skaičius yra 14.
- Jis konvertuoja įėjimo įtampą tik diapazone (nuo 0 iki 3,3 V). Jis neturi viršyti 3,3 V įtampos atskaitos. Nes tai pakenks IC ir taip pat pateiks neapibrėžtas vertes.
Keletas svarbių ADC savybių LPC2148
- Kiekvienas keitiklis, galintis atlikti daugiau nei 400000 10 bitų pavyzdžių per sekundę.
- Kiekvienas analoginis įėjimas turi specialų rezultatų registrą, kad sumažėtų pertraukimo pridėtinės išlaidos.
- Burst konversijos režimas pavieniams ar keliems įėjimams.
- Neprivaloma konversija pereinant prie įvesties kaiščio arba laikmačio atitikties signalo.
- „Global Start“ komanda abiem keitikliams.
Taip pat patikrinkite, kaip naudoti ADC kituose mikrovaldikliuose:
- Kaip naudoti ADC „Arduino Uno“?
- Sąsaja ADC0808 su 8051 mikrovaldikliu
- Naudojant PIC mikrovaldiklio ADC modulį
- Raspberry Pi ADC pamoka
- Kaip naudoti ADC MSP430G2 - Analoginės įtampos matavimas
- Kaip naudoti ADC programoje STM32F103C8
ADC kaiščiai ARM7-LPC2148
Kaip pasakojo earliar, ARM7-LPC2148 yra du kanalai ADC0 su 6 analoginio įvesties kaiščiais ir ADC1 su 8 analoginio įvesties kaiščiais. Taigi, analoginiams įėjimams yra 14 kontaktų. Žemiau esančioje diagramoje parodyti kaiščiai, kuriuos galima naudoti analoginiam įėjimui.
Kadangi ADC įvesties kaiščiai yra multipleksuojami su kitais GPIO kaiščiais. Turime juos įgalinti sukonfigūruodami PINSEL registrą, kad pasirinktumėte ADC funkciją.
Žemiau esančioje lentelėje parodyti ADC kaiščiai ir laikomasi ADC kanalo Nr. LPC2148. AD0 yra 0 kanalas, o AD1 yra 1 kanalas
LPC2148 kaištis |
ADC kanalo Nr |
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 registrai ARM7-LPC2148
Registrai naudojami programuojant naudoti A / D konversijos funkciją LPC2148.
Žemiau pateikiamas registrų, naudojamų LPC2148 A / D konversijai, sąrašas
1. ADCR: analoginio ir skaitmeninio valdymo registras
Naudojimas: Šis registras naudojamas konfigūruoti A / D keitiklį LPC2148
2. ADGDR: analoginis skaitmeninis pasaulinis duomenų registras
Naudojimas: Šis registras turi ATLIKTĄ bitą A / D keitikliui ir čia saugomas konversijos rezultatas.
3. ADINTERN: „ Analog to Digital Interrupt Enable Register“
Naudojimas: tai yra „Interrupt Enable“ registras.
4. ADDR0 - ADDR7: analoginių ir skaitmeninių kanalų duomenų registras
Naudojimas: Šiame registre yra atitinkamų kanalų A / D vertė.
5. ADSTAT: analoginio į skaitmeninį būsenos registrą.
Naudojimas: Šiame registre yra atitinkamo ADC kanalo DONE vėliava ir atitinkamo ADC kanalo OVERRUN vėliava.
Šioje pamokoje naudosime tik ADCR ir ADGDR registrus. Pažiūrėkime apie juos išsamiai
„ADxCR“ registruokitės LPC2148
AD0CR ir AD1CR atitinkamai 0 ir 1 kanalams. Tai 32 bitų registras. Žemiau esančioje lentelėje nurodomi ADCR registro bitų laukai.
31:28 |
27 |
26:24 |
23:22 |
21 |
20 |
19:17 |
16 |
15: 8 |
7: 0 |
REZERVUOTA |
EDGE |
PRADĖTI |
REZERVUOTA |
PDN |
REZERVUOTA |
CLKS |
BURST |
CLCKDIV |
SEL |
Pažiūrėkime, kaip konfigūruoti atskirus registrus
1. SEL: bitai nuo (0 iki 7) naudojami ADC konversijos kanalui pasirinkti. Kiekvienam kanalui skiriama po vieną bitą. Pvz., Nustatant „Bit-0“, ADC konversijai ims pavyzdį AD0.1. O nustačius bitą -1 bus AD0.1; panašiai nustatant 7 bitą bus atlikta AD0.7 konversija. Svarbus žingsnis yra tai, kad mes turime PINSEL pagal prievadą, kurį naudojame, pavyzdžiui, PINSEL0, skirtą PORT0, PLC2148.
2. CLCKDIV: bitai nuo (8 iki 15) skirti laikrodžio dalikliui. Čia APB laikrodis (ARM periferinės magistralės laikrodis) padalijamas iš šios vertės plius vienas, kad gautų laikrodį, reikalingą A / D keitikliui, kuris turėtų būti mažesnis arba lygus 4,5 MHz, nes mes LPC2148 naudojame nuoseklaus artinimo metodą.
3. BURST: 16 bitas naudojamas BURST konversijos režimui.
1 nustatymas: ADC atliks visų kanalų, pasirinktų SEL bitais, konversiją.
0 nustatymas: išjungs BURST konversijos režimą.
4. CLCKS: bitai nuo (17 iki 19) trys bitai naudojami skiriant raišką ir laikrodžių skaičių A / D konversijai serijos režimu, nes tai yra nepertraukiamas A / D konversijos režimas.
Bitų vertė (nuo 17 iki 19) |
Bitai (tikslumas) |
Laikrodžio numeris |
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: 21 bitas skirtas ADC maitinimo išjungimo režimui pasirinkti LPC2148.
- A / D veikia PDN režimu.
- A / D yra darbo režime
6. START: bitai nuo (24 iki 26) skirti START. Kai BURST konversijos režimas yra išjungtas nustatant 0, šie START bitai yra naudingi, kai reikia pradėti A / D konversiją. START taip pat naudojamas kraštinių valdymui. Tai yra, kai LPC2148 CAP arba MAT kaište yra įvestis, A / D pradeda konvertuoti. Patikrinkime žemiau esančią lentelę
Bitų vertė (nuo 24 iki 26) |
LPC2148 kaiščiai |
ADC funkcija |
000 |
Naudojamas nustatyti ADC PDN režimu Nėra pradžios |
|
001 |
Pradėti A / D konversiją |
|
010 |
CAP0.2 / MAT0.2 |
Pradėti A / D konversiją su EDGE, pasirinkta 27 kaištyje (kylanti arba krentanti) LPC2148 CAP / MAT kaiščiuose |
011 |
CAP0.0 / MAT0.0 |
|
100 |
MAT0.1 |
|
101 |
MAT0.3 |
|
110 |
MAT1.0 |
|
111 |
MAT1.1 |
7. EDGE: 27 -asis bitas skirtas EDGE yra naudojamas tik tada, kai pradiniame bite yra 010–111. Jis pradeda konversiją, kai yra CAP arba MAT įvestis, kurią galite pamatyti aukščiau esančioje lentelėje.
Nustatymas : 0 - „ Falling Edge“
1 - „Rising Edge“
ADxGDR: ADC pasaulinis duomenų registras
AD0GDR ir AD1GDR atitinkamai ADC 0 kanalo ir 1 ADC kanalui.
Tai yra 32 bitų registras, kuriame yra A / D konversijos rezultatas ir DONE, kuris rodo, kad A / D konversija atlikta. Žemiau lentelėje nurodyti ADGDR registro bitų laukai.
31 |
30 |
29:27 |
26:24 |
23:16 |
15: 6 |
5: 0 |
PADARYTA |
PEREIKITE |
REZERVUOTA |
CHN |
REZERVUOTA |
REZULTATAS |
REZERVUOTA |
1. REZULTATAS: Šiuose bituose (nuo 6 iki 15) yra pasirinkto kanalo A / D konversijos rezultatas ADCR SEL registre. Vertė nuskaitoma tik baigus A / D konversiją, ir tai rodo DONE bitai.
PAVYZDYS: 10 bitų ADC rezultate išsaugota vertė svyruoja nuo (0 iki 1023).
2. KANALAS: šiuose bituose nuo 24 iki 26 yra kanalo numeris, kuriam atliekama A / D konversija. Konvertuota skaitmeninė vertė yra RESULT bitų.
PAVYZDYS: 000 skirtas ADC 0 kanalui, o 001 - 1 ADC kanalui ir kt
3. OVERRUN: 30 -asis OVERRUN bitas naudojamas BURST režime. Nustačius 1, ankstesnė konvertuota ADC reikšmė perrašoma naujai konvertuota ADC verte. Kai registras perskaitomas, jis išvalo OVERRUN bitą.
4. ATLIKTA: 31 bitas skirtas DONE bitui.
1 rinkinys: kai baigsite A / D konversiją.
0 rinkinys: kai registras yra nuskaitytas ir ADCR parašytas.
Apie svarbius registrus, kurie naudojami ADC, matėme LPC2148. Dabar galime pradėti naudoti ADC ARM7.
Būtini komponentai
Aparatinė įranga
- ARM7-LPC2148 mikrovaldiklis
- 3,3 V įtampos reguliatoriaus IC
- 5 V įtampos reguliatoriaus IC
- 10K potenciometras - 2 Nr
- LED (bet kokios spalvos)
- LCD ekranas (16X2)
- 9 V akumuliatorius
- Bandomoji Lenta
- Laidų sujungimas
Programinė įranga
- „Keil uVision“
- „Magic Flash“ įrankis
Grandinės schema
Žemiau esančioje lentelėje parodytos grandinės jungtys tarp LCD ir ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS („Register Select“) |
P0.6 |
E (įjungti) |
P0.12 |
D4 (4 duomenų kaištis) |
P0.13 |
D5 (5 duomenų kaištis) |
P0.14 |
D6 (6 duomenų kaištis) |
P0.15 |
D7 (7 duomenų kaištis) |
Sužinokite daugiau apie LCD naudojimą su ARM 7 - LPC2148.
SVARBU: Čia mes naudojame du įtampos reguliatorių IC, skirtus 5 V LCD ekranui, ir dar 3,3 V, skirtą analoginei įėjimui, kurį galima keisti potenciometru.
Jungtys tarp 5 V įtampos reguliatoriaus su LCD ir „ARM7 Stick“
5 V įtampos reguliatoriaus IC |
PIN funkcija |
LCD ir ARM-7 LPC2148 |
1. Kairysis kaištis |
+ Ve iš akumuliatoriaus 9V įvesties |
NC |
2. Centro kaištis |
- Ve iš akumuliatoriaus |
LCD VSS, R / W, K ARM7 BND |
3. Dešinysis kaištis |
Reguliuojama + 5 V išvestis |
VDD, A skystųjų kristalų ekranas + 5 V ARM7 |
Potenciometras su LCD
Skystųjų kristalų ekrano kontrastui keisti naudojamas potenciometras. Puode yra trys kaiščiai, kairysis kaištis (1) prijungtas prie + 5 V, o centras (2) prie LCD modulio VEE arba V0, o dešinysis kaištis (3) prijungtas prie GND. Kontrastą galime reguliuoti sukdami rankenėlę.
Ryšys tarp LPC2148 ir potenciometro su 3,3 V įtampos reguliatoriumi
3,3 V įtampos reguliatoriaus IC |
PIN funkcija |
ARM-7 LPC2148 |
1. Kairysis kaištis |
- Ve iš akumuliatoriaus |
BND kaištis |
2. Centro kaištis |
Reguliuojama + 3,3 V išvestis |
Į potenciometro įėjimą ir potenciometro išėjimą į P0.28 |
3. Dešinysis kaištis |
+ Ve iš akumuliatoriaus 9V įvesties |
NC |
ARM7-LPC2148 programavimas ADC
Norėdami programuoti ARM7-LPC2148, mums reikia „Keil uVision“ ir „Flash Magic“ įrankio. „ARM7 Stick“ programavimui per „micro USB“ prievadą naudojame USB kabelį. Mes rašome kodą naudodami „Keil“ ir sukuriame hex failą, tada HEX failas perduodamas į „ARM7“ lazdelę naudojant „Flash Magic“. Norėdami sužinoti daugiau apie „Keil uVision“ ir „Flash Magic“ diegimą ir kaip juos naudoti, spustelėkite nuorodą „Darbo pradžia su„ ARM7 LPC2148 “mikrovaldikliu ir užprogramuokite naudodami„ Keil uVision “.
Šioje pamokoje konvertuojame analoginę įėjimo įtampą (nuo 0 iki 3,3 V) į skaitmeninę vertę, naudojant ADC LPC2148, ir rodome analoginę įtampą LCD ekrane (16x2). Norint pakeisti įvesties analoginę įtampą, bus naudojamas potenciometras.
Norėdami sužinoti daugiau apie LCD sąsają su ARM7-LPC2148 4 bitų režimu, spustelėkite šią nuorodą.
Visiškai kodas naudojant ADC su ARM 7 skiriamas šio pamoka pabaigoje, čia mes paaiškinti keletą jo dalis.
Veiksmai, susiję su LPC2148-ADC programavimu
1. PINSEL registras naudojamas pasirinkti LPC2148 prievado kaištį ir ADC funkciją kaip analoginę įvestį.
PINSEL1 = 0x01000000; // Pasirinkite P0.28 kaip AD0.1
2. Pasirinkite konversijos laikrodį ir bitų tikslumą, įrašydami vertę į ADxCR (ADC valdymo registrą).
AD0CR = 0x00200402; // Nustato ADC operaciją kaip 10 bitų / 11 CLK konversijai (000)
3. Pradėkite konvertavimą užrašydami reikšmę START bitais ADxCR.
Čia aš parašiau į 24 -ąjį AD0CR registro bitą.
AD0CR = AD0CR - (1 << 24);
4. Dabar mes turime patikrinti DONE bitą (31-ą) atitinkamo ADxDRy (ADC duomenų registro), kai jis keičiasi nuo 0 iki 1. Taigi mes naudojame while ciklą, kad nuolat patikrintume, ar konversija atliekama 31- ajame duomenų registro bite.
o (! (AD0DR1 ir 0x80000000));
5. Nustačius, kad atliktas bitas yra 1, konversija yra sėkminga. Toliau mes perskaitome rezultatus iš to paties ADC duomenų registro AD0DR1 ir išsaugome vertę kintamajame.
adcvalue = AD0DR1;
Toliau mes naudojame formulę, kad paverstume skaitmeninę vertę įtampa ir saugotume kintamajame, pavadintame įtampa .
įtampa = ((adcvalue / 1023.0) * 3.3);
5. Skaitmeninėms vertėms (nuo 0 iki 1023) parodyti po analoginio į skaitmeninį keitimo naudojamos šios eilutės.
adc = adcvalue; sprintf (displayadc, "adcvalue =% f", adc); LCD_DISPLAY (displayadc); // Rodyti ADC vertę (nuo 0 iki 1023)
6. Toliau nurodytos eilutės naudojamos įvesties analoginei įtampai (nuo 0 iki 3,3 V) rodyti po analoginio į skaitmeninį keitimą ir po 5 žingsnio.
LCD_SEND (0xC0); sprintf (įtampos vertė, "Įtampa =%. 2f V", įtampa); LCD_DISPLAY (voltvalue); // Ekranas (įvesties analoginė įtampa)
7. Dabar LCD ekrane turime rodyti įėjimo įtampą ir skaitmenines vertes. Prieš tai turime inicijuoti skystųjų kristalų ekraną ir naudoti atitinkamas komandas rodyti pranešimą.
Žemiau pateiktas kodas naudojamas inicijuojant LCD ekraną
void LCD_INITILIZE (void) // Funkcija paruošti skystųjų kristalų ekraną { IO0DIR = 0x0000FFF0; // nustato kaiščius P0.12, P0.13, P0.14, P0.15, P0.4, P0.6 kaip OUTPUT delay_ms (20); LCD_SEND (0x02); // Inicijuoti lcd 4 bitų darbo režimu LCD_SEND (0x28); // 2 eilutės (16X2) LCD_SEND (0x0C); // Rodyti žymeklį išjungus LCD_SEND (0x06); // Automatinio prieaugio žymeklis LCD_SEND (0x01); // Rodyti aiškų LCD_SEND (0x80); // Pirmos eilutės pirma pozicija }
Žemiau pateiktas kodas naudojamas rodyti vertes LCD
klaidinga LCD_DISPLAY (char * msg) // funkcija spausdinti simbolius išsiųstas po vieną { uint8_t i = 0; o (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // Siunčia viršutinį nibble IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH spausdinti duomenis IO0CLR = 0x00000020; // RW LOW Rašymo režimo delsos_ms (2); IO0CLR = 0x00000040; // EN = 0, RS ir RW nepakitę (ty RS = 1, RW = 0) delsa_ms (5); IO0PIN = ((IO0PIN ir 0xFFFF00FF) - ((msg & 0x0F) << 12)); // Siunčia apatinį nibble IO0SET = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; delsimo_ms (2); IO0CLR = 0x00000040; delsimo_ms (5); i ++; } }
Žemiau funkcija naudojama uždelsimui sukurti
void delay_ms (uint16_t j) // Funkcija uždelsti milisekundėmis { uint16_t x, i; už (i = 0; i
Visas kodas su demonstraciniu vaizdo įrašu pateikiamas žemiau.