- Čo je to ADC?
- ADC v ARM7-LPC2148
- Piny ADC v ARM7-LPC2148
- Registre ADC v ARM7-LPC2148
- ADxCR Registrácia v LPC2148
- ADxGDR: Globálny register údajov ADC
- Súčasti sú povinné
- Schéma zapojenia
- Programovanie ARM7-LPC2148 pre ADC
V elektronickom svete je na trhu mnoho druhov analógových snímačov, ktoré sa používajú na meranie teploty, rýchlosti, výtlaku, tlaku atď. Analógové snímače sa používajú na výrobu výkonu, ktorý sa neustále mení. Tieto signály z analógových snímačov majú tendenciu mať veľmi malú hodnotu od niekoľkých mikro voltov (uV) do niekoľkých mili voltov (mV), takže je potrebná určitá forma zosilnenia. Na použitie týchto analógových signálov v mikrokontroléri musíme konvertovať analógový signál na digitálny, pretože mikrokontrolér rozumie a spracováva iba digitálne signály. Väčšina mikrokontrolérov má teda zabudovanú dôležitú funkciu nazývanú ADC (analógovo-digitálny prevodník). Náš mikrokontrolér ARM7-LPC2148 má tiež funkciu ADC.
V tomto tutoriále uvidíme, ako používať ADC v ARM7-LPC2148 dodaním meniaceho sa napätia na analógový pin a po analógovo-digitálnej konverzii ho zobraziť na obrazovke LCD 16x2. Začnime teda krátkym úvodom o ADC.
Čo je to ADC?
Ako už bolo povedané, ADC je skratka pre analógový prevod na digitálny a používa sa na prevod analógových hodnôt zo skutočného sveta na digitálne hodnoty ako 1 a 0. Čo sú to teda analógové hodnoty? To sú tie, ktoré vidíme v každodennom živote, ako je teplota, rýchlosť, jas atď. Tieto parametre sú merané ako analógové napätia príslušnými snímačmi a potom sú tieto analógové hodnoty prevádzané do digitálnych hodnôt pre mikrokontroléry.
Predpokladajme, že náš rozsah ADC je od 0 V do 3,3 V a máme 10-bitový ADC, čo znamená, že naše vstupné napätie 0-3,3 voltov bude rozdelené na 1024 úrovní diskrétnych analógových hodnôt (2 10 = 1024). To znamená, že 1024 je rozlíšenie pre 10-bitový ADC, podobne pre 8-bitové rozlíšenie ADC bude 512 (28) a pre 16-bitové rozlíšenie ADC bude 65 536 (216). LPC2148 má 10-bitové rozlíšenie ADC.
S týmto, ak je skutočné vstupné napätie 0 V, bude potom ADC MCU čítať ako 0 a ak bude 3,3 V, bude čítať 1024 MCU a ak bude niekde medzi nimi 1,65 V, potom bude čítať 512 MCU. Môžeme použiť nižšie uvedené vzorce na výpočet digitálnej hodnoty, ktorú bude čítať MCU na základe rozlíšenia ADC a prevádzkového napätia.
(Rozlíšenie ADC / Prevádzkové napätie) = (Digitálna hodnota ADC / Skutočná hodnota napätia)
Napríklad, ak je referenčné napätie 3v:
ADC sme podrobne vysvetlili v predchádzajúcom článku.
ADC v ARM7-LPC2148
- LPC2148 obsahuje dva analógovo-digitálne prevodníky.
- Tieto prevodníky sú jednoduché 10-bitové postupné približovacie analógovo-digitálne prevodníky.
- Zatiaľ čo ADC0 má šesť kanálov, ADC1 má osem kanálov.
- Preto je celkový počet dostupných vstupov ADC pre LPC2148 14.
- Prevedie vstupné napätie iba v rozsahu (0 až 3,3 V). Nesmie prekročiť 3,3 V referenčného napätia. Pretože to poškodí integrovaný obvod a poskytne aj neisté hodnoty.
Niektoré dôležité vlastnosti ADC v LPC2148
- Každý prevodník schopný vykonávať viac ako 400 000 10-bitových vzoriek za sekundu.
- Každý analógový vstup má vyhradený register výsledkov, ktorý znižuje réžiu prerušenia.
- Režim sekvenčnej konverzie pre jeden alebo viac vstupov.
- Voliteľná konverzia pri prechode na vstupný pin alebo signál zhody časovača.
- Príkaz Global Start pre oba prevádzače.
Skontrolujte tiež, ako používať ADC v iných mikrokontroléroch:
- Ako používať ADC v Arduino Uno?
- Prepojenie ADC0808 s mikrokontrolérom 8051
- Pomocou modulu ADC mikrokontroléra PIC
- Výukový program ADC pre Raspberry Pi
- Ako používať ADC v MSP430G2 - Meranie analógového napätia
- Ako používať ADC v STM32F103C8
Piny ADC v ARM7-LPC2148
Ako už bolo povedané, v ARM7-LPC2148 existujú dva kanály ADC0 so 6 analógovými vstupnými kolíkmi a ADC1 s 8 analógovými vstupnými kolíkmi. Celkovo teda existuje 14 pinov pre analógové vstupy. Nasledujúca schéma zobrazuje kolíky, ktoré sú k dispozícii pre analógový vstup.
Pretože vstupné piny ADC sú multiplexované s inými pinmi GPIO. Musíme ich povoliť nakonfigurovaním registra PINSEL na výber funkcie ADC.
Nasledujúca tabuľka zobrazuje piny ADC a rešpektované číslo kanálu ADC v LPC2148. AD0 je kanál 0 a AD1 je kanál 1
LPC2148 Pin |
Kanál ADC č |
P0,28 |
AD0.1 |
P0,29 |
AD0.2 |
0,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 |
Registre ADC v ARM7-LPC2148
Registre sa používajú v programovaní na použitie funkcie A / D prevodu v LPC2148.
Ďalej je uvedený zoznam registrov použitých v LPC2148 na A / D prevod
1. ADCR: Analógovo-digitálny riadiaci register
Použitie: Tento register sa používa na konfiguráciu A / D prevodníka v LPC2148
2. ADGDR: Analógovo-digitálny globálny register údajov
Použitie: Tento register má pre A / D prevodník bit DONE a je tu uložený VÝSLEDOK konverzie.
3. ADINTERN: Register umožňujúci prerušenie analógovo-digitálneho prerušenia
Použitie: Toto je register Interrupt Enable.
4. ADDR0 - ADDR7: Analógový digitálny dátový register
Použitie: Tento register obsahuje A / D hodnotu pre príslušné kanály.
5. ADSTAT: Analogový k digitálnemu stavovému registru.
Použitie: Tento register obsahuje príznak DONE pre príslušný kanál ADC a tiež príznak OVERRUN pre príslušný kanál ADC.
V tomto výučbe budeme používať iba registre ADCR a ADGDR. Pozrime sa o nich podrobne
ADxCR Registrácia v LPC2148
AD0CR a AD1CR pre kanál 0, respektíve kanál 1. Je to 32-bitový register. V nasledujúcej tabuľke sú uvedené bitové polia pre register ADCR.
31:28 |
27 |
26:24 |
23:22 |
21 |
20 |
19:17 |
16 |
15: 8 |
7: 0 |
VYHRADENÉ |
HRANA |
ŠTART |
VYHRADENÉ |
PDN |
VYHRADENÉ |
CLKS |
VÝBUCH |
CLCKDIV |
SEL |
Pozrime sa, ako nakonfigurovať jednotlivé registre
1. SEL: Bity od (0 do 7) sa používajú na výber kanálu pre konverziu ADC. Pre každý kanál je pridelený jeden bit. Napríklad nastavenie Bit-0 spôsobí, že ADC prevedie vzorku AD0.1. A nastavením bitu -1 sa vytvorí AD0.1; podobne nastavenie bit-7 vykoná konverziu pre AD0.7. Dôležitým krokom je, že máme PINSEL podľa portu, ktorý používame, napríklad PINSEL0 pre PORT0 v PLC2148.
2. CLCKDIV: Bity od (8 do 15) sú pre Clock Divisor. Tu sú hodiny APB (hodiny periférnej zbernice ARM) vydelené touto hodnotou plus jedna na vytvorenie hodín potrebných pre A / D prevodník, ktoré by mali byť menšie alebo rovné 4,5 MHz, pretože používame postupnú aproximačnú metódu v LPC2148.
3. BURST: Bit 16 sa používa pre režim konverzie BURST.
Nastavenie 1: ADC vykoná konverziu pre všetky kanály, ktoré sú vybrané v bitoch SEL.
Nastavenie 0: Zakáže režim konverzie BURST.
4. CLCKS: Bity od (17 do 19) troch bitov sa používajú na výber rozlíšenia a počtu hodín pre A / D prevod v sekvenčnom režime, pretože ide o režim nepretržitého A / D prevodu.
Hodnota pre bity (17 až 19) |
Bity (presnosť) |
Počet hodín |
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 slúži na výber režimu vypnutia ADC v LPC2148.
- A / D je v režime PDN.
- A / D je v prevádzkovom režime
6. ŠTART: Bity od (24 do 26) sú pre ŠTART. Keď je režim BURST prevodu vypnutý nastavením 0, sú tieto bity START užitočné, keď sa má spustiť A / D prevod. ŠTART sa používa aj na hranou riadený prevod. To znamená, že keď je na vstupe CAP alebo MAT pin LPC2148, A / D sa začne prevádzať. Skontrolujte nasledujúcu tabuľku
Hodnota za bity (24 až 26) |
Špendlíky LPC2148 |
Funkcia ADC |
000 |
Slúži na nastavenie ADC v režime PDN Žiadny štart |
|
001 |
Spustite A / D prevod |
|
010 |
CAP0,2 / MAT0,2 |
Začnite A / D prevod na EDGE vybranom na kolíku 27 (stúpajúci alebo klesajúci) na kolíkoch 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 je pre EDGE sa používa iba vtedy, ak je bit START obsahuje 010-111. Konverziu spustí, keď existuje vstup CAP alebo MAT, ktorý je uvedený vyššie v tabuľke.
Nastavenie : 0 - On Falling Edge
1 - Na stúpajúcej hrane
ADxGDR: Globálny register údajov ADC
AD0GDR a AD1GDR pre kanál ADC 0, respektíve kanál ADC 1.
Jedná sa o 32-bitový register, ktorý obsahuje VÝSLEDOK A / D prevodu a tiež bit DONE, ktorý označuje, že A / D prevod je vykonaný. V nasledujúcej tabuľke sú uvedené bitové polia pre register ADGDR.
31 |
30 |
29:27 |
26:24 |
23:16 |
15: 6 |
5: 0 |
HOTOVÝ |
PREBEHNUTÉ |
VYHRADENÉ |
CHN |
VYHRADENÉ |
VÝSLEDOK |
VYHRADENÉ |
1. VÝSLEDOK: Tieto bity (6 až 15) obsahujú výsledok A / D prevodu pre vybraný kanál v registri ADCR SEL. Hodnota sa načíta až po dokončení A / D prevodu a je to indikované bitom DONE.
PRÍKLAD: Pre 10-bitový výsledok ADC sa uložená hodnota líši od (0 do 1023).
2. KANÁL: Tieto bity 24 až 26 obsahujú číslo kanálu, pre ktorý sa vykonáva A / D prevod. Prevedená digitálna hodnota je prítomná v bite RESULT.
PRÍKLAD: 000 je pre kanál ADC 0 a 001 je pre kanál ADC 1 atď
3. OVERRUN: 30 th bit pre prebeh sa používa v režime sériového snímania. Keď je nastavená hodnota 1, predchádzajúca prevedená hodnota ADC sa prepíše novo prevedenou hodnotou ADC. Po prečítaní registra sa vymaže bit OVERRUN.
4. HOTOVO: 31. bit je pre bit HOTOVO.
Sada 1: Keď je A / D prevod dokončený.
Sada 0: Keď sa register číta a píše sa ADCR.
Videli sme o dôležitých registroch, ktoré sa používajú v ADC v LPC2148. Teraz môžeme začať používať ADC v ARM7.
Súčasti sú povinné
Hardware
- Mikrokontrolér ARM7-LPC2148
- IC regulátora napätia 3,3 V
- 5V regulátor napätia IC
- 10K potenciometer - 2 č
- LED (ľubovoľná farba)
- LCD displej (16X2)
- 9V batéria
- Nepál
- Pripojenie drôtov
Softvér
- Keil uVision5
- Magic Flash Tool
Schéma zapojenia
Nasledujúca tabuľka zobrazuje zapojenie obvodov medzi LCD a ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (Register Select) |
P0.6 |
E (Povoliť) |
P0.12 |
D4 (dátový kolík 4) |
P0.13 |
D5 (dátový kolík 5) |
P0.14 |
D6 (dátový kolík 6) |
P0.15 |
D7 (dátový kolík 7) |
Získajte viac informácií o používaní LCD s ARM 7 - LPC2148.
DÔLEŽITÉ: Tu používame dva integrované obvody regulátora napätia, jeden pre 5V LCD displej a ďalšie 3,3V pre analógový vstup, ktoré sa dajú meniť potenciometrom.
Prepojenia medzi 5V regulátorom napätia s LCD a ARM7 Stick
Integrovaný obvod regulátora napätia 5V |
Funkcia pripnutia |
LCD a ARM-7 LPC2148 |
1. Ľavý kolík |
+ Ve z batérie 9V vstup |
NC |
2. Stredový kolík |
- Ve z batérie |
VSS, R / W, K LCD GND ARM7 |
3. Pravý kolík |
Regulovaný výstup + 5 V. |
VDD, A LCD + 5 V k ARM7 |
Potenciometer s LCD
Na zmenu kontrastu LCD displeja sa používa potenciometer. Hrniec má tri kolíky, ľavý kolík (1) je pripojený k + 5 V a stredový (2) k VEE alebo V0 LCD modulu a pravý kolík (3) je pripojený k GND. Otáčaním gombíka môžeme upraviť kontrast.
Prepojenie medzi LPC2148 a potenciometrom s regulátorom napätia 3,3 V.
IC regulátora napätia 3,3 V |
Funkcia pripnutia |
ARM-7 LPC2148 |
1. Ľavý kolík |
- Ve z batérie |
GND pin |
2. Stredový kolík |
Regulovaný výstup +3,3 V. |
Na potenciometer Vstup a výstup potenciometra na P0,28 |
3. Pravý kolík |
+ Ve z batérie 9V vstup |
NC |
Programovanie ARM7-LPC2148 pre ADC
Na programovanie ARM7-LPC2148 potrebujeme keil uVision & Flash Magic nástroj. Na programovanie karty ARM7 Stick cez port micro USB používame kábel USB. Napíšeme kód pomocou Keila a vytvoríme hexadecimálny súbor. Potom sa HEX súbor nahrá na flash disk ARM7 pomocou Flash Magic. Ak sa chcete dozvedieť viac o inštalácii keil uVision a Flash Magic a o tom, ako ich používať, kliknite na odkaz Začíname s mikrokontrolérom ARM7 LPC2148 a naprogramujte ho pomocou Keil uVision.
V tomto tutoriáli prevádzame analógové vstupné napätie (0 na 3,3 V) na digitálnu hodnotu pomocou ADC v LPC2148 a zobrazujeme analógové napätie na LCD displeji (16x2). Na zmenu vstupného analógového napätia sa použije potenciometer.
Ak sa chcete dozvedieť viac informácií o prepojení LCD s 4-bitovým režimom ARM7-LPC2148, kliknite na tento odkaz.
Kompletné kód pre použitie ADC s ARM 7 je uvedený na konci tohto návodu, tu sme vysvetľovať niekoľko časti.
Kroky zapojené do programovania LPC2148-ADC
1. Register PINSEL sa používa na výber kolíka portu LPC2148 a funkcie ADC ako analógového vstupu.
PINSEL1 = 0x01000000; // Vyberte P0.28 ako AD0.1
2. Vyberte presnosť hodín a bitov pre prevod zapísaním hodnoty do ADxCR (riadiaci register ADC).
AD0CR = 0x00200402; // Nastaví operáciu ADC na 10 bitov / 11 CLK na prevod (000)
3. Konverziu začnite zápisom hodnoty do bitov START v ADxCR.
Tu som napísal až 24 th trochu AD0CR registra.
AD0CR = AD0CR - (1 << 24);
4. Teraz máme mať kontrolu Dané bit (31th) zodpovedajúcich ADxDRy (ADC dátový register), ako sa mení od 0 do 1. Tak využívame zatiaľ čo slučka neustále kontrolovať, či prevod sa vykonáva na 31th bitu dátového registra.
while (! (AD0DR1 & 0x80000000));
5. Keď je bit bit nastavený na 1, prevod je úspešný, potom načítame výsledok z rovnakého dátového registra ADC AD0DR1 a uložíme hodnotu do premennej.
adcvalue = AD0DR1;
Ďalej použijeme vzorec na prevod digitálnej hodnoty na napätie a uloženie do premennej s názvom napätie .
napätie = ((adcvalue / 1023.0) * 3,3);
5. Nasledujúce riadky sa používajú na zobrazenie digitálnych hodnôt (0 až 1023) po analógovo-digitálnej konverzii.
adc = adcvalue; sprintf (displayadc, "adcvalue =% f", adc); LCD_DISPLAY (displayadc); // Zobraziť hodnotu ADC (0 až 1023)
6. Nasledujúce riadky sa používajú na zobrazenie vstupného analógového napätia (0 až 3,3 V) po analógovo-digitálnej konverzii a po kroku 5.
LCD_SEND (0xC0); sprintf (voltvalue, "Napätie =%. 2f V", napatie); LCD_DISPLAY (voltvalue); // Displej (vstupné analógové napätie)
7. Teraz musíme na LCD displeji zobraziť vstupné napätie a digitálne hodnoty. Predtým musíme inicializovať LCD displej a použiť príslušné príkazy na odoslanie správy na zobrazenie.
Nasledujúci kód sa používa na inicializáciu LCD
void LCD_INITILIZE (void) // Funkcia prípravy LCD { IO0DIR = 0x0000FFF0; // Nastaví pin P0.12, P0.13, P0.14, P0.15, P0.4, P0.6 ako OUTPUT delay_ms (20); LCD_SEND (0x02); // Inicializácia lcd v 4-bitovom režime prevádzky LCD_SEND (0x28); // 2 riadky (16X2) LCD_SEND (0x0C); // Vypnuté zobrazenie kurzora LCD_SEND (0x06); // Automatický prírastok kurzora LCD_SEND (0x01); // Zobraziť jasný LCD_SEND (0x80); // Prvý riadok prvá pozícia }
Nižšie uvedený kód sa používa na zobrazenie hodnôt na LCD displeji
void LCD_DISPLAY (char * msg) // funkcie pre tlač znaky poslal jeden po druhom { uint8_t i = 0; while (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // Odošle horný nibble IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH na tlač údajov IO0CLR = 0x00000020; // RW LOW režim zápisu delay_ms (2); IO0CLR = 0x00000040; // EN = 0, RS a RW nezmenené (tj. RS = 1, RW = 0) delay_ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // Odošle dolný nibble IO0SET = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; delay_ms (2); IO0CLR = 0x00000040; delay_ms (5); i ++; } }
Funkcia nižšie sa používa na vytvorenie oneskorenia
void delay_ms (uint16_t j) // Funkcia na vytvorenie oneskorenia v milisekundách { uint16_t x, i; pre (i = 0; i
Kompletný kód s ukážkovým videom je uvedený nižšie.