- Ano ang ADC?
- ADC sa ARM7-LPC2148
- Mga ADC Pins sa ARM7-LPC2148
- Ang Mga Rehistro ng ADC sa ARM7-LPC2148
- Pagrehistro ng ADxCR sa LPC2148
- ADxGDR: Pagrehistro ng Data ng Pandaigdigang ADC
- Kinakailangan ang Mga Bahagi
- Diagram ng Circuit
- Programming ARM7-LPC2148 para sa ADC
Sa mundo ng electronics mayroong maraming mga pagkakaiba-iba ng mga analog sensor sa merkado na ginagamit upang masukat ang temperatura, bilis, pag-aalis, presyon atbp. Ang mga sensor ng analog ay ginagamit upang makagawa ng output na patuloy na nagbabago sa paglipas ng panahon. Ang mga signal na ito mula sa mga analog sensor ay may posibilidad na napakaliit ng halaga mula sa ilang mga micro-volts (uV) hanggang sa maraming milli-volts (mV), kaya't kinakailangan ang ilang anyo ng pagpapalakas. Para sa paggamit ng mga analog signal na ito sa microcontroller kailangan naming baguhin ang analog signal sa digital signal habang nauunawaan at pinoproseso ng microcontroller lamang ang mga digital signal. Kaya't ang karamihan sa microcontroller ay may isang nakapaloob na mahalagang tampok na tinatawag na ADC (Analog to Digital converter). Ang aming microcontroller ARM7-LPC2148 ay mayroon ding tampok na ADC.
Sa tutorial na ito makikita natin kung paano gamitin ang ADC sa ARM7-LPC2148 sa pamamagitan ng pagbibigay ng iba't ibang boltahe sa isang Analog pin at ipakita ito sa 16x2 LCD screen pagkatapos ng analog sa digital conversion. Kaya't magsimula tayo sa pamamagitan ng isang maikling pagpapakilala tungkol sa ADC.
Ano ang ADC?
Tulad ng sinabi nang mas maaga ang ADC ay nangangahulugang ang Analog sa digital na conversion at ginagamit ito upang i-convert ang mga halagang analog mula sa totoong mundo sa mga digital na halagang tulad ng 1 at 0. Kaya ano ang mga halagang analog na ito? Ito ang mga nakikita natin sa ating pang-araw-araw na buhay tulad ng temperatura, bilis, ningning atbp. Ang mga parameter na ito ay sinusukat bilang mga analog voltages ng kani-kanilang mga sensor at pagkatapos ang mga halagang Analog na ito ay ginawang mga Digital na halaga para sa mga microcontroller.
Ipagpalagay natin na ang aming saklaw ng ADC ay mula sa 0V hanggang 3.3V at mayroon kaming 10-bit ADC na nangangahulugang ang aming boltahe ng pag-input na 0-3.3 Volts ay nahahati sa 1024 na antas ng mga discrete analog na halaga (2 10 = 1024). Ang ibig sabihin ng 1024 ay ang resolusyon para sa isang 10-bit ADC, katulad para sa isang 8-bit na resolusyon ng ADC ay 512 (28) at para sa isang 16-bit na resolusyon ng ADC ay magiging 65,536 (216). Ang LPC2148 ay may 10 bit resolution na ADC.
Sa pamamagitan nito kung ang aktwal na boltahe ng pag-input ay 0V kung gayon ang ADC ng MCU ay basahin ito bilang 0 at kung ito ay 3.3V basahin ng MCU 1024 at kung ito sa isang lugar sa pagitan ng tulad ng 1.65v pagkatapos ay babasahin ng MCU ang 512. Maaari naming gamitin ang sa ibaba mga pormula upang makalkula ang digital na halaga na mababasa ng MCU batay sa Resolution ng ADC at Operating boltahe.
(ADC Resolution / Operating Voltage) = (ADC Digital Value / Aktwal na Halaga ng Boltahe)
Tulad ng halimbawa kung ang sanggunian na boltahe ay 3v:
Ipinaliwanag namin nang detalyado ang ADC sa nakaraang artikulo.
ADC sa ARM7-LPC2148
- Naglalaman ang LPC2148 ng dalawang analog sa mga digital converter.
- Ang mga converter na ito ay nag-iisang 10-bit sunud - sunod na approximation analog sa mga digital converter.
- Habang ang ADC0 ay may anim na channel, ang ADC1 ay mayroong walong mga channel.
- Samakatuwid, ang kabuuang bilang ng mga magagamit na mga input ng ADC para sa LPC2148 ay 14.
- Ini-convert nito ang input boltahe sa saklaw ng (0 hanggang 3.3V) lamang. Hindi ito dapat lumagpas sa 3.3V na sanggunian ng boltahe. Dahil makakasira ito sa IC at magbibigay din ng mga hindi tiyak na halaga.
Ang ilang mahahalagang tampok ng ADC sa LPC2148
- Ang bawat converter na may kakayahang magsagawa ng higit sa 400000 10-bit na mga sample bawat segundo.
- Ang bawat input ng analog ay may nakalaang rehistro ng resulta upang mabawasan ang nakakagambalang overhead.
- Burst mode ng conversion para sa solong o maraming input.
- Opsyonal na conversion sa paglipat sa input pin o signal ng pagtutugma ng timer.
- Global Start command para sa parehong mga converter.
Suriin din kung paano gamitin ang ADC sa iba pang mga Microcontroller:
- Paano Gumamit ng ADC sa Arduino Uno?
- Ang interfacing ADC0808 sa 8051 Microcontroller
- Paggamit ng ADC Module ng PIC Microcontroller
- Tutorial ng Raspberry Pi ADC
- Paano gamitin ang ADC sa MSP430G2 - Pagsukat ng Boltahe ng Analog
- Paano gamitin ang ADC sa STM32F103C8
Mga ADC Pins sa ARM7-LPC2148
Tulad ng sinabi sa earliar, sa ARM7-LPC2148 mayroong dalawang mga channel ADC0 na may 6 analog input pin & ADC1 na may 8 analog input pin. Kaya sa kabuuan ay may 14 na mga pin para sa mga analog input. Ipinapakita ng diagram sa ibaba ang mga pin na magagamit para sa analog input.
Dahil ang mga ADC input pin ay multiplexed sa iba pang mga GPIO pin. Kailangan naming paganahin ang mga ito sa pamamagitan ng pag-configure ng rehistro ng PINSEL upang piliin ang pagpapaandar ng ADC.
Ipinapakita ng talahanayan sa ibaba ang mga pin ng ADC at respetadong ADC channel no sa LPC2148. Ang AD0 ay channel 0 at ang AD1 ay channel 1
LPC2148 Pin |
Ang ADC Channel No. |
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 |
Ang Mga Rehistro ng ADC sa ARM7-LPC2148
Ginagamit ang mga rehistro sa pag-program para sa paggamit ng tampok na A / D na conversion sa LPC2148.
Nasa ibaba ang isang listahan ng mga rehistro na ginamit sa LPC2148 para sa A / D na conversion
1. ADCR: Analog sa Rehistro ng Digital Control
Paggamit: Ang rehistro na ito ay ginagamit para sa pag-configure ng A / D converter sa LPC2148
2. ADGDR: Analog sa Digital Global Data Rehistro
Paggamit: Ang rehistro na ito ay Tapos nang kaunti para sa A / D converter at ang RESULTA ng conversion ay nakaimbak dito.
3. ADINTERN: Analog sa Digital Makagambala Paganahin ang Rehistro
Paggamit: Ito ay isang makagambala Paganahin ang rehistro.
4. ADDR0 - ADDR7: Analog sa Pagrehistro ng Data ng Digital Channel
Paggamit: Naglalaman ang rehistro na ito ng A / D na halaga para sa kani-kanilang mga channel.
5. ADSTAT: Analog sa Rehistro ng Katayuan sa Digital.
Paggamit: Naglalaman ang rehistro na ito ng TAPOS na bandila para sa kani-kanilang ADC channel at pati na rin ang OVERRUN flag para sa kani-kanilang ADC channel.
Sa tutorial na ito gagamitin lamang namin ang mga rehistro ng ADCR & ADGDR lamang. Tingnan natin nang detalyado ang tungkol sa kanila
Pagrehistro ng ADxCR sa LPC2148
AD0CR & AD1CR para sa channel 0 at channel 1 ayon sa pagkakabanggit. Ito ay isang 32-Bit na rehistro. Sa ibaba ng talahanayan ay ipinahiwatig ang mga patlang ng bit para sa pagrehistro ng ADCR.
31:28 |
27 |
26:24 |
23:22 |
21 |
20 |
19:17 |
16 |
15: 8 |
7: 0 |
NAG-RESERBAHO |
EDGE |
MAGSIMULA |
NAG-RESERBAHO |
PDN |
NAG-RESERBAHO |
CLKS |
PAGPUTOK |
CLCKDIV |
SEL |
Tingnan natin ang tungkol sa kung paano i-configure ang mga indibidwal na rehistro
1. SEL: Ang mga piraso mula sa (0 hanggang 7) ay ginagamit upang piliin ang channel para sa conversion ng ADC. Ang isang bit ay inilaan para sa bawat channel. Halimbawa ng pagtatakda ng Bit-0 ay gagawin ang ADC upang mai-sample ang AD0.1 para sa conversion. At ang pagtatakda ng kaunti -1 ay gagawing AD0.1; katulad na setting ng bit-7 ay gagawin ang conversion para sa AD0.7. Mahalagang hakbang ay mayroon kaming PINSEL alinsunod sa port na ginagamit namin halimbawa ng PINSEL0 para sa PORT0 sa PLC2148.
2. CLCKDIV: Ang mga piraso mula (8 hanggang 15) ay para sa Clock Divisor. Narito ang APB na orasan (ARM Peripheral Bus na orasan) ay hinati sa halagang ito kasama ang isa upang makabuo ng orasan na kinakailangan para sa A / D converter, na dapat ay mas mababa sa o katumbas ng 4.5 MHz habang gumagamit kami ng sunud-sunod na pamamaraan ng approximation sa LPC2148.
3. BURST: Ang bit 16 ay ginagamit para sa mode ng conversion na BURST.
Pagtatakda 1: Gagawa ng ADC ang conversion para sa lahat ng mga channel na napili sa SEL bits.
Pagtatakda ng 0: Hindi pagaganahin ang mode ng conversion na BURST.
4. CLCKS: Ang mga piraso mula (17 hanggang 19) tatlong mga piraso ay ginagamit para sa pagpili ng resolusyon at ang bilang ng mga orasan para sa A / D na conversion sa burst mode dahil ito ay tuloy-tuloy na A / D mode ng conversion.
Halaga para sa mga piraso (17 hanggang 19) |
Mga Bits (Kawastuhan) |
Hindi ng Clock |
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: Ang bit 21 ay para sa pagpili ng Power down Mode ng ADC sa LPC2148.
- Ang A / D ay nasa PDN mode.
- Ang A / D ay nasa operating mode
6. SIMULA: Ang mga piraso mula (24 hanggang 26) ay para sa SIMULA. Kapag ang mode ng BURST conversion ay NAKA-OFF sa pamamagitan ng pagtatakda ng 0, ang mga Start bit na ito ay kapaki-pakinabang para kailan sisimulan ang A / D na conversion Ginagamit ang panimula para sa conversion na kinokontrol din ng gilid. Iyon ay kapag may isang input sa CAP o MAT pin ng LPC2148 ang A / D ay nagsisimulang mag-convert. Suriin natin ang talahanayan sa ibaba
Halaga para sa Mga Bits (24 hanggang 26) |
Mga pin ng LPC2148 |
Pag-andar ng ADC |
000 |
Ginamit upang itakda ang ADC sa PDN mode Walang Simula |
|
001 |
Simulan ang A / D Conversion |
|
010 |
CAP0.2 / MAT0.2 |
Simulan ang A / D na conversion sa EDGE na napili sa pin 27 (Tumataas o Bumagsak) sa mga CAP / MAT na pin ng LPC2148 |
011 |
CAP0.0 / MAT0.0 |
|
100 |
MAT0.1 |
|
101 |
MAT0.3 |
|
110 |
MAT1.0 |
|
111 |
MAT1.1 |
7. EDGE: Ang ika- 27 na bit ay para sa EDGE ay ginagamit lamang kapag ang Start bit ay naglalaman ng 010-111. Nagsisimula ito ng conversion kapag may CAP o MAT input na maaari mong makita sa itaas ng talahanayan para doon.
Pagtatakda : 0 - Sa Falling Edge
1 - Sa Rising Edge
ADxGDR: Pagrehistro ng Data ng Pandaigdigang ADC
AD0GDR & AD1GDR para sa ADC Channel 0 at ADC channel 1 ayon sa pagkakabanggit.
Ito ay isang 32-bit na rehistro na naglalaman ng RESULTA ng A / D na conversion at pati na rin ang TAPOS na bit na nagpapahiwatig na tapos na ang A / D na conversion. Isinasaad sa ibaba ng talahanayan ang mga patlang ng bit para sa pagrehistro ng ADGDR.
31 |
30 |
29:27 |
26:24 |
23:16 |
15: 6 |
5: 0 |
TAPOS NA |
OVERRUN |
NAG-RESERBAHO |
CHN |
NAG-RESERBAHO |
RESULTA |
NAG-RESERBAHO |
1. RESULTA: Ang mga bit na ito (6 hanggang 15) ay naglalaman ng resulta ng A / D na conversion para sa napiling channel sa rehistro ng ADCR SEL. Basahin lamang ang halaga pagkatapos makumpleto ang A / D na conversion at ito ay ipinahiwatig ng DONE bit.
HALIMBAWA: Para sa isang resulta ng 10-Bit ADC ang halaga na nakaimbak ay nag-iiba mula sa (0 hanggang 1023).
2. CHANNEL: Ang mga bit na ito 24 hanggang 26 ay naglalaman ng numero ng channel kung saan tapos ang A / D na conversion. Ang na-convert na digital na halaga ay naroroon sa RESULTO nang kaunti.
HALIMBAWA: Ang 000 ay para sa ADC channel 0 at 001 ay para sa ADC channel 1, atbp
3. OVERRUN: Ang 30 th bit para sa OVERRUN ay ginagamit sa BURST mode. Kapag itinakda ang 1 ang dating na-convert na halaga ng ADC ay na-o-overtake ng bagong na-convert na halaga ng ADC. Kapag nabasa na ang rehistro ay nalilimas nito ang OVERRUN bit.
4. TAPOS: Ang 31th bit ay para sa TAPOS na bit.
Itakda ang 1: Kapag nakumpleto ang A / D na conversion.
Itakda ang 0: Kapag nabasa ang rehistro at nakasulat ang ADCR.
Nakita namin ang tungkol sa mahahalagang rehistro na ginagamit sa ADC sa LPC2148. Hinahayaan na ngayong simulan ang paggamit ng ADC sa ARM7.
Kinakailangan ang Mga Bahagi
Hardware
- ARM7-LPC2148 Microcontroller
- 3.3V boltahe regulator IC
- 5V boltahe regulator IC
- 10K Potensyomiter - 2 Blg
- LED (Anumang Kulay)
- LCD display (16X2)
- 9V na baterya
- Breadboard
- Mga Koneksyon sa Mga Wires
Software
- Keil uVision5
- Magic Flash Tool
Diagram ng Circuit
Ipinapakita ng talahanayan sa ibaba ang mga koneksyon sa circuit sa pagitan ng LCD & ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (Piliin ang Rehistro) |
P0.6 |
E (Paganahin) |
P0.12 |
D4 (Data pin 4) |
P0.13 |
D5 (Data pin 5) |
P0.14 |
D6 (Data pin 6) |
P0.15 |
D7 (Data pin 7) |
Matuto nang higit pa tungkol sa paggamit ng LCD na may ARM 7 - LPC2148.
MAHALAGA: Dito gumagamit kami ng dalawang boltahe na regulator ICs isa para sa 5V LCD display at isa pang 3.3V para sa analog input na maaaring iba-iba ng potensyomiter.
Mga koneksyon sa pagitan ng 5V Voltage Regulator na may LCD & ARM7 Stick
5V Boltahe Regulator IC |
Pag-andar ng pin |
LCD & ARM-7 LPC2148 |
1. Kaliwang Pin |
+ Ve mula sa Input ng baterya 9V |
NC |
2.Centre Pin |
- Mula sa baterya |
VSS, R / W, K ng LCD GND ng ARM7 |
3. Tamang Pin |
Kinokontrol ang + 5V Output |
VDD, A ng LCD + 5V ng ARM7 |
Potensyomiter na may LCD
Ginagamit ang isang potensyomiter upang ibahin ang kaibahan ng LCD display. Ang isang palayok ay may tatlong mga pin, Ang kaliwang pin (1) ay konektado sa + 5V at gitna (2) sa VEE o V0 ng LCD module at kanang pin (3) ay konektado sa GND. Maaari naming ayusin ang kaibahan sa pamamagitan ng pag-on ng knob.
Koneksyon sa pagitan ng LPC2148 at potentiometer na may 3.3V voltage regulator
3.3V Boltahe Regulator IC |
Pag-andar ng pin |
ARM-7 LPC2148 |
1. Kaliwang Pin |
- Mula sa baterya |
GND pin |
2.Centre Pin |
Regulado + 3.3V Output |
To potentiometer Input at potentiometer's output sa P0.28 |
3. Tamang Pin |
+ Ve mula sa Input ng baterya 9V |
NC |
Programming ARM7-LPC2148 para sa ADC
Upang Program ARM7-LPC2148 kailangan namin ng keV uVision at Flash Magic tool. Gumagamit kami ng USB Cable upang mai-program ang ARM7 Stick sa pamamagitan ng micro USB port. Nagsusulat kami ng code gamit ang Keil at lumikha ng isang hex file at pagkatapos ang HEX file ay na-flash sa ARM7 stick gamit ang Flash Magic. Upang malaman ang higit pa tungkol sa pag-install ng keil uVision at Flash Magic at kung paano gamitin ang mga ito sundin ang link na Nagsisimula Sa ARM7 LPC2148 Microcontroller at Program ito gamit ang Keil uVision.
Sa tutorial na ito, binago namin ang analog input voltage (0 hanggang 3.3V) sa digital na halaga sa pamamagitan ng paggamit ng ADC sa LPC2148 at ipakita ang analog boltahe sa LCD display (16x2). Gagamitin ang isang potensyomiter upang ibahin ang input ng boltahe ng analog.
Upang malaman ang higit pa tungkol sa interfacing LCD sa ARM7-LPC2148 4-bit mode sundin ang link na ito.
Ang kumpletong code para sa paggamit ng ADC na may ARM 7 ay ibinibigay sa pagtatapos ng tutorial na ito, narito ipinapaliwanag namin ang ilang bahagi nito.
Mga hakbang na kasangkot sa programa ng LPC2148-ADC
1. Ang rehistro ng PINSEL ay ginagamit upang piliin ang port pin ng LPC2148 at ang ADC function bilang analog input.
PINSEL1 = 0x01000000; // Piliin ang P0.28 bilang AD0.1
2. Piliin ang kawastuhan ng orasan at kaunting para sa conversion sa pamamagitan ng halaga ng pagsulat sa ADxCR (rehistro ng kontrol ng ADC).
AD0CR = 0x00200402; // Itinatakda ang pagpapatakbo ng ADC bilang 10-bit / 11 CLK para sa conversion (000)
3. Simulan ang conversion sa pamamagitan ng pagsulat ng halaga sa mga Start bit sa ADxCR.
Nakasulat ako sa ika- 24 na piraso ng rehistro ng AD0CR.
AD0CR = AD0CR - (1 << 24);
4. Ngayon kailangan naming suriin ang TAPOS na bit (ika-31) ng kaukulang ADxDRy (ADC data register) habang nagbabago ito mula 0 hanggang 1. Kaya't ginagamit namin habang loop upang patuloy na suriin kung ang pag-convert ay tapos na sa ika-31 piraso ng data register.
habang (! (AD0DR1 & 0x80000000));
5. Matapos ang tapos na bit ay nakatakda sa 1, matagumpay ang conversion, susunod na basahin namin ang resulta mula sa parehong rehistro ng data ng ADC na AD0DR1 at iimbak ang halaga sa isang variable.
adcvalue = AD0DR1;
Susunod ay gumagamit kami ng isang formula upang mai-convert ang digital na halaga sa boltahe at mag-imbak sa isang variable na pinangalanang boltahe .
boltahe = ((adcvalue / 1023.0) * 3.3);
5. Ang mga sumusunod na linya ay ginagamit upang ipakita ang mga digital na halaga (0 hanggang 1023) pagkatapos ng analog sa digital conversion.
adc = adcvalue; sprintf (displayadc, "adcvalue =% f", adc); LCD_DISPLAY (displayadc); // Ipakita ang halaga ng ADC (0 hanggang 1023)
6. Ang mga sumusunod na linya ay ginagamit upang maipakita ang input analog voltage (0 hanggang 3.3V) pagkatapos ng analog sa digital conversion at pagkatapos ng hakbang 5.
LCD_SEND (0xC0); sprintf (voltvalue, "Boltahe =%. 2f V", boltahe); LCD_DISPLAY (voltvalue); // Display (input analog voltage)
7. Ngayon kailangan nating ipakita ang input boltahe at mga digital na halaga sa LCD display. Bago ito kailangan nating simulan ang LCD display at gumamit ng naaangkop na mga utos para sa pagpapadala ng mensahe upang maipakita.
Ginagamit ang code sa ibaba upang simulan ang LCD
walang bisa LCD_INITILIZE (walang bisa) // Function upang maihanda ang LCD { IO0DIR = 0x0000FFF0; // Nagtatakda ng pin P0.12, P0.13, P0.14, P0.15, P0.4, P0.6 bilang OUTPUT na pagkaantalang_ms (20); LCD_SEND (0x02); // Initialize lcd sa 4-bit mode ng operasyon LCD_SEND (0x28); // 2 lines (16X2) LCD_SEND (0x0C); // Display on cursor off LCD_SEND (0x06); // Auto increment cursor LCD_SEND (0x01); // Ipakita ang malinaw na LCD_SEND (0x80); // First line first posisyon }
Ginagamit ang code sa ibaba upang maipakita ang mga halaga sa LCD
void LCD_DISPLAY (char * msg) // Ang function na i-print ang mga character na ipinadala ng isa-isa { uint8_t i = 0; habang (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // Nagpadala ng Itaas na nibble IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH to print data IO0CLR = 0x00000020; // RW LOW Sumulat mode ng pagkaantala_ms (2); IO0CLR = 0x00000040; // EN = 0, RS at RW hindi nagbago (ie RS = 1, RW = 0) delay_ms (5); IO0PIN = (((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // Nagpapadala ng Mas mababang nibble IO0SET = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; delay_ms (2); IO0CLR = 0x00000040; delay_ms (5); ako ++; } }
Ginagamit ang pagpapaandar sa ibaba upang lumikha ng pagkaantala
void delay_ms (uint16_t j) // Function para sa paggawa ng pagkaantala sa milliseconds { uint16_t x, i; para sa (i = 0; i
Kumpletong code na may demonstrasyon Ang video ay ibinibigay sa ibaba.