- Komponen yang Diperlukan dan Penyiapan Perangkat Keras
- Diagram Sirkuit Nuvoton N76E003 untuk Membaca Tegangan Analog
- Informasi tentang GPIO dan Analog Pin di N76E003
- Informasi tentang ADC Peripheral di N76E003
- Pemrograman N76E003 untuk ADC
- Mem-flash kode dan hasilnya
Analog to Digital converter (ADC) adalah fitur perangkat keras yang paling banyak digunakan pada mikrokontroler. Dibutuhkan tegangan analog dan mengubahnya menjadi nilai digital. Karena mikrokontroler adalah perangkat digital dan bekerja dengan digit biner 1 dan 0, mikrokontroler tidak dapat memproses data analog secara langsung. Dengan demikian, ADC digunakan untuk mengambil tegangan analog dan mengubahnya menjadi nilai digital ekuivalen yang dapat dipahami mikrokontroler. Jika Anda ingin lebih banyak tentang Analog to Digital Converter (ADC), Anda dapat memeriksa artikel terkait.
Ada berbagai sensor yang tersedia dalam elektronik yang menyediakan keluaran Analog, seperti sensor gas MQ, sensor Akselerometer ADXL335, dll. Jadi, dengan menggunakan konverter Analog ke Digital, sensor-sensor tersebut dapat dihubungkan dengan unit mikrokontroler. Anda juga dapat melihat tutorial lain yang tercantum di bawah ini, untuk menggunakan ADC dengan 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
Dalam tutorial ini, kita akan menggunakan perangkat ADC bawaan dari unit mikrokontroler N76E003 jadi mari kita evaluasi jenis pengaturan perangkat keras yang kita perlukan untuk aplikasi ini.
Komponen yang Diperlukan dan Penyiapan Perangkat Keras
Untuk menggunakan ADC pada N76E003, kita akan menggunakan pembagi tegangan dengan menggunakan potensiometer dan membaca tegangan mulai dari 0V-5.0V. Tegangan akan ditampilkan di LCD Karakter 16x2, jika Anda baru dengan LCD dan N76E003, Anda dapat memeriksa cara menghubungkan LCD dengan Nuvoton N76E003. Sehingga komponen utama yang dibutuhkan untuk proyek ini adalah LCD Karakter 16x2. Untuk proyek ini, kami akan menggunakan komponen di bawah ini-
- Karakter LCD 16x2
- Resistor 1k
- Potensiometer 50k atau pot trim
- Beberapa kabel Berg
- Beberapa kabel hookup
- Papan tempat memotong roti
Belum lagi, selain komponen di atas, kita membutuhkan development board berbasis mikrokontroler N76E003 serta Nu-Link Programmer. Unit catu daya 5V tambahan juga diperlukan karena LCD menarik arus yang cukup sehingga programmer tidak dapat menyediakannya.
Diagram Sirkuit Nuvoton N76E003 untuk Membaca Tegangan Analog
Seperti yang dapat kita lihat pada skema, port P0 digunakan untuk koneksi terkait LCD. Di sisi paling kiri, koneksi antarmuka pemrograman ditampilkan. Potensiometer bertindak sebagai pembagi tegangan dan itu dirasakan oleh input analog 0 (AN0).
Informasi tentang GPIO dan Analog Pin di N76E003
Gambar di bawah mengilustrasikan pin GPIO yang tersedia pada unit mikrokontroler N76E003AT20. Namun, dari 20 pin, Untuk koneksi yang berhubungan dengan LCD, Port P0 (P0.0, P0.1, P0.2, P0.4, P0.5, P0.6, dan P0.7) digunakan. Pin Analog disorot dalam warna MERAH.
Seperti yang bisa kita lihat, Port P0 memiliki pin analog maksimum tetapi digunakan untuk komunikasi terkait LCD. Jadi, P3.0 dan P1.7 tersedia sebagai pin input Analog AIN1 dan AIN0. Karena proyek ini hanya membutuhkan satu pin analog, P1.7 yang merupakan saluran input Analog 0, digunakan untuk proyek ini.
Informasi tentang ADC Peripheral di N76E003
N76E003 menyediakan ADC SAR 12-bit. Ini adalah fitur yang sangat bagus dari N76E003 yang memiliki resolusi ADC yang sangat baik. ADC memiliki input 8 saluran dalam mode ujung tunggal. Antarmuka ADC cukup sederhana dan mudah.
Langkah pertama adalah memilih input saluran ADC. Ada 8-Channel input yang tersedia di mikrokontroler N76E003. Setelah memilih input ADC atau pin I / O, semua pin harus disetel sesuai arah dalam kode. Semua pin yang digunakan untuk input Analog adalah pin input dari mikrokontroler sehingga semua pin perlu diatur sebagai mode Input-only (impedansi tinggi). Ini dapat diatur dengan menggunakan register PxM1 dan PxM2. Kedua register ini mengatur mode I / O di mana x adalah singkatan dari nomor Port (Misalnya, Port P1.0 register akan menjadi P1M1 dan P1M2, untuk P3.0 akan menjadi P3M1 dan P3M2, dll.) Konfigurasi dapat dilihat pada gambar di bawah ini-
Konfigurasi ADC dilakukan dengan dua register ADCCON0 dan ADCCON1. Deskripsi Register ADCCON0 ditampilkan di bawah ini.
4 bit pertama dari register dari bit 0 ke bit 3 digunakan untuk mengatur pemilihan Saluran ADC. Karena kita menggunakan saluran AIN0, pilihannya adalah 0000 untuk empat bit ini.
Bit ke-6 dan ke-7 adalah yang penting. ADCS harus menetapkan 1 untuk memulai konversi ADC dan ADCF akan memberikan informasi tentang konversi ADC yang berhasil. Ini perlu disetel 0 oleh firmware untuk memulai konversi ADC. Register berikutnya adalah ADCCON1-
Register ADCCON1 terutama digunakan untuk konversi ADC yang dipicu oleh sumber eksternal. Namun, untuk operasi terkait polling normal, ADCEN bit pertama diperlukan untuk menyetel 1 untuk menyalakan sirkuit ADC.
Selanjutnya, input dari saluran ADC perlu dikontrol dalam register AINDIDS dimana input digital dapat diputus.
N adalah singkatan dari bit saluran (Misalnya, saluran AIN0 perlu dikontrol menggunakan bit pertama P17DIDS dari register AINDIDS). Input digital harus diaktifkan, jika tidak, akan terbaca sebagai 0. Ini semua adalah pengaturan dasar ADC. Sekarang, Menghapus ADCF dan mengatur ADCS konversi ADC dapat dimulai. Nilai yang dikonversi akan tersedia di register di bawah ini-
Dan
Kedua register 8-bit. Karena ADC menyediakan data 12-bit, ADCRH digunakan sebagai full (8-bit) dan ADCRL digunakan sebagai setengah (4-bit).
Pemrograman N76E003 untuk ADC
Pengkodean untuk modul tertentu setiap kali merupakan pekerjaan yang sibuk, sehingga perpustakaan LCD yang sederhana namun kuat disediakan yang akan sangat berguna untuk antarmuka LCD 16x2 karakter dengan N76E003. Pustaka LCD 16x2 tersedia di repositori Github kami, yang dapat diunduh dari tautan di bawah ini.
Unduh Perpustakaan LCD 16x2 untuk Nuvoton N76E003
Mohon miliki perpustakaan (dengan mengkloning atau mengunduh) dan cukup sertakan file lcd.c dan LCD.h di proyek Keil N76E003 Anda untuk integrasi yang mudah dari LCD 16x2 dalam aplikasi atau proyek yang diinginkan. Perpustakaan akan menyediakan fungsi terkait tampilan yang berguna berikut-
- Inisialisasi LCD.
- Kirim perintah ke LCD.
- Tulis ke LCD.
- Letakkan string di LCD (16 Karakter).
- Cetak karakter dengan mengirimkan nilai hex.
- Gulir pesan panjang dengan lebih dari 16 karakter.
- Cetak bilangan bulat langsung ke LCD.
Pengkodean untuk ADC sederhana. Dalam fungsi pengaturan Enable_ADC_AIN0; digunakan untuk menyiapkan ADC untuk input AIN0 . Ini didefinisikan dalam file.
#define Enable_ADC_AIN0 ADCCON0 & = 0xF0; P17_Input_Mode; AINDIDS = 0x00; AINDIDS- = SET_BIT0; ADCCON1- = SET_BIT0 // P17
Jadi, baris di atas menetapkan pin sebagai input dan mengkonfigurasi register ADCCON0, ADCCON1 serta register AINDIDS juga. Fungsi di bawah ini akan membaca ADC dari register ADCRH dan ADCRL tetapi dengan resolusi 12-bit.
unsigned int ADC_read (void) { register unsigned int adc_value = 0x0000; clr_ADCF; set_ADCS; sementara (ADCF == 0); adc_value = ADCRH; adc_value << = 4; adc_value - = ADCRL; return adc_value; }
Bit tersebut digeser ke kiri 4 kali dan kemudian ditambahkan ke variabel data. Dalam fungsi utama, ADC membaca Data dan langsung dicetak di layar. Namun tegangan juga diubah menggunakan rasio atau hubungan antar tegangan dibagi dengan nilai bit.
ADC 12-bit akan menyediakan 4095 bit pada input 5.0V. Jadi membagi 5.0V / 4095 = 0.0012210012210012V
Jadi, 1 digit perubahan bit akan sama dengan perubahan di 0.001V (Kira-kira). Ini dilakukan di fungsi utama yang ditunjukkan di bawah ini.
void main (void) { int adc_data; mendirikan(); lcd_com (0x01); sementara (1) { lcd_com (0x01); lcd_com (0x80); lcd_puts ("ADC Data:"); adc_data = ADC_read (); lcd_print_number (adc_data); voltase = adc_data * bit_to_voltage_ratio; sprintf (str_voltage, "Volt:% 0.2fV", voltase); lcd_com (0xC0); lcd_puts (str_voltage); Timer0_Delay1ms (500); } }
Data diubah dari nilai bit menjadi voltase dan menggunakan fungsi sprintf , output diubah menjadi string dan dikirim ke LCD.
Mem-flash kode dan hasilnya
Kode mengembalikan 0 peringatan dan 0 Kesalahan dan di-flash menggunakan metode flashing default oleh Keil, Anda dapat melihat pesan flashing di bawah ini. Jika Anda baru mengenal Keil atau Nuvoton, lihat memulai dengan mikrokontroler Nuvoton untuk memahami dasar-dasar dan cara mengunggah kode.
Proses rekondisi dimulai: Proyek: timer Membangun kembali target 'Target 1' merakit STARTUP.A51… mengkompilasi main.c… mengkompilasi lcd.c… mengkompilasi Delay.c… menghubungkan… Ukuran Program: data = 101.3 xdata = 0 code = 4162 membuat file hex dari ". \ Objects \ timer"… ". \ Objects \ timer" - 0 Error, 0 Warning (s). Waktu Pembuatan yang Berlalu: 00:00:02 Muat "G: \\ n76E003 \\ Display \\ Objects \\ timer" Penghapusan Flash Selesai. Flash Write Selesai: 4162 byte diprogram. Verifikasi Flash Selesai: 4162 byte diverifikasi. Pemuatan Flash selesai pada 11:56:04
Gambar di bawah ini menunjukkan perangkat keras yang terhubung ke catu daya menggunakan adaptor DC dan layar menunjukkan output tegangan yang diatur oleh potensiometer di sebelah kanan.
Jika kita memutar potensiometer maka tegangan yang diberikan ke pin ADC juga akan berubah dan kita dapat melihat nilai ADC dan tegangan analog yang ditampilkan pada LCD. Anda dapat melihat video di bawah ini untuk demonstrasi kerja lengkap dari tutorial ini.
Semoga Anda menikmati artikel ini dan mempelajari sesuatu yang bermanfaat, jika Anda memiliki pertanyaan, tinggalkan di bagian komentar di bawah, atau Anda dapat menggunakan forum kami untuk memposting pertanyaan teknis lainnya.