- Mikä on ADC?
- ADC ARM7-LPC2148: ssa
- ADC-nastat ARM7-LPC2148: ssa
- ADC-rekisterit ARM7-LPC2148: ssa
- ADxCR-rekisteröinti LPC2148: een
- ADxGDR: ADC: n maailmanlaajuinen tietorekisteri
- Tarvittavat komponentit
- Piirikaavio
- ARM7-LPC2148: n ohjelmointi ADC: lle
Elektroniikkamaailmassa on markkinoilla monia erilaisia analogisia antureita, joita käytetään lämpötilan, nopeuden, siirtymän, paineen jne. Mittaamiseen. Analogisia antureita käytetään tuottamaan tuotoksia, jotka muuttuvat jatkuvasti ajan myötä. Näiden analogisten antureiden signaalien arvo on yleensä hyvin pieni muutamasta mikrovoltista (uV) useisiin millivoltteihin (mV), joten tarvitaan jonkinlainen vahvistaminen. Näiden analogisten signaalien käyttämiseksi mikro-ohjaimessa meidän on muunnettava analoginen signaali digitaaliseksi signaaliksi, kun mikro-ohjain ymmärtää ja käsittelee vain digitaalisia signaaleja. Joten suurimmalla osalla mikrokontrolleria on sisäänrakennettu tärkeä ominaisuus, jota kutsutaan ADC: ksi (analogisesta digitaaliseen muuntimeen). Mikrokontrollerissamme ARM7-LPC2148 on myös ADC-ominaisuus.
Tässä opetusohjelmassa näemme, kuinka ADC: tä käytetään ARM7-LPC2148: ssa toimittamalla vaihteleva jännite analogiseen tapiin ja näyttämällä se 16x2-nestekidenäytöllä analogisesta digitaaliseen muuntamisen jälkeen. Joten aloitetaan lyhyellä johdannolla ADC: stä.
Mikä on ADC?
Kuten aiemmin mainittiin, ADC tarkoittaa analogista digitaalimuunnosta ja sitä käytetään muuntaa analogiset arvot todellisesta maailmasta digitaalisiksi arvoiksi, kuten 1 ja 0. Joten mitkä ovat nämä analogiarvot? Nämä ovat niitä, jotka näemme jokapäiväisessä elämässämme, kuten lämpötila, nopeus, kirkkaus jne. Nämä parametrit mitataan analogisina jännitteinä vastaavilla antureilla ja sitten nämä analogiset arvot muunnetaan mikrokontrollerien digitaalisiksi arvoiksi.
Oletetaan, että ADC-alueemme on välillä 0 V - 3,3 V ja meillä on 10-bittinen ADC, mikä tarkoittaa, että tulojännitteemme 0-3,3 volttia jaetaan 1024 tasoon erillisiä analogiarvoja (2 10 = 1024). Tarkoitus 1024 on 10-bittisen ADC: n resoluutio, samoin 8-bittisen ADC-tarkkuuden ollessa 512 (28) ja 16-bittisen ADC-tarkkuuden ollessa 65 536 (216). LPC2148: lla on 10-bittinen resoluutio ADC.
Tällöin, jos todellinen tulojännite on 0 V, MCU: n ADC lukee sen 0: ksi ja jos se on 3,3 V, MCU lukee 1024 ja jos se on jossakin välissä kuten 1,65 V, niin MCU lukee 512. Voimme käyttää seuraavaa kaavat laskemaan digitaalinen arvo, jonka MCU lukee ADC: n resoluution ja käyttöjännitteen perusteella.
(ADC-tarkkuus / käyttöjännite) = (ADC-digitaaliarvo / todellinen jännite-arvo)
Kuten esimerkiksi jos vertailujännite on 3v:
Selitimme ADC: n yksityiskohtaisesti edellisessä artikkelissa.
ADC ARM7-LPC2148: ssa
- LPC2148 sisältää kaksi analogia-digitaalimuunninta.
- Nämä muuntimet ovat yksittäisiä 10-bittisiä peräkkäisiä analogia-digitaalimuuntimia.
- Vaikka ADC0: lla on kuusi kanavaa, ADC1: llä on kahdeksan kanavaa.
- Siksi LPC2148: n käytettävissä olevien ADC-tulojen kokonaismäärä on 14.
- Se muuntaa tulojännitteen vain välillä (0-3,3 V). Se ei saa ylittää 3,3 V: n jänniteohjetta. Koska se vahingoittaa IC: tä ja antaa myös epävarmoja arvoja.
Joitakin ADC: n tärkeitä ominaisuuksia LPC2148: ssa
- Jokainen muunnin pystyy suorittamaan yli 400000 10-bittistä näytettä sekunnissa.
- Jokaisella analogitulolla on oma tulosrekisteri keskeytyksen yleiskustannusten vähentämiseksi.
- Burst-muunnostila yhdelle tai useammalle tulolle.
- Valinnainen muunnos tulonastan tai ajastimen vastaavuussignaalin siirtymässä.
- Global Start -komento molemmille muuntimille.
Tarkista myös, kuinka ADC: tä käytetään muissa mikro-ohjaimissa:
- Kuinka käyttää ADC: tä Arduino Unossa?
- ADC0808: n ja 8051-mikrokontrollerin liitäntä
- Käyttämällä PIC-mikrokontrollerin ADC-moduulia
- Vadelma Pi ADC -opastus
- Kuinka käyttää ADC: tä MSP430G2: ssa - Analogisen jännitteen mittaaminen
- Kuinka käyttää ADC: tä STM32F103C8: ssa
ADC-nastat ARM7-LPC2148: ssa
Kuten kertoi earliar, ARM7-LPC2148: ssa on kaksi kanavaa ADC0, jossa on 6 analogista tulotappia, ja ADC1, jossa on 8 analogista tulotappia. Joten analogisia tuloja on 14 nastaa. Alla oleva kaavio näyttää nastat, jotka ovat käytettävissä analogista tuloa varten.
Koska ADC-tuloliittimet multipleksoidaan muiden GPIO-nastojen kanssa. Meidän on otettava ne käyttöön määrittämällä PINSEL-rekisteri ADC-toiminnon valitsemiseksi.
Alla olevassa taulukossa esitetään ADC: n nastat ja kunnioitettu ADC-kanavanumero LPC2148: ssa. AD0 on kanava 0 ja AD1 on kanava 1
LPC2148 tappi |
ADC-kanavanumero |
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-rekisterit ARM7-LPC2148: ssa
Rekisteriä käytetään ohjelmoinnissa A / D-muunnostoiminnon käyttämiseen LPC2148: ssa.
Alla on luettelo rekistereistä, joita LPC2148 käyttää A / D-muunnokseen
1. ADCR: Analogisesta digitaaliseen ohjausrekisteriin
Käyttö: Tätä rekisteriä käytetään A / D-muuntimen määrittämiseen LPC2148: ssa
2. ADGDR: Analogisesta digitaaliseen globaaliin tietorekisteriin
Käyttö: Tässä rekisterissä on DONE-bitti A / D-muuntimelle ja muunnoksen TULOS tallennetaan tähän.
3. ADINTERN: Analogisesta digitaaliseen keskeytykseen käyttöön -rekisteri
Käyttö: Tämä on Interrupt Enable -rekisteri.
4. ADDR0 - ADDR7: Analogisesta digitaaliseen kanavaan -rekisteri
Käyttö: Tämä rekisteri sisältää kanavien A / D-arvon.
5. ADSTAT: Analogisesta digitaaliseen tilarekisteri.
Käyttö: Tämä rekisteri sisältää DONE-lipun vastaavalle ADC-kanavalle ja myös OVERRUN-lipun vastaavalle ADC-kanavalle.
Tässä opetusohjelmassa käytämme vain ADCR- ja ADGDR-rekistereitä. Katsotaanpa niistä yksityiskohtaisesti
ADxCR-rekisteröinti LPC2148: een
AD0CR ja AD1CR kanavalle 0 ja vastaavasti kanavalle 1. Se on 32-bittinen rekisteri. Alla oleva taulukko osoittaa ADCR-rekisterin bittikentät.
31:28 |
27 |
26:24 |
23:22 |
21 |
20 |
19:17 |
16 |
15: 8 |
7: 0 |
VARATTU |
REUNA |
ALKAA |
VARATTU |
PDN |
VARATTU |
CLKS |
RÄJÄHTÄÄ |
CLCKDIV |
SEL |
Katsotaanpa, kuinka yksittäiset rekisterit määritetään
1. SEL: Bittejä välillä (0 - 7) käytetään valitsemaan kanava ADC-muunnosta varten. Jokaiselle kanavalle on varattu yksi bitti. Esimerkiksi asettamalla Bit-0, ADC saa näytteen AD0.1 muunnettavaksi. Ja bitin -1 asettaminen tekee AD0.1: stä; samalla tavalla asettamalla bitti 7 tekee muunnoksen AD0.7: lle. Tärkeä vaihe on, että meillä on PINSEL käytetyn portin mukaan, esimerkiksi PINSEL0 PORT0: lle PLC2148: ssa.
2. CLCKDIV: Bitit välillä (8-15) ovat kellonjakajalle. Tässä APB-kello (ARM Peripheral Bus clock) jaetaan tällä arvolla plus yhdellä A / D-muuntimelle tarvittavan kellon tuottamiseksi, jonka pitäisi olla pienempi tai yhtä suuri kuin 4,5 MHz, koska käytämme peräkkäistä likiarviointimenetelmää LPC2148: ssa.
3. BURST: Bittiä 16 käytetään BURST-muunnostilaan.
Asetus 1: ADC suorittaa muunnoksen kaikille kanaville, jotka on valittu SEL-bitteinä.
Asetus 0: Poistaa BURST-muunnostilan käytöstä.
4. CLCKS: Kolme bittiä (17 - 19) käytetään resoluution ja kellojen lukumäärän valitsemiseen A / D-muunnokselle pursketilassa, koska se on jatkuva A / D-muunnostila.
Bittien arvo (17-19) |
Bittiä (tarkkuus) |
Kellon numero |
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: Terä 21 on valitsemiseksi Tehonsäästötilasta ADC vuonna LPC2148.
- A / D on PDN-tilassa.
- A / D on toimintatilassa
6. KÄYNNISTYS: Bitit välillä (24 - 26) ovat KÄYNNISTYS. Kun BURST-muunnostila on pois päältä asettamalla 0, näistä START-biteistä on hyötyä A / D-muunnoksen aloittamiselle. STARTia käytetään myös reunaohjattuun muunnokseen. Silloin kun LPC2148: n CAP- tai MAT-nastassa on tulo, A / D alkaa muuntaa. Tarkistetaan alla oleva taulukko
Bittien arvo (24-26) |
LPC2148: n tapit |
ADC: n toiminta |
000 |
Käytetään ADC: n asettamiseen PDN-tilassa Ei alkua |
|
001 |
Aloita A / D-muunnos |
|
010 |
CAP0.2 / MAT0.2 |
Aloita A / D-muunnos LPC2148: n CAP / MAT-nastojen tapista 27 (nouseva tai putoava) valitulla EDGE |
011 |
CAP0.0 / MAT0.0 |
|
100 |
MAT0.1 |
|
101 |
MAT0.3 |
|
110 |
MAT1.0 |
|
111 |
MAT1.1 |
7. EDGE: 27 th bitti on EDGE käytetään vain silloin, kun START-bitti sisältää 010-111. Se aloittaa muuntamisen, kun on olemassa CAP- tai MAT-tulo, josta näet yllä olevan taulukon.
Asetus : 0 - On Falling Edge
1 - On Rising Edge
ADxGDR: ADC: n maailmanlaajuinen tietorekisteri
AD0GDR ja AD1GDR ADC-kanavalle 0 ja ADC-kanavalle 1.
Se on 32-bittinen rekisteri, joka sisältää A / D-muunnoksen TULOKSEN ja myös DONE-bitin, joka osoittaa, että A / D-muunnos on tehty. Taulukon alapuolella näkyvät ADGDR-rekisterin bittikentät.
31 |
30 |
29:27 |
26:24 |
23:16 |
15: 6 |
5: 0 |
TEHTY |
YLITTY |
VARATTU |
CHN |
VARATTU |
TULOS |
VARATTU |
1. TULOS: Nämä bitit (6-15) sisältävät valitun kanavan ACR-muunnoksen tuloksen ADCR SEL -rekisterissä. Arvo luetaan vasta A / D-muunnoksen päätyttyä, ja tämä ilmaistaan DONE- bitillä.
ESIMERKKI: 10-bittisen ADC-tuloksen tallennettu arvo vaihtelee välillä (0-1023).
2. KANAVA: Nämä bitit 24 - 26 sisältävät kanavanumeron, jolle A / D-muunnos tehdään. Muunnettu digitaalinen arvo esiintyy RESULT-bitissä.
ESIMERKKI: 000 on ADC-kanavalle 0 ja 001 ADC-kanavalle 1 jne
3. OVERRUN-: 30 th bitti OVERRUN- käytetään BURST tilassa. Kun asetus on 1, edellinen muunnettu ADC-arvo korvataan uudella muunnetulla ADC-arvolla. Kun rekisteri on luettu, se tyhjentää OVERRUN-bitin.
4. DONE: 31. bitti on DONE-bitille.
Sarja 1: Kun A / D-muunnos on valmis.
Aseta 0: Kun rekisteri on luettu ja ADCR kirjoitettu.
Olemme nähneet tärkeistä rekistereistä, joita ADC: ssä käytetään LPC2148: ssa. Aloitetaan nyt ADC: n käyttö ARM7: ssä.
Tarvittavat komponentit
Laitteisto
- ARM7-LPC2148-mikrokontrolleri
- 3,3 V: n jännitesäätimen IC
- 5 V: n jännitesäätimen IC
- 10K-potentiometri - 2 numeroa
- LED (mikä tahansa väri)
- LCD-näyttö (16X2)
- 9 V: n akku
- Leipälauta
- Johtojen liittäminen
Ohjelmisto
- Keil uVision 5
- Magic Flash -työkalu
Piirikaavio
Seuraavassa taulukossa on esitetty LCD-liitännät ja ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (Rekisteröi valinta) |
P0.6 |
E (Ota käyttöön) |
P0.12 |
D4 (tietotappi 4) |
P0.13 |
D5 (tietotappi 5) |
P0.14 |
D6 (tietotappi 6) |
P0.15 |
D7 (tietotappi 7) |
Lisätietoja LCD-näytön käytöstä ARM 7 - LPC2148: n kanssa.
TÄRKEÄÄ: Tässä käytetään kahta jännitteen säätöpiiriä, yksi 5 V: n LCD-näytölle ja toinen 3,3 V: n analogiselle tulolle, jota voidaan muuttaa potentiometrillä.
Liitännät 5 V: n jännitesäätimen välillä LCD-näytöllä ja ARM7-tikulla
5 V: n jännitesäätimen IC |
Pin-toiminto |
LCD & ARM-7 LPC2148 |
1. vasen tappi |
+ Ve akun 9 V: n tulosta |
NC |
2. keskuksen tappi |
- Ve akusta |
LCD-näytön VSS, R / W, K ARM7: n GND |
3.Oikea tappi |
Säädetty + 5 V: n lähtö |
LCD: n VDD, A + 5 V ARM7: stä |
Potentiometri LCD-näytöllä
Potentiometriä käytetään nestekidenäytön kontrastin muuttamiseen. Potissa on kolme nastaa, vasen nasta (1) on kytketty + 5 V: een ja keskiosa (2) LCD-moduulin VEE: hen tai V0: een ja oikea nasta (3) on kytketty GND: hen. Voimme säätää kontrastia kääntämällä nuppia.
Yhteys LPC2148: n ja 3,3 V: n jännitesäätimellä varustetun potentiometrin välillä
3,3 V: n jännitesäätimen IC |
Pin-toiminto |
ARM-7 LPC2148 |
1. vasen tappi |
- Ve akusta |
GND-tappi |
2. keskuksen tappi |
Säädetty + 3,3 V: n lähtö |
Potentiometrin tuloon ja potentiometrin lähtöön kohtaan P0.28 |
3.Oikea tappi |
+ Ve akun 9 V: n tulosta |
NC |
ARM7-LPC2148: n ohjelmointi ADC: lle
ARM7-LPC2148: n ohjelmointiin tarvitaan keil uVision & Flash Magic -työkalu. Ohjelmoimme ARM7 Stick USB-kaapelilla mikro-USB-portin kautta. Kirjoitamme koodin Keilillä ja luomme heksatiedoston ja sitten HEX-tiedosto välitetään ARM7-tikkuun Flash Magicilla. Jos haluat tietää enemmän Keil uVisionin ja Flash Magicin asentamisesta ja niiden käytöstä, seuraa linkkiä Aloittaminen ARM7 LPC2148 -mikrokontrollerilla ja ohjelmoi se Keil uVisionin avulla.
Tässä opetusohjelmassa muunnamme analogisen tulojännitteen (0-3,3 V) digitaaliseksi arvoksi käyttämällä ADC: tä LPC2148: ssa ja näytämme analogisen jännitteen LCD-näytöllä (16x2). Potentiometriä käytetään analogisen tulojännitteen muuttamiseen.
Jos haluat tietää enemmän LCD-näytön ja ARM7-LPC2148 4-bittisen tilan liittämisestä, seuraa tätä linkkiä.
Koodin kokonaisuudessaan käyttämällä ADC ARM 7 annetaan lopussa tämä opetusohjelma, täällä me selittää muutamia osia siitä.
Vaiheet, jotka liittyvät LPC2148-ADC-ohjelmointiin
1. PINSEL-rekisteriä käytetään valitsemaan LPC2148: n porttitappi ja ADC-toiminto analogitulona.
PINSEL1 = 0x01000000; // Valitse AD0.1: ksi P0.28
2. Valitse muunnoksen kello ja bittitarkkuus kirjoittamalla arvo ADxCR: ään (ADC-ohjausrekisteri).
AD0CR = 0x00200402; // Asettaa ADC-toiminnan 10-bittiseksi / 11 CLK muunnokseksi (000)
3. Aloita muunnos kirjoittamalla arvo START-bitteiksi ADxCR: ssä.
Tässä olen kirjoittanut 24 : nnen hieman AD0CR rekisteriin.
AD0CR = AD0CR - (1 << 24);
4. Nyt meidän on tarkistettava DONE-bitti (31.) vastaavasta ADxDRy-tiedostosta (ADC-tietorekisteri), kun se muuttuu 0: sta 1: een. Tarkistamme siis while- silmukkaa jatkuvasti tarkistamaan, onko muunnos tehty tietorekisterin 31. bitillä.
kun (! (AD0DR1 & 0x80000000));
5. Kun valmis bitti on asetettu arvoon 1, muunnos onnistuu, seuraavaksi luemme tuloksen samasta ADC-rekisteristä AD0DR1 ja tallennamme arvon muuttujaan.
adcvalue = AD0DR1;
Seuraavaksi käytämme kaavaa, jolla muunnetaan digitaalinen arvo jännitteeksi ja tallennetaan muuttujaksi nimeltään jännite .
jännite = ((arvonarvo / 1023,0) * 3,3);
5. Seuraavia rivejä käytetään digitaalisten arvojen (0-1023) näyttämiseen analogisesta digitaalimuunnoksen jälkeen.
adc = mainosarvo; sprintf (displayadc, "adcvalue =% f", adc); LCD_DISPLAY (displayadc); // Näytä ADC-arvo (0-1023)
6. Seuraavia rivejä käytetään analogisen tulon jännitteen (0 - 3,3 V) näyttämiseen analogisesta digitaaliseen muuntamisen jälkeen ja vaiheen 5 jälkeen.
LCD_SEND (0xC0); sprintf (voltiarvo, "Jännite =%. 2f V", jännite); LCD_DISPLAY (voltiarvo); // Näyttö (analoginen tulojännite)
7. Nyt meidän on näytettävä tulojännite ja digitaaliset arvot LCD-näytöllä. Sitä ennen meidän on alustettava nestekidenäyttö ja käytettävä asianmukaisia komentoja näytettävän viestin lähettämiseen.
Alla olevaa koodia käytetään LCD-näytön alustamiseen
void LCD_INITILIZE (void) // Toiminto LCD-näytön valmistelemiseksi { IO0DIR = 0x0000FFF0; // asettaa nastat P0.12, P0.13, P0.14, P0.15, P0.4, P0.6 OUTPUT delay_ms (20); LCD_SEND (0x02); // Alusta LCD 4-bittisessä toimintatilassa LCD_SEND (0x28); // 2 riviä (16X2) LCD_SEND (0x0C); // Näyttö kohdistimen kohdalla pois päältä LCD_SEND (0x06); // Automaattinen lisäyskohdistin LCD_SEND (0x01); // Näytä selkeä LCD_SEND (0x80); // Ensimmäisen rivin ensimmäinen sijainti }
Alla olevaa koodia käytetään arvojen näyttämiseen nestekidenäytössä
void LCD_DISPLAY (char * msg) // Toiminto tulostaa merkit lähetetään yksitellen { uint8_t i = 0; kun (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // Lähettää ylemmän näytteen IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH tulostamaan tietoja IO0CLR = 0x00000020; // RW LOW Kirjoitustilan viive_ms (2); IO0CLR = 0x00000040; // EN = 0, RS ja RW muuttumattomina (ts. RS = 1, RW = 0) delay_ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((viesti & 0x0F) << 12)); // Lähettää alemman naposteltavan IO0SET = 0x00000050; // RS & EN KORKEA IO0CLR = 0x00000020; viive_ms (2); IO0CLR = 0x00000040; viive_ms (5); i ++; } }
Alla-toimintoa käytetään viiveiden luomiseen
void delay_ms (uint16_t j) // Funktio viiveen tekemiseksi millisekunteina { uint16_t x, i; (i = 0; i
Täydellinen koodi esittelyvideolla on alla.