- Co je ADC?
- ADC v ARM7-LPC2148
- Piny ADC v ARM7-LPC2148
- ADC se registruje v ARM7-LPC2148
- Registrace ADxCR v LPC2148
- ADxGDR: ADC Global Data Register
- Požadované komponenty
- Kruhový diagram
- Programování ARM7-LPC2148 pro ADC
Ve světě elektroniky existuje na trhu mnoho druhů analogových senzorů, které se používají k měření teploty, rychlosti, výtlaku, tlaku atd. Analogové senzory se používají k výrobě výstupu, který se v průběhu času neustále mění. Tyto signály z analogových senzorů mají tendenci mít velmi malou hodnotu od několika mikrovoltů (uV) do několika milivoltů (mV), takže je nutná určitá forma zesílení. Pro použití těchto analogových signálů v mikrokontroléru musíme převést analogový signál na digitální, protože mikrokontrolér rozumí a zpracovává pouze digitální signály. Většina mikrokontroléru má tedy zabudovanou důležitou funkci nazvanou ADC (analogově-digitální převodník). Náš mikrokontrolér ARM7-LPC2148 má také funkci ADC.
V tomto tutoriálu uvidíme, jak použít ADC v ARM7-LPC2148 dodáním měnícího se napětí na analogový pin a jeho zobrazení na 16x2 LCD obrazovce po analogově-digitální konverzi. Začněme tedy krátkým úvodem o ADC.
Co je ADC?
Jak již bylo řečeno, ADC znamená analogový převod na digitální a používá se k převodu analogových hodnot ze skutečného světa na digitální hodnoty jako 1 a 0. Jaké jsou to analogové hodnoty? To jsou ty, které vidíme v našem každodenním životě, jako je teplota, rychlost, jas atd. Tyto parametry jsou měřeny jako analogová napětí příslušnými senzory a poté jsou tyto analogové hodnoty převedeny na digitální hodnoty pro mikrokontroléry.
Předpokládejme, že náš rozsah ADC je od 0 V do 3,3 V a máme 10bitový ADC, to znamená, že naše vstupní napětí 0-3,3 voltů bude rozděleno na 1024 úrovní diskrétních analogových hodnot (2 10 = 1024). To znamená, že 1024 je rozlišení pro 10bitový ADC, podobně pro 8bitové rozlišení ADC bude 512 (28) a pro 16bitové rozlišení ADC bude 65 536 (216). LPC2148 má 10bitové rozlišení ADC.
S tímto, pokud je skutečné vstupní napětí 0V, pak ADC MCU bude číst jako 0 a pokud je 3,3V, bude MCU číst 1024 a pokud bude někde mezi 1,65v, pak bude MCU číst 512. Můžeme použít níže vzorce pro výpočet digitální hodnoty, kterou bude číst MCU na základě rozlišení ADC a provozního napětí.
(Rozlišení ADC / Provozní napětí) = (Digitální hodnota ADC / Skutečná hodnota napětí)
Jako například pokud je referenční napětí 3v:
ADC jsme podrobně vysvětlili v předchozím článku.
ADC v ARM7-LPC2148
- LPC2148 obsahuje dva analogově-digitální převaděče.
- Tyto převaděče jsou jednoduché 10bitové po sobě jdoucí analogové a digitální převaděče.
- Zatímco ADC0 má šest kanálů, ADC1 má osm kanálů.
- Proto je celkový počet dostupných vstupů ADC pro LPC2148 14.
- Převádí vstupní napětí pouze v rozsahu (0 až 3,3 V). Nesmí překročit 3,3 V referenční napětí. Protože to poškodí IC a také poskytne nejisté hodnoty.
Některé důležité funkce ADC v LPC2148
- Každý převaděč schopný provádět více než 400 000 10bitových vzorků za sekundu.
- Každý analogový vstup má vyhrazený registr výsledků, který snižuje režii přerušení.
- Režim sériového převodu pro jeden nebo více vstupů.
- Volitelná konverze při přechodu na vstupním kolíku nebo signálu shody časovače.
- Příkaz Global Start pro oba převaděče.
Zkontrolujte také, jak používat ADC v jiných mikrokontrolérech:
- Jak používat ADC v Arduino Uno?
- Propojení ADC0808 s mikrokontrolérem 8051
- Pomocí modulu ADC mikrokontroléru PIC
- Výukový program ADC pro Raspberry Pi
- Jak používat ADC v MSP430G2 - Měření analogového napětí
- Jak používat ADC v STM32F103C8
Piny ADC v ARM7-LPC2148
Jak již bylo řečeno, v ARM7-LPC2148 existují dva kanály ADC0 se 6 analogovými vstupními piny a ADC1 s 8 analogovými vstupními piny. Celkově tedy existuje 14 pinů pro analogové vstupy. Níže uvedený diagram ukazuje piny, které jsou k dispozici pro analogový vstup.
Protože vstupní piny ADC jsou multiplexovány s jinými piny GPIO. Musíme je povolit konfigurací registru PINSEL pro výběr funkce ADC.
Níže uvedená tabulka ukazuje piny ADC a respektovaného kanálu ADC ne 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 |
ADC se registruje v ARM7-LPC2148
Registry se používají v programování pro použití funkce A / D převodu v LPC2148.
Níže je uveden seznam registrů používaných v LPC2148 pro A / D převod
1. ADCR: Analogově digitální řídicí registr
Použití: Tento registr se používá ke konfiguraci A / D převaděče v LPC2148
2. ADGDR: Analogový k digitálnímu globálnímu datovému registru
Použití: Tento registr má bit DONE pro A / D převodník a je zde uložen VÝSLEDEK převodu.
3. ADINTERN: Analogově digitální přerušení Povolit registr
Použití: Toto je registr Interrupt Enable.
4. ADDR0 - ADDR7: Analogový na digitální kanálový datový registr
Použití: Tento registr obsahuje A / D hodnotu pro příslušné kanály.
5. ADSTAT: Analogový k digitálnímu stavovému registru.
Použití: Tento registr obsahuje příznak DONE pro příslušný kanál ADC a také příznak OVERRUN pro příslušný kanál ADC.
V tomto výukovém programu budeme používat pouze registry ADCR a ADGDR. Podívejme se na ně podrobně
Registrace ADxCR v LPC2148
AD0CR a AD1CR pro kanál 0, respektive kanál 1. Je to 32bitový registr. Níže uvedená tabulka označuje bitová pole pro registr ADCR.
31:28 |
27 |
26:24 |
23:22 |
21 |
20 |
19:17 |
16 |
15: 8 |
7: 0 |
REZERVOVÁNO |
OKRAJ |
START |
REZERVOVÁNO |
PDN |
REZERVOVÁNO |
CLKS |
PRASKNOUT |
CLCKDIV |
SEL |
Podívejme se, jak konfigurovat jednotlivé registry
1. SEL: Bity od (0 do 7) se používají k výběru kanálu pro převod ADC. Pro každý kanál je přidělen jeden bit. Například nastavení Bit-0 způsobí, že ADC převede vzorek AD0.1. A nastavením bitu -1 bude AD0.1; podobně nastavení bit-7 provede konverzi pro AD0.7. Důležitým krokem je, že máme PINSEL podle portu, který používáme, například PINSEL0 pro PORT0 v PLC2148.
2. CLCKDIV: Bity od (8 do 15) jsou pro Clock Divisor. Zde jsou hodiny APB (hodiny periferní sběrnice ARM) rozděleny touto hodnotou plus jedna k vytvoření hodin potřebných pro A / D převodník, který by měl být menší nebo roven 4,5 MHz, protože používáme postupnou aproximační metodu v LPC2148.
3. BURST: Bit 16 se používá pro režim převodu BURST.
Nastavení 1: ADC provede převod pro všechny kanály, které jsou vybrány v bitech SEL.
Nastavení 0: Deaktivuje režim převodu BURST.
4. CLCKS: Bity od (17 do 19) tří bitů se používají pro výběr rozlišení a počtu hodin pro A / D převod v režimu série, protože se jedná o režim nepřetržitého A / D převodu.
Hodnota bitů (17 až 19) |
Bity (přesnost) |
Počet hodin |
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 slouží k výběru režimu vypnutí v ADC v LPC2148.
- A / D je v režimu PDN.
- A / D je v provozním režimu
6. START: Bity od (24 do 26) jsou pro START. Když je režim BURST převodu vypnut nastavením 0, jsou tyto bity START užitečné, když se má zahájit A / D převod. START se také používá pro okrajově řízený převod. To je, když je vstup v CAP nebo MAT pin LPC2148, A / D se začne převádět. Podívejme se na níže uvedenou tabulku
Hodnota za bity (24 až 26) |
Špendlíky LPC2148 |
Funkce ADC |
000 |
Slouží k nastavení ADC v režimu PDN Žádný start |
|
001 |
Spusťte A / D převod |
|
010 |
CAP0.2 / MAT0.2 |
Spusťte A / D převod na EDGE vybraném na kolíku 27 (Rising nebo Falling) na CAP / MAT pinech LPC2148 |
011 |
CAP0.0 / MAT0.0 |
|
100 |
MAT0.1 |
|
101 |
MAT0.3 |
|
110 |
MAT1.0 |
|
111 |
MAT1.1 |
7. EDGE: 27 th bit je pro EDGE se používá pouze tehdy, pokud je bit START obsahuje 010-111. Zahájí převod, když existuje vstup CAP nebo MAT, který je uveden výše v tabulce.
Nastavení : 0 - Na sestupné hraně
1 - Na vzestupné hraně
ADxGDR: ADC Global Data Register
AD0GDR a AD1GDR pro kanál ADC 0, respektive kanál ADC 1.
Jedná se o 32bitový registr, který obsahuje VÝSLEDEK A / D převodu a také bit DONE, který označuje, že je A / D převod proveden. Níže uvedená tabulka označuje bitová pole pro registr ADGDR.
31 |
30 |
29:27 |
26:24 |
23:16 |
15: 6 |
5: 0 |
HOTOVO |
OBSADIT |
REZERVOVÁNO |
CHN |
REZERVOVÁNO |
VÝSLEDEK |
REZERVOVÁNO |
1. VÝSLEDEK: Tyto bity (6 až 15) obsahují výsledek A / D převodu pro vybraný kanál v registru ADCR SEL. Hodnota se čte až po dokončení A / D převodu a je to indikováno bitem DONE.
PŘÍKLAD: U 10bitového výsledku ADC se uložená hodnota pohybuje od (0 do 1023).
2. KANÁL: Tyto bity 24 až 26 obsahují číslo kanálu, pro který se provádí A / D převod. Převáděná digitální hodnota je přítomna v bitu RESULT.
PŘÍKLAD: 000 je pro kanál ADC 0 a 001 je pro kanál ADC 1 atd
3. OVERRUN: 30 th bit pro přeběh se používá v režimu sériového snímání. Když je nastavena 1, předchozí převedená hodnota ADC je přepsána nově převedenou hodnotou ADC. Když je registr přečten, vymaže bit PŘEKROČENÍ.
4. HOTOVO: 31. bit je pro bit DONE.
Sada 1: Když je A / D převod dokončen.
Sada 0: Když je registr přečten a zapsán ADCR.
Viděli jsme důležité registry, které se používají v ADC v LPC2148. Nyní můžeme začít používat ADC v ARM7.
Požadované komponenty
Hardware
- Mikrokontrolér ARM7-LPC2148
- IC regulátoru napětí 3,3 V
- IC regulátor napětí 5V
- 10K potenciometr - 2 č
- LED (libovolná barva)
- LCD displej (16X2)
- 9V baterie
- Nepájivá deska
- Připojení vodičů
Software
- Keil uVision5
- Magic Flash Tool
Kruhový diagram
Tabulka níže ukazuje zapojení obvodů mezi LCD a ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (Register Select) |
P0.6 |
E (Povolit) |
P0.12 |
D4 (datový kolík 4) |
P0.13 |
D5 (datový kolík 5) |
P0.14 |
D6 (datový kolík 6) |
P0.15 |
D7 (datový kolík 7) |
Zjistěte více o používání LCD s ARM 7 - LPC2148.
DŮLEŽITÉ: Zde používáme dva integrované obvody regulátoru napětí, jeden pro 5V LCD displej a další 3,3V pro analogový vstup, které lze měnit potenciometrem.
Připojení mezi 5V regulátorem napětí s LCD a ARM7 Stick
Integrovaný obvod regulátoru napětí 5V |
Pin funkce |
LCD a ARM-7 LPC2148 |
1. Levý kolík |
+ Ve z baterie 9V vstup |
NC |
2. Středový kolík |
- Ve z baterie |
VSS, R / W, K LCD GND ARM7 |
3. Pravý kolík |
Regulovaný výstup + 5 V. |
VDD, A na LCD + 5 V k ARM7 |
Potenciometr s LCD
Potenciometr se používá ke změně kontrastu LCD displeje. Hrnec má tři piny, levý kolík (1) je připojen k + 5 V a střední (2) k VEE nebo V0 LCD modulu a pravý kolík (3) je připojen k GND. Otáčením knoflíku můžeme upravit kontrast.
Spojení mezi LPC2148 a potenciometrem s regulátorem napětí 3,3 V.
IC regulátoru napětí 3,3 V |
Pin funkce |
ARM-7 LPC2148 |
1. Levý kolík |
- Ve z baterie |
GND kolík |
2. Středový kolík |
Regulovaný výstup +3,3 V. |
Na potenciometr Vstup a výstup potenciometru na P0,28 |
3. Pravý kolík |
+ Ve z baterie 9V vstup |
NC |
Programování ARM7-LPC2148 pro ADC
K programování ARM7-LPC2148 potřebujeme nástroj Keil uVision & Flash Magic. Používáme USB kabel k programování ARM7 Stick přes micro USB port. Napíšeme kód pomocí Keila a vytvoříme hexadecimální soubor a poté se soubor HEX přenese na flash disk ARM7 pomocí Flash Magic. Chcete-li se dozvědět více o instalaci keil uVision a Flash Magic a o tom, jak je používat, přejděte na odkaz Začínáme s mikrokontrolérem ARM7 LPC2148 a naprogramujte jej pomocí Keil uVision.
V tomto tutoriálu převádíme analogové vstupní napětí (0 až 3,3 V) na digitální hodnotu pomocí ADC v LPC2148 a zobrazujeme analogové napětí na LCD displeji (16x2). Pro změnu vstupního analogového napětí se použije potenciometr.
Chcete-li se dozvědět více o propojení LCD se 4bitovým režimem ARM7-LPC2148, přejděte na tento odkaz.
Kompletní kód pro použití ADC s ARM 7 je uveden na konci tohoto návodu, zde jsme vysvětlovat několik části.
Kroky zapojené do programování LPC2148-ADC
1. Registr PINSEL se používá k výběru pinu portu LPC2148 a funkce ADC jako analogového vstupu.
PINSEL1 = 0x01000000; // Vyberte P0.28 jako AD0.1
2. Vyberte přesnost hodin a bitů pro převod zapsáním hodnoty do ADxCR (řídicí registr ADC).
AD0CR = 0x00200402; // Nastaví provoz ADC na 10 bitů / 11 CLK pro převod (000)
3. Zahajte převod převedením hodnoty na START bity v ADxCR.
Tady jsem napsal až 24 th trochu AD0CR rejstříku.
AD0CR = AD0CR - (1 << 24);
4. Nyní musíme zkontrolovat DONE bit (31.) odpovídajícího ADxDRy (datový registr ADC), jak se mění z 0 na 1. Takže pomocí smyčky while neustále kontrolujeme, zda se převod provádí na 31. bitu datového registru.
while (! (AD0DR1 & 0x80000000));
5. Po nastavení bitů na 1 je převod úspěšný, poté načteme výsledek ze stejného datového registru ADC AD0DR1 a uložíme hodnotu do proměnné.
adcvalue = AD0DR1;
Dále použijeme vzorec pro převod digitální hodnoty na napětí a uložení do proměnné s názvem napětí .
napětí = ((adcvalue / 1023.0) * 3,3);
5. Následující řádky se používají k zobrazení digitálních hodnot (0 až 1023) po analogově-digitální konverzi.
adc = adcvalue; sprintf (displayadc, "adcvalue =% f", adc); LCD_DISPLAY (displayadc); // Zobrazit hodnotu ADC (0 až 1023)
6. Následující řádky se používají k zobrazení vstupního analogového napětí (0 až 3,3 V) po analogově-digitální konverzi a po kroku 5.
LCD_SEND (0xC0); sprintf (voltvalue, "Napětí =%. 2f V", napětí); LCD_DISPLAY (voltvalue); // Displej (vstupní analogové napětí)
7. Nyní musíme na LCD displeji zobrazit vstupní napětí a digitální hodnoty. Před tím musíme inicializovat LCD displej a použít příslušné příkazy pro odeslání zprávy k zobrazení.
Níže uvedený kód se používá k inicializaci LCD
void LCD_INITILIZE (void) // Funkce pro přípravu LCD { IO0DIR = 0x0000FFF0; // Nastaví pin P0.12, P0.13, P0.14, P0.15, P0.4, P0.6 jako OUTPUT delay_ms (20); LCD_SEND (0x02); // Inicializace lcd ve 4bitovém provozním režimu LCD_SEND (0x28); // 2 řádky (16X2) LCD_SEND (0x0C); // Vypnout zobrazení kurzoru LCD_SEND (0x06); // Automatický přírůstek kurzoru LCD_SEND (0x01); // Zobrazit jasný LCD_SEND (0x80); // První řádek první pozice }
Níže uvedený kód slouží k zobrazení hodnot na LCD
void LCD_DISPLAY (char * msg) // funkce pro tisk znaky poslal jeden po druhém { uint8_t i = 0; while (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // Odešle horní okusování IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH pro tisk dat IO0CLR = 0x00000020; // RW LOW Režim zápisu delay_ms (2); IO0CLR = 0x00000040; // EN = 0, RS a RW beze změny (tj. RS = 1, RW = 0) delay_ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // Odesílá spodní okusování IO0SET = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; delay_ms (2); IO0CLR = 0x00000040; delay_ms (5); i ++; } }
Níže uvedená funkce slouží k vytvoření zpoždění
void delay_ms (uint16_t j) // Funkce pro zpoždění v milisekundách { uint16_t x, i; pro (i = 0; i
Kompletní kód s ukázkovým videem je uveden níže.