- Mi az ADC?
- ADC az ARM7-LPC2148-ban
- ADC csapok az ARM7-LPC2148 fájlban
- ADC regiszterek az ARM7-LPC2148 fájlban
- ADxCR regisztráció az LPC2148-ba
- ADxGDR: ADC Global Data Register
- Szükséges alkatrészek
- Kördiagramm
- ARM7-LPC2148 programozása ADC-hez
Az elektronikai világban sokféle analóg szenzor létezik a piacon, amelyeket hőmérséklet, sebesség, elmozdulás, nyomás stb. Mérésére használnak. Az analóg szenzorokat olyan kimenet előállítására használják, amelyek az idő folyamán folyamatosan változnak. Ezek az analóg szenzorok jelei általában nagyon kicsiek, néhány mikrovolttól (uV) a több millivoltig (mV), ezért valamilyen erősítésre van szükség. Ezeknek az analóg jeleknek a mikrovezérlőben történő felhasználásához az analóg jeleket digitális jelekké kell átalakítanunk, mivel a mikrovezérlő csak a digitális jeleket érti és dolgozza fel. Tehát a mikrovezérlő nagy részének van egy beépített fontos funkciója, az úgynevezett ADC (analóg-digitális átalakító). Az ARM7-LPC2148 mikrovezérlőnk ADC funkcióval is rendelkezik.
Ebben az oktatóanyagban megtudhatjuk, hogyan kell használni az ADC-t az ARM7-LPC2148-ban azáltal, hogy változó feszültséget táplálunk egy analóg csapra, és az analóg-digitális átalakítás után megjelenítjük a 16x2-es LCD-képernyőn. Kezdjük tehát egy rövid bevezetéssel az ADC-vel kapcsolatban.
Mi az ADC?
Mint korábban említettük, az ADC az analóg-digitális átalakítást jelenti, és arra használják, hogy a valós világból származó analóg értékeket digitális értékekké konvertálja, például 1-es és 0-s értékeket. Tehát mik ezek az analóg értékek? Ezeket látjuk a mindennapi életünkben, mint például a hőmérséklet, a sebesség, a fényerő stb. Ezeket a paramétereket analóg feszültségként mérik a megfelelő érzékelők, majd ezeket az analóg értékeket a mikrovezérlők digitális értékeivé alakítják.
Tegyük fel, hogy az ADC tartományunk 0 és 3,3 V között van, és van egy 10 bites ADC, ami azt jelenti, hogy a 0–3,3 V bemeneti feszültségünk 1024 különálló analóg értékre osztódik (2 10 = 1024). Az 1024 jelentése egy 10 bites ADC felbontása, hasonlóan egy 8 bites ADC felbontáshoz 512 (28) és egy 16 bites ADC felbontáshoz 65 536 (216). Az LPC2148 10 bites felbontású ADC-vel rendelkezik.
Ezzel, ha a tényleges bemeneti feszültség 0 V, akkor az MCU ADC-je 0-nak fogja olvasni, és ha 3,3 V-os, akkor az MCU 1024-et fog olvasni, és ha valahol a kettő között van, például 1,65 V, akkor az MCU 512-et fog olvasni. képletek az MCU által leolvasandó digitális érték kiszámításához az ADC felbontása és az üzemi feszültség alapján.
(ADC felbontás / üzemi feszültség) = (ADC digitális érték / tényleges feszültségérték)
Például, ha a referenciafeszültség 3v:
Az ADC-t részletesen ismertettük az előző cikkben.
ADC az ARM7-LPC2148-ban
- Az LPC2148 két analóg-digitális átalakítót tartalmaz.
- Ezek az átalakítók 10 bites egymás utáni közelítés analóg és digitális átalakítók.
- Míg az ADC0-nak hat csatornája van, az ADC1-nek nyolc csatornája van.
- Ezért az LPC2148-hoz rendelkezésre álló ADC bemenetek száma összesen 14.
- Csak a (0 és 3,3 V) tartományban alakítja át a bemeneti feszültséget. Nem haladhatja meg a 3,3 V feszültségreferenciát. Mivel károsítja az IC-t és bizonytalan értékeket is szolgáltat.
Az ADC néhány fontos jellemzője az LPC2148-ban
- Minden átalakító másodpercenként több mint 400000 10 bites minta végrehajtására képes.
- Minden analóg bemenet rendelkezik külön eredményregiszterrel a megszakítási rezsicsökkentés érdekében.
- Burst konverziós mód egy vagy több bemenethez.
- Opcionális átalakítás a bemeneti tű vagy az időzítő egyezési jel átmeneténél.
- Global Start parancs mindkét átalakítóhoz.
Ellenőrizze azt is, hogyan kell használni az ADC-t más mikrovezérlőkben:
- Hogyan kell használni az ADC-t az Arduino Uno-ban?
- Az ADC0808 összekapcsolása a 8051 mikrokontrollerrel
- A PIC mikrokontroller ADC moduljának használata
- Raspberry Pi ADC bemutató
- Az ADC használata az MSP430G2-ben - Analóg feszültség mérése
- Az ADC használata az STM32F103C8 fájlban
ADC csapok az ARM7-LPC2148 fájlban
Amint azt az earliar elmondta, az ARM7-LPC2148-ban két ADC0 csatorna van 6 analóg bemeneti tűvel és ADC1 8 analóg bemeneti tűvel. Tehát összesen 14 csap van az analóg bemenetekhez. Az alábbi ábra mutatja az analóg bemenethez rendelkezésre álló csapokat.
Mivel az ADC bemeneti tűk multiplexálva vannak más GPIO csapokkal. Engedélyeznünk kell őket a PINSEL regiszter konfigurálásával az ADC funkció kiválasztásához.
Az alábbi táblázat az ADC csapszegeit és az LPC2148 betartott ADC csatornaszámát mutatja. AD0 a 0 és AD1 az 1 csatorna
LPC2148 tű |
ADC csatornaszám |
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 regiszterek az ARM7-LPC2148 fájlban
A regisztrációkat a programozás során használják az A / D konverzió szolgáltatás használatához az LPC2148-ban.
Az alábbiakban felsoroljuk az LPC2148 A / D átalakításához használt regisztereket
1. ADCR: Analóg-digitális vezérlés regiszter
Használat: Ez a regiszter az A / D átalakító konfigurálására szolgál az LPC2148-ban
2. ADGDR: Analóg-digitális globális adatregiszter
Használat: Ez a regisztráció DONE bitet tartalmaz az A / D átalakítóhoz, és az átalakítás EREDMÉNYE itt tárolódik.
3. ADINTERN: Analóg-digitális megszakítás engedélyezése regisztráció
Használat: Ez egy megszakítás engedélyezés regisztráció.
4. ADDR0 - ADDR7: Analóg-digitális csatorna adatregiszter
Használat: Ez a regisztráció tartalmazza az adott csatornák A / D értékét.
5. ADSTAT: Analóg-digitális állapotregiszter.
Használat: Ez a regisztráció tartalmazza a DONE jelzőt a megfelelő ADC csatornához, valamint az OVERRUN jelzőt az adott ADC csatornához.
Ebben az oktatóanyagban csak ADCR és ADGDR regisztereket fogunk használni. Lássuk róluk részletesen
ADxCR regisztráció az LPC2148-ba
AD0CR és AD1CR a 0. és az 1. csatornához. Ez egy 32 bites regiszter. Az alábbi táblázat az ADCR regiszter bitmezõit mutatja.
31:28 |
27. |
26:24 |
23:22 |
21 |
20 |
19:17 |
16. |
15: 8 |
7: 0 |
FENNTARTOTT |
ÉL |
RAJT |
FENNTARTOTT |
PDN |
FENNTARTOTT |
CLKS |
ROBBANÁS |
CLCKDIV |
SEL |
Lássuk, hogyan konfigurálhatjuk az egyes regisztereket
1. SEL: A (0 és 7) közötti biteket használjuk az ADC konverzió csatornájának kiválasztására. Minden csatornához egy bit tartozik. Például a Bit-0 beállításával az ADC átveszi az átalakítást az AD0.1 mintába. A -1 bit beállítása AD0.1 lesz; hasonlóan a 7 bit beállítása az AD0.7 átalakítását. Fontos lépés, hogy a használt portnak megfelelően van PINSEL, például a PLS2148-ban a PORT0-hoz használt PINSEL0.
2. CLCKDIV: A (8 és 15) közötti bitek az Óraosztóra vonatkoznak . Itt az APB órát (ARM Peripheral Bus clock) elosztjuk ezzel az értékkel, plusz egy az A / D átalakítóhoz szükséges óra előállításához, amelynek 4,5-nél kisebbnek vagy egyenlőnek kell lennie, mivel az LPC2148-ban egymást követő közelítési módszert alkalmazzuk.
3. BURST: A 16 bit a BURST konverziós módhoz használható.
1. beállítás: Az ADC elvégzi az átalakítást a SEL bitekben kiválasztott összes csatornára.
0 beállítás: Letiltja a BURST konverziós módot.
4. CLCKS: A (17-től 19-ig) három bitből álló biteket a felbontás és az órák számának kiválasztására használják A / D konverzióra sorozatfelvétel módban, mivel ez folyamatos A / D konverziós mód.
Bitek értéke (17–19) |
Bit (pontosság) |
Óra száma |
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: A 21 bit az ADC kikapcsolási módjának kiválasztására szolgál az LPC2148-ban.
- Az A / D PDN módban van.
- Az A / D üzemmódban van
6. START: A (24 és 26) közötti bitek a START-ot jelentik. Ha a BURST konverziós mód ki van kapcsolva a 0 beállításával, akkor ezek a START bitek hasznosak az A / D konverzió elindításának időpontjában. A START-ot élvezérelt átalakításra is használják. Ekkor van bemenet az LPC2148 CAP vagy MAT tűjében, az A / D átalakítani kezd. Ellenőrizzük az alábbi táblázatot
Bitérték (24–26) |
Az LPC2148 csapjai |
Az ADC funkciója |
000 |
Az ADC beállítása PDN módban Nincs indítás |
|
001 |
Indítsa el az A / D átalakítást |
|
010 |
CAP0.2 / MAT0.2 |
Indítsa el az A / D átalakítást az EDGE-n, amelyet az LPC2148 CAP / MAT csapjainál választottak ki a 27. tűn (emelkedő vagy zuhanó). |
011 |
CAP0.0 / MAT0.0 |
|
100 |
MAT0.1 |
|
101 |
MAT0.3 |
|
110 |
MAT1.0 |
|
111. |
MAT1.1 |
7. EDGE: A 27 th bit számára EDGE használható, ha a START-bit tartalmaz 010-111. A konverzió akkor kezdődik, amikor van CAP vagy MAT bemenet, amelyet a fenti táblázat láthat.
Beállítás : 0 - On Falling Edge
1 - A Rising Edge-en
ADxGDR: ADC Global Data Register
AD0GDR és AD1GDR az ADC 0. és 1. ADC csatornához.
Ez egy 32 bites regiszter tartalmazza az A / D átalakítás EREDMÉNYÉT, valamint a DONE bitet, amely jelzi, hogy az A / D átalakítás megtörtént. Az alábbi táblázat az ADGDR regiszter bitmezõit mutatja.
31 |
30 |
29:27 |
26:24 |
23:16 |
15: 6 |
5: 0 |
KÉSZ |
TÚLFUTÁS |
FENNTARTOTT |
CHN |
FENNTARTOTT |
EREDMÉNY |
FENNTARTOTT |
1. Eredmény : Ezek a bitek (6-15) az ADCR SEL regiszterben a kiválasztott csatorna A / D konverziójának eredményét tartalmazzák. Az érték csak az A / D átalakítás befejezése után olvasható, és ezt a DONE bit jelzi.
PÉLDA: 10 bites ADC eredmény esetén a tárolt érték (0 és 1023) között változik.
2. CSATORNA: Ezek a 24–26 bitek tartalmazzák a csatornaszámot, amelyre az A / D átalakítást végezzük. Az átalakított digitális érték a RESULT bitben van.
PÉLDA: 000 a 0 ADC csatornára és a 001 az 1 ADC csatornára stb
3. túllépése: A 30 th bit TÚLCSORDULÁS használják sorozatfelvétel üzemmódban. Az 1. beállításkor az előző konvertált ADC-érték felülíródik az újonnan konvertált ADC-értékkel. A regiszter elolvasása után az OVERRUN bit törlődik.
4. KÉSZ: A 31. bit DONE bitre vonatkozik.
1. készlet: Az A / D átalakítás befejezése után.
0 készlet: Amikor a regiszter beolvasásra és az ADCR írásra kerül.
Láttunk az ADC-ben használt fontos regiszterekről az LPC2148-ban. Most kezdjük el használni az ADC-t az ARM7-ben.
Szükséges alkatrészek
Hardver
- ARM7-LPC2148 mikrovezérlő
- 3,3 V feszültségszabályozó IC
- 5 V feszültségszabályozó IC
- 10K potenciométer - 2 sz
- LED (bármilyen színű)
- LCD kijelző (16X2)
- 9V-os akkumulátor
- Kenyérlemez
- Vezetékek csatlakoztatása
Szoftver
- Keil uVision5
- Magic Flash Tool
Kördiagramm
Az alábbi táblázat az LCD és az ARM7-LPC2148 közötti áramköri kapcsolatokat mutatja.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (Regisztráció kiválasztása) |
P0.6 |
E (engedélyezés) |
P0.12 |
D4 (4. adatcsap) |
P0.13 |
D5 (5. adat tű) |
P0.14 |
D6 (6. adat tű) |
P0.15 |
D7 (7. adat tű) |
Tudjon meg többet az LCD használatáról az ARM 7 - LPC2148 készülékkel.
FONTOS: Itt két feszültségszabályozó IC-t használunk, egyet az 5 V-os LCD-kijelzőhöz, és egy másik 3,3 V-ot az analóg bemenethez, amelyeket potenciométerrel lehet változtatni.
Csatlakozások az 5 V-os feszültségszabályozó között LCD és ARM7 pálcával
5 V feszültségszabályozó IC |
Pin funkció |
LCD és ARM-7 LPC2148 |
1. Bal tű |
+ Ve az akkumulátor 9V-os bemenetéről |
NC |
2. Központi tű |
- Az akkumulátortól |
LCD VSS, R / W, K ARM7 GND-je |
3. Jobb csap |
Szabályozott + 5 V kimenet |
VDD, A LCD + 5 V ARM7 |
Potenciométer LCD-vel
Az LCD kijelző kontrasztjának változtatására egy potenciométert használnak. Egy edénynek három érintkezõje van, a bal tüske (1) + 5V-ra van csatlakoztatva, a középsõ (2) az LCD-modul VEE-jére vagy V0-jára, a jobb oldali tüskéje (3) pedig a GND-re van csatlakoztatva. A gomb elforgatásával beállíthatjuk a kontrasztot.
Csatlakozás az LPC2148 és a 3,3 V-os feszültségszabályozóval ellátott potenciométer között
3,3 V feszültségszabályozó IC |
Pin funkció |
ARM-7 LPC2148 |
1. Bal tű |
- Az akkumulátortól |
GND csap |
2. Központi tű |
Szabályozott + 3,3 V kimenet |
A potenciométer bemenetére és a potenciométer kimenetére a P0.28-ra |
3. Jobb csap |
+ Ve az akkumulátor 9V-os bemenetéről |
NC |
ARM7-LPC2148 programozása ADC-hez
Az ARM7-LPC2148 programozásához szükségünk van keil uVision és Flash Magic eszközre. USB-kábellel programozzuk az ARM7 Stick-et mikro USB-porton keresztül. Kódot írunk a Keil segítségével, és létrehozunk egy hex fájlt, majd a HEX fájlt a Flash Magic segítségével az ARM7 pálcára villantjuk. Ha többet szeretne megtudni a keil uVision és a Flash Magic telepítéséről és használatáról, kövesse az Első lépések az ARM7 LPC2148 mikrovezérlővel linket és programozza be a Keil uVision használatával.
Ebben az oktatóanyagban az analóg bemeneti feszültséget (0–3,3 V) digitális értékre konvertáljuk az ADC használatával az LPC2148-ban, és az analóg feszültséget megjelenítjük az LCD-kijelzőn (16x2). A bemenet analóg feszültségének megváltoztatására potenciométert használnak.
Ha többet szeretne megtudni az LCD és az ARM7-LPC2148 4-bites üzemmód összekapcsolásáról, kövesse ezt a linket.
Az ADC ARM 7-tel történő használatának teljes kódja az oktatóanyag végén található, itt néhány részt elmagyarázunk.
Az LPC2148-ADC programozásának lépései
1. A PINSEL regiszter segítségével kiválaszthatja az LPC2148 port tűjét és az ADC funkciót analóg bemenetként.
PINSEL1 = 0x01000000; // Válassza a P0.28 értéket AD0.1 értékként
2. Válassza ki az óra és a bit pontosságát az átalakításhoz úgy, hogy értéket ír az ADxCR-be (ADC vezérlő regiszter).
AD0CR = 0x00200402; // Az ADC műveletet 10 bites / 11 CLK-ként állítja be az átalakításhoz (000)
3. Indítsa el az átalakítást úgy, hogy az értéket ADxCR START bitekbe írja.
Itt írtam 24 -én kicsit AD0CR nyilvántartásba.
AD0CR = AD0CR - (1 << 24);
4. Most ellenőriznünk kell a megfelelő ADxDRy (ADC adatregiszter) DONE bitjét (31.), amikor az 0-ról 1-re változik. Tehát a while ciklust használjuk arra, hogy folyamatosan ellenőrizzük, hogy az átalakítás megtörtént-e az adatregiszter 31. bitjén.
míg (! (AD0DR1 & 0x80000000));
5. Miután a kész bit 1-re van állítva, az átalakítás sikeres, majd elolvassuk az eredményt ugyanarról az ADC AD0DR1 adatregiszterről, és eltároljuk az értéket egy változóban.
adcvalue = AD0DR1;
Ezután használja a képlet lehet átalakítani a digitális értéket feszültség és tárolja nevű változó feszültséget .
feszültség = ((adcvalue / 1023.0) * 3.3);
5. A következő sorokat használjuk a digitális értékek (0-1023) megjelenítésére az analóg-digitális átalakítás után.
adc = adcvalue; sprintf (displayadc, "adcvalue =% f", adc); LCD_DISPLAY (displayadc); // ADC-érték megjelenítése (0-1023)
6. A következő sorokat használjuk az analóg-digitális átalakítás és az 5. lépés után a bemenő analóg feszültség (0–3,3 V) megjelenítésére.
LCD_SEND (0xC0); sprintf (voltérték, "Feszültség =%. 2f V", feszültség); LCD_DISPLAY (voltérték); // Kijelző (analóg bemenet feszültsége)
7. Most meg kell jelenítenünk a bemeneti feszültséget és a digitális értékeket az LCD kijelzőn. Előtte inicializálnunk kell az LCD kijelzőt, és megfelelő parancsokat kell használnunk az üzenet megjelenítéséhez.
Az alábbi kódot használjuk az LCD inicializálásához
void LCD_INITILIZE (void) // Funkció az LCD előkészítéséhez { IO0DIR = 0x0000FFF0; // a P0.12, P0.13, P0.14, P0.15, P0.4, P0.6 csapokat OUTPUT delay_ms- ként állítja be (20); LCD_SEND (0x02); // Lcd inicializálása 4 bites üzemmódban LCD_SEND (0x28); // 2 sor (16X2) LCD_SEND (0x0C); // Megjelenítés a kurzoron ki LCD_SEND (0x06); // Automatikus növekedési kurzor LCD_SEND (0x01); // Kijelző tiszta LCD_SEND (0x80); // Az első sor első pozíciója }
Az alábbi kódot használják az értékek megjelenítésére az LCD-n
void LCD_DISPLAY (char * msg) // Funkció nyomtatni a karakterek elküldött egyenként { uint8_t i = 0; míg (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // Felső rágcsálást küld IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH az adatok kinyomtatásához IO0CLR = 0x00000020; // RW LOW Írási mód késleltetési_ms (2); IO0CLR = 0x00000040; // EN = 0, RS és RW változatlan (azaz RS = 1, RW = 0) delay_ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // Alsó rágcsálást küld IO0SET = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; késleltetés_ms (2); IO0CLR = 0x00000040; késleltetés_ms (5); i ++; } }
Az alábbi függvény a késleltetés létrehozására szolgál
void delay_ms (uint16_t j) // Funkció késedelem készítéséhez ezredmásodpercekben { uint16_t x, i; mert (i = 0; i
Az alábbiakban bemutatjuk a teljes kódot a bemutató videóval.