- Apa itu ADC?
- ADC dalam ARM7-LPC2148
- Pin ADC di ARM7-LPC2148
- Daftar ADC di ARM7-LPC2148
- Daftar ADxCR di LPC2148
- ADxGDR: Daftar Data Global ADC
- Komponen Diperlukan
- Rajah Litar
- Pengaturcaraan ARM7-LPC2148 untuk ADC
Dalam dunia elektronik terdapat banyak jenis sensor analog di pasaran yang digunakan untuk mengukur suhu, kelajuan, anjakan, tekanan dan lain-lain. Sensor analog digunakan untuk menghasilkan output yang terus berubah dari masa ke masa. Isyarat dari sensor analog ini cenderung sangat kecil nilainya dari beberapa volt mikro (uV) hingga beberapa mili-volt (mV), jadi diperlukan beberapa bentuk penguatan. Untuk menggunakan isyarat analog ini dalam mikrokontroler, kita perlu menukar isyarat analog menjadi isyarat digital kerana mikrokontroler hanya memahami dan memproses isyarat digital. Oleh itu, kebanyakan mikrokontroler mempunyai ciri penting dalaman yang disebut ADC (Analog to Digital converter). Mikrokontroler ARM7-LPC2148 kami juga mempunyai ciri ADC.
Dalam tutorial ini kita akan melihat cara menggunakan ADC di ARM7-LPC2148 dengan membekalkan voltan yang berbeza-beza ke pin Analog dan memaparkannya pada skrin LCD 16x2 setelah penukaran analog ke digital. Oleh itu, mari kita mulakan dengan pengenalan ringkas mengenai ADC.
Apa itu ADC?
Seperti yang dinyatakan sebelumnya ADC bermaksud Analog ke penukaran digital dan ia digunakan untuk menukar nilai analog dari dunia nyata menjadi nilai digital seperti 1 dan 0. Oleh itu, apakah nilai analog ini? Inilah yang kita lihat dalam kehidupan kita sehari-hari seperti suhu, kelajuan, kecerahan dan lain-lain. Parameter ini diukur sebagai voltan analog oleh sensor masing-masing dan kemudian nilai Analog ini ditukar menjadi nilai Digital untuk mikrokontroler.
Mari kita anggap bahawa julat ADC kami adalah dari 0V hingga 3.3V dan kami mempunyai ADC 10-bit ini bermaksud voltan input kami 0-3.3 Volt akan dibahagikan kepada 1024 tahap nilai analog diskrit (2 10 = 1024). Bererti 1024 adalah resolusi untuk ADC 10-bit, sama untuk resolusi ADC 8-bit akan menjadi 512 (28) dan untuk resolusi ADC 16-bit akan menjadi 65.536 (216). LPC2148 mempunyai ADC resolusi 10 bit.
Dengan ini jika voltan masukan sebenar adalah 0V maka ADC MCU akan membacanya sebagai 0 dan jika 3.3V, MCU akan membaca 1024 dan jika di suatu tempat antara 1.65v maka MCU akan membaca 512. Kita boleh menggunakan yang berikut formula untuk mengira nilai digital yang akan dibaca oleh MCU berdasarkan Resolusi voltan ADC dan Operasi.
(Resolusi ADC / Voltan Operasi) = (Nilai Digital ADC / Nilai Voltan Sebenar)
Seperti contohnya jika voltan rujukan adalah 3v:
Kami menerangkan ADC secara terperinci dalam artikel sebelumnya.
ADC dalam ARM7-LPC2148
- LPC2148 mengandungi dua penukar analog ke digital.
- Penukar ini adalah analog hampir 10-bit berturut - turut kepada penukar digital.
- Walaupun ADC0 mempunyai enam saluran, ADC1 mempunyai lapan saluran.
- Oleh itu, jumlah input ADC yang tersedia untuk LPC2148 adalah 14.
- Ia menukar voltan input dalam lingkungan (0 hingga 3.3V) sahaja. Ia tidak boleh melebihi 3.3V rujukan voltan. Kerana ia akan merosakkan IC dan juga memberikan nilai yang tidak pasti.
Beberapa ciri penting ADC dalam LPC2148
- Setiap penukar mampu melakukan lebih daripada 400000 sampel 10-bit sesaat.
- Setiap input analog mempunyai daftar hasil khusus untuk mengurangkan overhead gangguan.
- Mod penukaran burst untuk input tunggal atau berganda.
- Penukaran pilihan semasa peralihan pada isyarat input pin atau pemasa.
- Perintah Mula Global untuk kedua-dua penukar.
Juga periksa cara menggunakan ADC dalam Mikrokontroler lain:
- Bagaimana Menggunakan ADC di Arduino Uno?
- Memadankan ADC0808 dengan Mikrokontroler 8051
- Menggunakan Modul ADC Mikrokontroler PIC
- Tutorial ADP Raspberry Pi
- Cara menggunakan ADC dalam MSP430G2 - Mengukur Voltan Analog
- Cara menggunakan ADC di STM32F103C8
Pin ADC di ARM7-LPC2148
Seperti yang diberitahu pada telinga, dalam ARM7-LPC2148 terdapat dua saluran ADC0 dengan 6 pin input analog & ADC1 dengan 8 pin input analog. Oleh itu, terdapat 14 pin untuk input analog. Gambar rajah di bawah menunjukkan pin yang tersedia untuk input analog.
Oleh kerana pin input ADC digandakan dengan pin GPIO yang lain. Kita perlu mengaktifkannya dengan mengkonfigurasi daftar PINSEL untuk memilih fungsi ADC.
Jadual di bawah menunjukkan pin ADC dan no saluran ADC yang dihormati di LPC2148. AD0 adalah saluran 0 dan AD1 adalah saluran 1
Pin LPC2148 |
Saluran ADC 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 |
Daftar ADC di ARM7-LPC2148
Daftar digunakan dalam pengaturcaraan untuk menggunakan fitur penukaran A / D di LPC2148.
Berikut adalah senarai daftar yang digunakan dalam LPC2148 untuk penukaran A / D
1. ADCR: Daftar Kawalan Analog ke Digital
Gunakan: Daftar ini digunakan untuk mengkonfigurasi penukar A / D di LPC2148
2. ADGDR: Daftar Data Global Analog ke Digital
Gunakan: Daftar ini mempunyai bit SELESAI untuk penukar A / D dan HASIL penukaran disimpan di sini.
3. ADINTERN: Analog ke Digital Interrupt Enable Register
Gunakan: Ini adalah daftar Interrupt Enable.
4. ADDR0 - ADDR7: Daftar Data Saluran Analog ke Digital
Gunakan: Daftar ini mengandungi nilai A / D untuk saluran masing-masing.
5. ADSTAT: Daftar Status Analog ke Digital.
Gunakan: Daftar ini mengandungi bendera SELESAI untuk saluran ADC masing-masing dan juga bendera OVERRUN untuk saluran ADC masing-masing.
Dalam tutorial ini kita hanya akan menggunakan register ADCR & ADGDR sahaja. Mari lihat secara terperinci mengenai mereka
Daftar ADxCR di LPC2148
AD0CR & AD1CR untuk saluran 0 dan saluran 1 masing-masing. Ini adalah daftar 32-Bit. Jadual di bawah menunjukkan medan bit untuk daftar ADCR.
31:28 |
27 |
26:24 |
23:22 |
21 |
20 |
19:17 |
16 |
15: 8 |
7: 0 |
TEMPAHAN |
HUJUNG |
BERMULA |
TEMPAHAN |
PDN |
TEMPAHAN |
CLKS |
BURUH |
CLCKDIV |
SEL |
Mari lihat bagaimana mengkonfigurasi daftar individu
1. SEL: Bit dari (0 hingga 7) digunakan untuk memilih saluran untuk penukaran ADC. Satu bit diperuntukkan untuk setiap saluran. Sebagai contoh menetapkan Bit-0 akan menjadikan ADC menjadi sampel AD0.1 untuk penukaran. Dan menetapkan bit -1 akan menjadikan AD0.1; sama menetapkan bit-7 akan melakukan penukaran untuk AD0.7. Langkah penting adalah kita memiliki PINSEL sesuai dengan port yang kita gunakan misalnya PINSEL0 untuk PORT0 di PLC2148.
2. CLCKDIV: Bit dari (8 hingga 15) adalah untuk Jam Pembahagi. Di sini jam APB (ARM Peripheral Bus clock) dibahagi dengan nilai ini ditambah satu untuk menghasilkan jam yang diperlukan untuk penukar A / D, yang seharusnya kurang dari atau sama dengan 4,5 MHz kerana kita menggunakan kaedah penghampiran berturut-turut dalam LPC2148.
3. BURST: Bit 16 digunakan untuk mod penukaran BURST.
Menetapkan 1: ADC akan melakukan penukaran untuk semua saluran yang dipilih dalam bit SEL.
Menetapkan 0: Akan mematikan mod penukaran BURST.
4. CLCKS: Bit dari (17 hingga 19) tiga bit digunakan untuk memilih resolusi dan jumlah jam untuk penukaran A / D dalam mod burst kerana ia adalah mod penukaran A / D berterusan.
Nilai untuk bit (17 hingga 19) |
Bit (Ketepatan) |
Tiada Jam |
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 adalah untuk memilih Power down Mode ADC di LPC2148.
- A / D berada dalam mod PDN.
- A / D dalam mod operasi
6. MULAI: Bit dari (24 hingga 26) adalah untuk MULAI. Apabila mod penukaran BURST MATI dengan menetapkan 0, bit MULAI ini berguna untuk kapan memulakan penukaran A / D. MULAI digunakan untuk penukaran terkawal tepi juga. Iaitu apabila ada input dalam pin CAP atau MAT LPC2148 A / D mula ditukar. Mari periksa jadual di bawah
Nilai untuk Bit (24 hingga 26) |
Pin LPC2148 |
Fungsi ADC |
000 |
Digunakan untuk menetapkan ADC dalam mod PDN Tiada Permulaan |
|
001 |
Mulakan Penukaran A / D |
|
010 |
CAP0.2 / MAT0.2 |
Mulakan penukaran A / D pada EDGE yang dipilih pada pin 27 (Naik atau Jatuh) pada pin CAP / MAT LPC2148 |
011 |
CAP0.0 / MAT0.0 |
|
100 |
MAT0.1 |
|
101 |
MAT0.3 |
|
110 |
MAT1.0 |
|
111 |
MAT1.1 |
7. EDGE: Bit ke- 27 adalah untuk EDGE digunakan hanya apabila bit MULAI mengandungi 010-111. Ia memulakan penukaran apabila terdapat input CAP atau MAT yang dapat anda lihat di atas jadual untuk itu.
Tetapan : 0 - Di Falling Edge
1 - Di Rising Edge
ADxGDR: Daftar Data Global ADC
AD0GDR & AD1GDR masing-masing untuk ADC Saluran 0 & ADC saluran 1.
Ini adalah register 32-bit yang mengandungi HASIL penukaran A / D dan juga bit DONE yang menunjukkan bahawa penukaran A / D telah selesai. Jadual di bawah menunjukkan medan bit untuk daftar ADGDR.
31 |
30 |
29:27 |
26:24 |
23:16 |
15: 6 |
5: 0 |
SELESAI |
KESELURUHAN |
TEMPAHAN |
CHN |
TEMPAHAN |
HASIL |
TEMPAHAN |
1. KEPUTUSAN: Bit ini (6 hingga 15) mengandungi hasil penukaran A / D untuk saluran yang dipilih dalam daftar ADCR SEL. Nilainya dibaca hanya setelah penukaran A / D selesai dan ini ditunjukkan oleh DONE bit.
CONTOH: Untuk hasil ADC 10-bit, nilai yang disimpan berbeza dari (0 hingga 1023).
2. SALURAN: Bit 24 hingga 26 ini mengandungi nombor saluran yang mana penukaran A / D dilakukan. Nilai digital yang ditukar terdapat dalam bit RESULT.
CONTOH: 000 adalah untuk saluran ADC 0 dan 001 adalah untuk saluran ADC 1, dll
3. OVERRUN: Bit ke- 30 untuk OVERRUN digunakan dalam mod BURST. Apabila ditetapkan 1 nilai ADC yang ditukar sebelumnya akan ditimpa oleh nilai ADC yang baru ditukar. Apabila daftar dibaca, ia akan membersihkan bit OVERRUN.
4. SELESAI: Bit ke-31 adalah untuk bit SELESAI.
Set 1: Apabila penukaran A / D selesai.
Set 0: Semasa daftar dibaca dan ADCR ditulis.
Kami telah melihat mengenai daftar penting yang digunakan dalam ADC di LPC2148. Sekarang mari kita mula menggunakan ADC di ARM7.
Komponen Diperlukan
Perkakasan
- Mikrokontroler ARM7-LPC2148
- IC pengatur voltan 3.3V
- IC pengatur voltan 5V
- Potensiometer 10K - 2 Nos
- LED (Sebarang Warna)
- Paparan LCD (16X2)
- Bateri 9V
- Papan roti
- Wayar Penyambung
Perisian
- Keil uVision5
- Alat Kilat Ajaib
Rajah Litar
Jadual di bawah menunjukkan sambungan litar antara LCD & ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (Pilih Pilih) |
P0.6 |
E (Aktifkan) |
P0.12 |
D4 (Pin data 4) |
P0.13 |
D5 (Pin data 5) |
P0.14 |
D6 (Pin data 6) |
P0.15 |
D7 (Pin data 7) |
Ketahui lebih lanjut mengenai penggunaan LCD dengan ARM 7 - LPC2148.
PENTING: Di sini kita menggunakan dua IC pengatur voltan satu untuk paparan LCD 5V dan satu lagi 3.3V untuk input analog yang dapat diubah oleh potensiometer.
Sambungan antara Regulator Voltan 5V dengan Stick LCD & ARM7
IC Pengatur Voltan 5V |
Fungsi pin |
LCD & ARM-7 LPC2148 |
1. Pin Kiri |
+ Ve dari Input bateri 9V |
NC |
2. Pin Pusat |
- Ve dari bateri |
VSS, R / W, K dari LCD GND ARM7 |
3. Pin Kanan |
Keluaran + 5V Teratur |
VDD, A dari LCD + 5V ARM7 |
Potensiometer dengan LCD
Potensiometer digunakan untuk mengubah kontras paparan LCD. Sebuah periuk mempunyai tiga pin, Pin kiri (1) disambungkan ke + 5V dan tengah (2) ke modul LCD VEE atau V0 dan pin kanan (3) disambungkan ke GND. Kita boleh menyesuaikan kontras dengan memutar tombol.
Sambungan antara LPC2148 & potensiometer dengan pengatur voltan 3.3V
IC Pengatur Voltan 3.3V |
Fungsi pin |
ARM-7 LPC2148 |
1. Pin Kiri |
- Ve dari bateri |
Pin GND |
2. Pin Pusat |
Keluaran + 3.3V Teratur |
Ke input Potensiometer dan output potensiometer ke P0.28 |
3. Pin Kanan |
+ Ve dari Input bateri 9V |
NC |
Pengaturcaraan ARM7-LPC2148 untuk ADC
Untuk Program ARM7-LPC2148, kami memerlukan alat keil uVision & Flash Magic. Kami menggunakan Kabel USB untuk memprogram ARM7 Stick melalui port USB mikro. Kami menulis kod menggunakan Keil dan membuat fail hex dan kemudian fail HEX diturunkan ke tongkat ARM7 menggunakan Flash Magic. Untuk mengetahui lebih lanjut mengenai memasang keil uVision dan Flash Magic dan cara menggunakannya, ikuti pautan Memulakan Dengan Mikrokontroler ARM7 LPC2148 dan Program dengan menggunakan Keil uVision.
Dalam tutorial ini kita menukar voltan input analog (0 hingga 3.3V) menjadi nilai digital dengan menggunakan ADC di LPC2148 dan memaparkan voltan analog pada paparan LCD (16x2). Potensiometer akan digunakan untuk mengubah voltan analog input.
Untuk mengetahui lebih lanjut mengenai menghubungkan LCD dengan mod 4-bit ARM7-LPC2148 ikuti pautan ini.
The kod lengkap untuk menggunakan ADC dengan ARM 7 diberikan pada akhir tutorial ini, di sini kita menerangkan beberapa bahagian daripadanya.
Langkah-langkah yang terlibat dalam pengaturcaraan LPC2148-ADC
1. Daftar PINSEL digunakan untuk memilih pin port LPC2148 dan fungsi ADC sebagai input analog.
PINSEL1 = 0x01000000; // Pilih P0.28 sebagai AD0.1
2. Pilih ketepatan jam dan bit untuk penukaran dengan menulis nilai ke ADxCR (ADC control register).
AD0CR = 0x00200402; // Menetapkan operasi ADC sebagai 10-bit / 11 CLK untuk penukaran (000)
3. Mulakan penukaran dengan menulis nilai untuk MULAI bit dalam ADxCR.
Di sini saya telah menulis surat kepada 24 th sedikit AD0CR daftar.
AD0CR = AD0CR - (1 << 24);
4. Sekarang kita harus memeriksa bit DONE (31th) dari ADxDRy (register data ADC) yang sesuai kerana ia berubah dari 0 hingga 1. Oleh itu, kita menggunakan loop sementara untuk sentiasa memeriksa apakah penukaran dilakukan pada bit data register ke-31.
sementara (! (AD0DR1 & 0x80000000));
5. Setelah bit selesai ditetapkan ke 1, penukaran berjaya, seterusnya kita membaca hasil dari daftar data ADC yang sama AD0DR1 dan menyimpan nilainya dalam pemboleh ubah.
nilai iklan = AD0DR1;
Seterusnya kita menggunakan formula untuk menukar nilai digital menjadi voltan dan menyimpan dalam pemboleh ubah bernama voltan .
voltan = ((nilai iklan / 1023.0) * 3.3);
5. Garis berikut digunakan untuk memaparkan nilai digital (0 hingga 1023) selepas penukaran analog ke digital.
adc = nilai iklan; sprintf (displayadc, "adcvalue =% f", adc); LCD_DISPLAY (displayadc); // Paparkan nilai ADC (0 hingga 1023)
6. Garis berikut digunakan untuk menampilkan voltan analog input (0 hingga 3.3V) selepas penukaran analog ke digital dan selepas langkah 5.
LCD_SEND (0xC0); sprintf (voltvalue, "Voltage =%. 2f V", voltan); LCD_DISPLAY (nilai voltan); // Paparan (input voltan analog)
7. Sekarang kita harus memaparkan voltan input dan nilai digital pada paparan LCD. Sebelum itu kita harus menginisialisasi paparan LCD dan menggunakan perintah yang sesuai untuk mengirim pesan untuk dipaparkan.
Kod di bawah digunakan untuk Memulakan LCD
void LCD_INITILIZE (void) // Fungsi untuk menyiapkan LCD { IO0DIR = 0x0000FFF0; // Menetapkan pin P0.12, P0.13, P0.14, P0.15, P0.4, P0.6 sebagai OUTPUT delay_ms (20); LCD_SEND (0x02); // Permulaan lcd dalam mod operasi 4-bit LCD_SEND (0x28); // 2 baris (16X2) LCD_SEND (0x0C); // Paparan pada kursor mati LCD_SEND (0x06); // Kursor kenaikan automatik LCD_SEND (0x01); // Paparkan jelas LCD_SEND (0x80); // Kedudukan pertama barisan pertama }
Kod di bawah digunakan untuk Menampilkan nilai pada LCD
LCD_DISPLAY tidak sah (char * msg) // fungsi untuk mencetak aksara dihantar satu demi satu { uint8_t i = 0; sementara (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // Menghantar Gigitan Atas IO0SET = 0x00000050; // RS TINGGI & BOLEH TINGGI untuk mencetak data IO0CLR = 0x00000020; // RW LOW mode tulis delay_ms (2); IO0CLR = 0x00000040; // EN = 0, RS dan RW tidak berubah (iaitu RS = 1, RW = 0) delay_ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // Menghantar gumpalan bawah IO0SET = 0x00000050; // RS & EN TINGGI IO0CLR = 0x00000020; kelewatan_ms (2); IO0CLR = 0x00000040; kelewatan_ms (5); saya ++; } }
Fungsi di bawah digunakan untuk membuat kelewatan
void delay_ms (uint16_t j) // Fungsi untuk membuat kelewatan dalam milisaat { uint16_t x, i; untuk (i = 0; i
Kod lengkap dengan Video demonstrasi diberikan di bawah.