- Apakah ADC itu?
- ADC di ARM7-LPC2148
- Pin ADC di ARM7-LPC2148
- ADC Register di ARM7-LPC2148
- Daftar ADxCR di LPC2148
- ADxGDR: Daftar Data Global ADC
- Komponen Diperlukan
- Diagram Sirkuit
- Pemrograman ARM7-LPC2148 untuk ADC
Dalam dunia elektronika terdapat banyak jenis sensor analog di pasaran yang digunakan untuk mengukur suhu, kecepatan, perpindahan, tekanan dll. Sensor analog digunakan untuk menghasilkan keluaran yang terus berubah dari waktu ke waktu. Sinyal dari sensor analog ini cenderung sangat kecil nilainya dari beberapa mikro-volt (uV) hingga beberapa mili-volt (mV), sehingga diperlukan beberapa bentuk amplifikasi. Untuk menggunakan sinyal analog ini pada mikrokontroler kita perlu mengubah sinyal analog menjadi sinyal digital karena mikrokontroler hanya memahami dan memproses sinyal digital. Jadi sebagian besar mikrokontroler memiliki fitur penting bawaan yang disebut ADC (Analog to Digital converter). Mikrokontroler ARM7-LPC2148 kami juga memiliki fitur ADC.
Dalam tutorial ini kita akan melihat bagaimana menggunakan ADC di ARM7-LPC2148 dengan memberikan tegangan yang bervariasi ke pin Analog dan menampilkannya di layar LCD 16x2 setelah konversi analog ke digital. Jadi mari kita mulai dengan pengenalan singkat tentang ADC.
Apakah ADC itu?
Seperti yang dikatakan sebelumnya ADC adalah singkatan dari Analog to digital conversion dan digunakan untuk mengubah nilai analog dari dunia nyata menjadi nilai digital seperti 1 dan 0. Jadi apakah nilai analog ini? Ini adalah yang kita lihat dalam kehidupan kita sehari-hari seperti suhu, kecepatan, kecerahan, dll. Parameter ini diukur sebagai tegangan analog oleh sensor masing-masing dan kemudian nilai Analog ini diubah menjadi nilai Digital untuk mikrokontroler.
Mari kita asumsikan bahwa rentang ADC kita adalah dari 0V hingga 3,3V dan kita memiliki ADC 10-bit, ini berarti tegangan input kita 0-3,3 Volt akan dibagi menjadi 1024 level nilai analog diskrit (2 10 = 1024). Artinya 1024 adalah resolusi untuk ADC 10-bit, demikian pula untuk resolusi ADC 8-bit akan menjadi 512 (28) dan untuk resolusi ADC 16-bit akan menjadi 65.536 (216). LPC2148 memiliki ADC resolusi 10 bit.
Dengan ini jika tegangan input aktual adalah 0V maka ADC MCU akan membacanya sebagai 0 dan jika 3,3V MCU akan membaca 1024 dan jika berada di antara seperti 1.65v maka MCU akan membaca 512. Kita dapat menggunakan yang di bawah ini rumus untuk menghitung nilai digital yang akan dibaca oleh MCU berdasarkan Resolusi ADC dan tegangan Operasi.
(Resolusi ADC / Tegangan Operasi) = (Nilai Digital ADC / Nilai Tegangan Aktual)
Seperti misalnya jika tegangan referensi adalah 3v:
Kami menjelaskan ADC secara rinci di artikel sebelumnya.
ADC di ARM7-LPC2148
- LPC2148 berisi dua konverter analog ke digital.
- Konverter ini adalah konverter analog ke digital 10-bit yang berurutan.
- Sementara ADC0 memiliki enam saluran, ADC1 memiliki delapan saluran.
- Oleh karena itu, jumlah input ADC yang tersedia untuk LPC2148 adalah 14.
- Ini mengubah tegangan input dalam kisaran (0 hingga 3,3V) saja. Itu tidak boleh melebihi 3.3V referensi tegangan. Karena akan merusak IC dan juga memberikan nilai yang tidak pasti.
Beberapa fitur penting ADC di LPC2148
- Setiap konverter mampu melakukan lebih dari 400.000 sampel 10-bit per detik.
- Setiap input analog memiliki register hasil khusus untuk mengurangi overhead interupsi.
- Mode konversi burst untuk satu atau beberapa input.
- Konversi opsional pada transisi pada pin input atau sinyal pertandingan timer.
- Perintah Mulai Global untuk kedua konverter.
Periksa juga cara menggunakan ADC di Mikrokontroler lain:
- Bagaimana cara menggunakan ADC di Arduino Uno?
- Menghubungkan ADC0808 dengan Mikrokontroler 8051
- Menggunakan Modul ADC Mikrokontroler PIC
- Tutorial ADC Raspberry Pi
- Cara menggunakan ADC di MSP430G2 - Mengukur Tegangan Analog
- Cara menggunakan ADC di STM32F103C8
Pin ADC di ARM7-LPC2148
Seperti diceritakan earliar, di ARM7-LPC2148 terdapat dua channel ADC0 dengan 6 pin input analog & ADC1 dengan 8 pin input analog. Jadi total ada 14 pin untuk input analog. Diagram di bawah ini menunjukkan pin yang tersedia untuk input analog.
Karena pin input ADC digandakan dengan pin GPIO lainnya. Kita perlu mengaktifkannya dengan mengkonfigurasi register PINSEL untuk memilih fungsi ADC.
Tabel di bawah ini menunjukkan pin ADC dan saluran ADC terkait no di LPC2148. AD0 adalah saluran 0 dan AD1 adalah saluran 1
LPC2148 Pin |
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 |
ADC Register di ARM7-LPC2148
Register digunakan dalam pemrograman untuk menggunakan fitur konversi A / D di LPC2148.
Di bawah ini adalah daftar register yang digunakan dalam LPC2148 untuk konversi A / D
1. ADCR: Register Kontrol Analog ke Digital
Gunakan: Register ini digunakan untuk mengkonfigurasi konverter A / D di LPC2148
2. ADGDR: Register Data Global dari Analog ke Digital
Gunakan: Register ini memiliki bit SELESAI untuk A / D converter dan HASIL konversi disimpan di sini.
3. ADINTERN: Analog to Digital Interrupt Enable Register
Gunakan: Ini adalah register Mengaktifkan Interupsi.
4. ADDR0 - ADDR7: Register Data Saluran Analog ke Digital
Penggunaan: Register ini berisi nilai A / D untuk masing-masing saluran.
5. ADSTAT: Register Status Analog ke Digital.
Penggunaan: Register ini berisi flag SELESAI untuk masing-masing saluran ADC dan juga tanda BERLAKU untuk saluran ADC masing-masing.
Dalam tutorial ini kita hanya akan menggunakan register ADCR & ADGDR saja. Mari kita lihat secara detail
Daftar ADxCR di LPC2148
AD0CR & AD1CR untuk saluran 0 dan saluran 1 masing-masing. Ini adalah register 32-Bit. Tabel di bawah ini menunjukkan bidang bit untuk register ADCR.
31:28 |
27 |
26:24 |
23:22 |
21 |
20 |
19:17 |
16 |
15: 8 |
7: 0 |
PENDIAM |
TEPI |
MULAILAH |
PENDIAM |
PDN |
PENDIAM |
CLKS |
LEDAKAN |
CLCKDIV |
SEL |
Mari kita lihat tentang cara mengkonfigurasi register individu
1. SEL: Bit dari (0 sampai 7) digunakan untuk memilih saluran untuk konversi ADC. Satu bit dialokasikan untuk setiap saluran. Misalnya pengaturan Bit-0 akan membuat ADC menjadi sampel AD0.1 untuk konversi. Dan pengaturan bit -1 akan membuat AD0.1; demikian pula pengaturan bit-7 akan melakukan konversi 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 sampai 15) adalah untuk Pembagi Jam. Di sini jam APB (jam Bus Periferal ARM) dibagi dengan nilai ini ditambah satu untuk menghasilkan jam yang diperlukan untuk konverter A / D, yang harus kurang dari atau sama dengan 4,5 MHz karena kami menggunakan metode pendekatan yang berurutan di LPC2148.
3. BURST: Bit 16 digunakan untuk mode konversi BURST.
Pengaturan 1: ADC akan melakukan konversi untuk semua saluran yang dipilih dalam SEL bit.
Pengaturan 0: Akan menonaktifkan mode konversi BURST.
4. CLCKS: Bit dari (17 hingga 19) tiga bit digunakan untuk memilih resolusi dan jumlah clock untuk konversi A / D dalam mode burst karena ini adalah mode konversi A / D kontinu.
Nilai untuk bit (17 hingga 19) |
Bit (Akurasi) |
Jumlah 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 Mode Matikan ADC di LPC2148.
- A / D dalam mode PDN.
- A / D dalam mode operasional
6. MULAI: Bit dari (24 hingga 26) adalah untuk MULAI. Ketika mode konversi BURST OFF dengan menyetel 0, bit MULAI ini berguna untuk saat memulai konversi A / D. MULAI juga digunakan untuk konversi yang dikontrol tepi. Saat itulah ada input dalam pin CAP atau MAT dari LPC2148, A / D mulai berubah. Mari kita periksa tabel di bawah ini
Nilai untuk Bit (24 hingga 26) |
Pin dari LPC2148 |
Fungsi ADC |
000 |
Digunakan untuk mengatur ADC dalam mode PDN Tidak Ada Mulai |
|
001 |
Mulai Konversi A / D |
|
010 |
CAP0.2 / MAT0.2 |
Mulai konversi A / D pada EDGE yang dipilih pada pin 27 (Naik atau Turun) 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 untuk EDGE digunakan hanya jika bit START berisi 010-111. Ini memulai konversi ketika ada input CAP atau MAT yang dapat Anda lihat tabel di atas untuk itu.
Pengaturan : 0 - Di Tepi Jatuh
1 - Di Tepi Meningkat
ADxGDR: Daftar Data Global ADC
AD0GDR & AD1GDR masing-masing untuk ADC Saluran 0 & ADC saluran 1.
Ini adalah register 32-bit yang berisi HASIL konversi A / D dan juga bit SELESAI yang menunjukkan bahwa konversi A / D telah selesai. Tabel di bawah ini menunjukkan bidang bit untuk register ADGDR.
31 |
30 |
29:27 |
26:24 |
23:16 |
15: 6 |
5: 0 |
SELESAI |
MENYERBU |
PENDIAM |
CHN |
PENDIAM |
HASIL |
PENDIAM |
1. HASIL: Bit-bit ini (6 hingga 15) berisi hasil konversi A / D untuk saluran yang dipilih dalam register ADCR SEL. Nilainya hanya baca setelah konversi A / D selesai dan ini ditunjukkan dengan bit SELESAI.
CONTOH: Untuk hasil ADC 10-Bit, nilai yang disimpan bervariasi dari (0 hingga 1023).
2. SALURAN: Bit 24 sampai 26 ini berisi nomor saluran dimana konversi A / D dilakukan. Nilai digital yang dikonversi hadir dalam bit HASIL.
CONTOH: 000 untuk ADC saluran 0 dan 001 untuk ADC saluran 1, dll
3. OVERRUN: Bit ke- 30 untuk OVERRUN digunakan dalam mode BURST. Ketika ditetapkan 1, nilai ADC yang dikonversi sebelumnya ditimpa oleh nilai ADC yang baru dikonversi. Ketika register dibaca, bit OVERRUN dihapus.
4. SELESAI: Bit ke-31 adalah untuk bit SELESAI.
Set 1: Saat konversi A / D selesai.
Set 0: Ketika register dibaca dan ADCR ditulis.
Kami telah melihat tentang register penting yang digunakan di ADC di LPC2148. Sekarang mari mulai menggunakan ADC di ARM7.
Komponen Diperlukan
Perangkat keras
- Mikrokontroler ARM7-LPC2148
- IC regulator tegangan 3.3V
- IC pengatur tegangan 5V
- Potensiometer 10K - 2 Nos
- LED (Warna apa saja)
- Layar LCD (16X2)
- Baterai 9V
- Papan tempat memotong roti
- Menghubungkan Kabel
Perangkat lunak
- Keil uVision5
- Alat Flash Ajaib
Diagram Sirkuit
Tabel di bawah ini menunjukkan koneksi sirkuit antara LCD & ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (Pilih Daftar) |
P0.6 |
E (Aktifkan) |
P0.12 |
D4 (Data pin 4) |
P0.13 |
D5 (Data pin 5) |
P0.14 |
D6 (Data pin 6) |
P0.15 |
D7 (Data pin 7) |
Pelajari lebih lanjut tentang menggunakan LCD dengan ARM 7 - LPC2148.
PENTING: Di sini kita menggunakan dua IC regulator tegangan, satu untuk layar LCD 5V dan satu lagi 3,3V untuk input analog yang dapat divariasikan oleh potensiometer.
Koneksi antara Regulator Tegangan 5V dengan LCD & ARM7 Stick
IC Regulator Tegangan 5V |
Fungsi pin |
LCD & ARM-7 LPC2148 |
1. Pin Kiri |
+ Ve dari baterai 9V Input |
NC |
2. Pin Pusat |
- Ve dari baterai |
VSS, R / W, K LCD GND dari ARM7 |
3. Pin Kanan |
Teratur + 5V Output |
VDD, A LCD + 5V dari ARM7 |
Potensiometer dengan LCD
Potensiometer digunakan untuk memvariasikan kontras layar LCD. Sebuah pot memiliki tiga pin, pin kiri (1) terhubung ke + 5V dan tengah (2) ke VEE atau V0 modul LCD dan pin kanan (3) terhubung ke GND. Kita bisa mengatur kontras dengan memutar kenop.
Koneksi antara LPC2148 & potensiometer dengan pengatur tegangan 3.3V
IC Regulator Tegangan 3.3V |
Fungsi pin |
ARM-7 LPC2148 |
1. Pin Kiri |
- Ve dari baterai |
Pin GND |
2. Pin Pusat |
Diatur + Output 3.3V |
Untuk Potensiometer Input dan output potensiometer ke P0.28 |
3. Pin Kanan |
+ Ve dari baterai 9V Input |
NC |
Pemrograman ARM7-LPC2148 untuk ADC
Untuk memprogram ARM7-LPC2148 kita membutuhkan alat keil uVision & Flash Magic. Kami menggunakan Kabel USB untuk memprogram ARM7 Stick melalui port micro USB. Kami menulis kode menggunakan Keil dan membuat file hex dan kemudian file HEX di-flash ke tongkat ARM7 menggunakan Flash Magic. Untuk mengetahui lebih lanjut tentang menginstal keil uVision dan Flash Magic dan bagaimana menggunakannya ikuti link Memulai Dengan Mikrokontroler ARM7 LPC2148 dan Program itu menggunakan Keil uVision.
Dalam tutorial ini kita mengubah tegangan input analog (0 menjadi 3.3V) menjadi nilai digital dengan menggunakan ADC di LPC2148 dan menampilkan tegangan analog pada layar LCD (16x2). Potensiometer akan digunakan untuk memvariasikan tegangan analog masukan.
Untuk mengetahui lebih lanjut tentang antarmuka LCD dengan mode 4-bit ARM7-LPC2148 ikuti tautan ini.
The kode lengkap untuk menggunakan ADC dengan ARM 7 diberikan pada akhir tutorial ini, di sini kita menjelaskan beberapa bagian dari itu.
Langkah-langkah yang terlibat dalam pemrograman LPC2148-ADC
1. Register PINSEL digunakan untuk memilih pin port dari LPC2148 dan fungsi ADC sebagai input analog.
PINSEL1 = 0x01000000; // Pilih P0.28 sebagai AD0.1
2. Pilih jam dan akurasi bit untuk konversi dengan menulis nilai ke ADxCR (register kontrol ADC).
AD0CR = 0x00200402; // Menetapkan operasi ADC sebagai 10-bit / 11 CLK untuk konversi (000)
3. Mulai konversi dengan menulis nilai ke MULAI bit di ADxCR.
Di sini saya telah menulis 24 th sedikit AD0CR mendaftar.
AD0CR = AD0CR - (1 << 24);
4. Sekarang kita harus memeriksa bit SELESAI (31) dari ADxDRy yang sesuai (register data ADC) karena berubah dari 0 ke 1. Jadi kita menggunakan while loop untuk terus memeriksa apakah konversi dilakukan pada bit ke-31 dari data register.
while (! (AD0DR1 & 0x80000000));
5. Setelah bit selesai disetel ke 1, konversi berhasil, selanjutnya kita membaca hasil dari data ADC register AD0DR1 yang sama dan menyimpan nilainya dalam sebuah variabel.
adcvalue = AD0DR1;
Selanjutnya kita menggunakan rumus untuk mengubah nilai digital menjadi tegangan dan menyimpannya dalam variabel bernama tegangan .
tegangan = ((adcvalue / 1023.0) * 3.3);
5. Baris berikut digunakan untuk menampilkan nilai digital (0 hingga 1023) setelah konversi analog ke digital.
adc = adcvalue; sprintf (displayadc, "adcvalue =% f", adc); LCD_DISPLAY (displayadc); // Menampilkan nilai ADC (0 hingga 1023)
6. Baris berikut digunakan untuk menampilkan tegangan analog input (0 hingga 3,3V) setelah konversi analog ke digital dan setelah langkah 5.
LCD_SEND (0xC0); sprintf (nilai volt, "Voltase =%. 2f V", voltase); LCD_DISPLAY (nilai volt); // Tampilan (masukan tegangan analog)
7. Sekarang kita harus menampilkan tegangan input dan nilai digital pada layar LCD. Sebelumnya kita harus menginisialisasi layar LCD dan menggunakan perintah yang sesuai untuk mengirim pesan ke tampilan.
Kode di bawah ini digunakan untuk menginisialisasi LCD
void LCD_INITILIZE (void) // Berfungsi untuk menyiapkan LCD { IO0DIR = 0x0000FFF0; // Set pin P0.12, P0.13, P0.14, P0.15, P0.4, P0.6 sebagai OUTPUT delay_ms (20); LCD_SEND (0x02); // Inisialisasi lcd dalam mode operasi 4-bit LCD_SEND (0x28); // 2 baris (16X2) LCD_SEND (0x0C); // Menampilkan kursor pada LCD_SEND (0x06); // Kursor kenaikan otomatis LCD_SEND (0x01); // Tampilkan LCD_SEND yang jelas (0x80); // baris pertama posisi pertama }
Kode di bawah ini digunakan untuk Menampilkan nilai pada LCD
kekosongan LCD_DISPLAY (char * msg) // Fungsi untuk mencetak karakter yang dikirim satu persatu { uint8_t i = 0; sementara (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // Mengirimkan nibble IO0SET = 0x00000050; // RS TINGGI & AKTIFKAN TINGGI untuk mencetak data IO0CLR = 0x00000020; // RW RENDAH Mode tulis delay_ms (2); IO0CLR = 0x00000040; // EN = 0, RS dan RW tidak berubah (yaitu RS = 1, RW = 0) delay_ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // Mengirimkan nibble IO0SET = 0x00000050 lebih rendah; // RS & EN TINGGI IO0CLR = 0x00000020; delay_ms (2); IO0CLR = 0x00000040; delay_ms (5); i ++; } }
Fungsi di bawah ini digunakan untuk membuat penundaan
void delay_ms (uint16_t j) // Fungsi untuk membuat penundaan dalam milidetik { uint16_t x, i; untuk (i = 0; i
Kode lengkap dengan Video demonstrasi diberikan di bawah ini.