- Komponen Diperlukan dan Persediaan Perkakasan
- Diagram Litar Nuvoton N76E003 untuk Membaca Voltan Analog
- Maklumat mengenai GPIO dan Analog Pins di N76E003
- Maklumat mengenai ADC Peripheral di N76E003
- Pengaturcaraan N76E003 untuk ADC
- Berkelip kod dan output
Analog to Digital converter (ADC) adalah ciri perkakasan yang paling banyak digunakan pada mikrokontroler. Ia mengambil voltan analog dan menukarnya menjadi nilai digital. Oleh kerana mikrokontroler adalah peranti digital dan berfungsi dengan digit binari 1 dan 0, ia tidak dapat memproses data analog secara langsung. Oleh itu, ADC digunakan untuk mengambil voltan analog dan mengubahnya menjadi nilai digital setara yang dapat difahami oleh mikrokontroler. Sekiranya anda mahukan lebih lanjut mengenai Analog ke Digital Converter (ADC), anda boleh menyemak artikel yang dipautkan.
Terdapat pelbagai sensor yang terdapat dalam elektronik yang memberikan output Analog, seperti sensor gas MQ, sensor Accelerometer ADXL335, dll. Oleh itu, dengan menggunakan penukar Analog ke Digital, sensor tersebut dapat dihubungkan dengan unit mikrokontroler. Anda juga boleh melihat tutorial lain yang disenaraikan di bawah, untuk menggunakan ADC dengan 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
Dalam tutorial ini, kita akan menggunakan periferal ADC yang terbina dalam unit mikrokontroler N76E003 jadi mari kita menilai jenis perkakasan yang kita perlukan untuk aplikasi ini.
Komponen Diperlukan dan Persediaan Perkakasan
Untuk menggunakan ADC pada N76E003, kita akan menggunakan pembahagi voltan menggunakan potensiometer dan membaca voltan mulai dari 0V-5.0V. Voltan akan dipaparkan dalam LCD Karakter 16x2, jika anda baru menggunakan LCD dan N76E003, anda boleh menyemak cara menghubungkan LCD dengan Nuvoton N76E003. Oleh itu, komponen utama yang diperlukan untuk projek ini ialah LCD Karakter 16x2. Untuk projek ini, kami akan menggunakan komponen di bawah-
- LCD watak 16x2
- Perintang 1k
- Potensiometer 50k atau pot pot
- Beberapa wayar Berg
- Beberapa wayar penyambung
- Papan roti
Tidak ketinggalan, selain komponen di atas, kita memerlukan papan pengembangan berasaskan mikrokontroler N76E003 dan juga Pengaturcara Nu-Link. Unit bekalan kuasa 5V tambahan juga diperlukan kerana LCD mengambil arus yang mencukupi yang tidak dapat disediakan oleh pengaturcara.
Diagram Litar Nuvoton N76E003 untuk Membaca Voltan Analog
Seperti yang dapat kita lihat dalam skema, port P0 digunakan untuk sambungan yang berkaitan dengan LCD. Di kiri paling kiri, sambungan antara muka pengaturcaraan ditunjukkan. Potensiometer bertindak sebagai pembahagi voltan dan yang dirasakan oleh input analog 0 (AN0).
Maklumat mengenai GPIO dan Analog Pins di N76E003
Gambar di bawah menunjukkan pin GPIO yang terdapat pada unit mikrokontroler N76E003AT20. Walau bagaimanapun, daripada 20 pin, Untuk sambungan yang berkaitan dengan LCD, Port P0 (P0.0, P0.1, P0.2, P0.4, P0.5, P0.6, dan P0.7) digunakan. Pin Analog diserlahkan dalam warna MERAH.
Seperti yang kita lihat, Port P0 mempunyai pin analog maksimum tetapi ia digunakan untuk komunikasi berkaitan LCD. Oleh itu, P3.0 dan P1.7 boleh didapati sebagai pin input Analog AIN1 dan AIN0. Oleh kerana projek ini hanya memerlukan satu pin analog, P1.7 yang merupakan saluran input Analog 0, digunakan untuk projek ini.
Maklumat mengenai ADC Peripheral di N76E003
N76E003 menyediakan ADC SAR 12-bit. Ini adalah ciri N76E003 yang sangat baik bahawa ia mempunyai resolusi ADC yang sangat baik. ADC mempunyai input 8-Channel dalam mod single-end. Menghadapi ADC cukup mudah dan mudah.
Langkah pertama adalah memilih input saluran ADC. Terdapat input 8-Saluran yang tersedia di mikrokontroler N76E003. Setelah memilih input ADC atau pin I / O, semua pin dikehendaki ditetapkan untuk arah dalam kod. Semua pin yang digunakan untuk input Analog adalah pin input mikrokontroler sehingga semua pin perlu ditetapkan sebagai mod Input-only (high-impedance). Ini boleh ditetapkan menggunakan daftar PxM1 dan PxM2. Kedua-dua register ini menetapkan mod I / O di mana x bermaksud nombor Port (Sebagai contoh, Port P1.0 register akan menjadi P1M1 dan P1M2, untuk P3.0 ia akan menjadi P3M1 dan P3M2, dll.) Konfigurasi boleh lihat pada gambar di bawah-
Konfigurasi ADC dilakukan oleh dua register ADCCON0 dan ADCCON1. Penerangan Daftar ADCCON0 ditunjukkan di bawah.
4 bit pertama register dari bit 0 hingga bit 3 digunakan untuk menetapkan pemilihan Saluran ADC. Oleh kerana kita menggunakan saluran AIN0, pilihannya adalah 0000 untuk keempat bit ini.
Bit ke-6 dan ke-7 adalah yang penting. ADCS dikehendaki menetapkan 1 untuk memulakan penukaran ADC dan ADCF akan memberikan maklumat mengenai penukaran ADC yang berjaya. Ia perlu ditetapkan 0 oleh firmware untuk memulakan penukaran ADC. Daftar seterusnya adalah ADCCON1-
Daftar ADCCON1 digunakan terutamanya untuk penukaran ADC yang dicetuskan oleh sumber luaran. Walau bagaimanapun, untuk operasi berkaitan pengundian biasa, ADCEN bit pertama diperlukan untuk menetapkan 1 untuk menghidupkan litar ADC.
Seterusnya, input saluran ADC perlu dikendalikan dalam daftar AINDIDS di mana input digital dapat diputuskan.
N bermaksud bit saluran (Contohnya, saluran AIN0 perlu dikawal menggunakan bit P17DIDS bit pertama dari daftar AINDIDS). Input digital perlu diaktifkan, jika tidak, ia akan dibaca sebagai 0. Ini semua adalah pengaturan asas ADC. Sekarang, membersihkan ADCF dan menetapkan ADCS penukaran ADC boleh dimulakan. Nilai yang ditukar akan tersedia di daftar berikut
Dan
Kedua-dua register adalah 8-bit. Oleh kerana ADC menyediakan data 12-bit, ADCRH digunakan sebagai penuh (8-bit) dan ADCRL digunakan sebagai separuh (4-bit).
Pengaturcaraan N76E003 untuk ADC
Pengekodan untuk modul tertentu setiap masa adalah pekerjaan yang sibuk, oleh itu perpustakaan LCD yang ringkas namun kuat disediakan yang akan sangat berguna untuk antara muka LCD 16x2 watak dengan N76E003. Perpustakaan LCD 16x2 boleh didapati di repositori Github kami, yang boleh dimuat turun dari pautan di bawah.
Muat turun Perpustakaan LCD 16x2 untuk Nuvoton N76E003
Sila mempunyai perpustakaan (oleh pengklonan atau memuat turun) dan hanya termasuk lcd.c dan LCD.h fail dalam anda projek Keil N76E003 untuk integrasi yang mudah dari LCD 16x2 dalam permohonan atau projek yang dikehendaki. Perpustakaan akan menyediakan fungsi berkaitan paparan berguna berikut-
- Memulakan LCD.
- Hantar arahan ke LCD.
- Tulis ke LCD.
- Masukkan tali di LCD (16 Karakter).
- Cetak watak dengan menghantar nilai heks.
- Tatal mesej panjang dengan lebih daripada 16 aksara.
- Cetak nombor bulat terus ke LCD.
Pengekodan untuk ADC mudah. Dalam fungsi persediaan Enable_ADC_AIN0; digunakan untuk menyiapkan ADC untuk input AIN0 . Ini ditentukan dalam fail.
#define Enable_ADC_AIN0 ADCCON0 & = 0xF0; P17_Input_Mode; AINDIDS = 0x00; AINDIDS- = SET_BIT0; ADCCON1- = SET_BIT0 // P17
Oleh itu, baris di atas menetapkan pin sebagai input dan mengkonfigurasi daftar ADCCON0, ADCCON1 dan juga daftar AINDIDS . Fungsi di bawah ini akan membaca ADC dari daftar ADCRH dan ADCRL tetapi dengan resolusi 12-bit.
int ADC_read yang tidak ditandatangani (tidak sah) { register int tidak bertanda adc_value = 0x0000; clr_ADCF; set_ADCS; sementara (ADCF == 0); adc_value = ADCRH; adc_value << = 4; adc_value - = ADCRL; pulangkan adc_value; }
Bit ditukar ke kiri 4 kali dan kemudian ditambahkan ke pemboleh ubah data. Dalam fungsi utama, ADC membaca Data dan dicetak terus pada paparan. Walau bagaimanapun, voltan juga ditukar menggunakan nisbah atau hubungan antara voltan dibahagi dengan nilai bit.
ADC 12-bit akan memberikan 4095 bit pada input 5.0V. Oleh itu membahagikan 5.0V / 4095 = 0.0012210012210012V
Jadi, 1 digit perubahan bit akan sama dengan perubahan 0.001V (Kira-kira). Ini dilakukan dalam fungsi utama seperti di bawah.
kekosongan utama (kekosongan) { int adc_data; persediaan (); lcd_com (0x01); sementara (1) { lcd_com (0x01); lcd_com (0x80); lcd_puts ("Data ADC:"); adc_data = ADC_read (); lcd_print_number (adc_data); voltan = adc_data * bit_to_voltage_ratio; sprintf (str_voltage, "Volt:% 0.2fV", voltan); lcd_com (0xC0); lcd_puts (str_voltage); Pemasa0_Delay1ms (500); } }
Data ditukarkan dari nilai bit ke voltan dan menggunakan fungsi sprintf , output diubah menjadi rentetan dan dikirim ke LCD.
Berkelip kod dan output
Kod tersebut mengembalikan 0 amaran dan 0 Kesalahan dan dikedip menggunakan kaedah flashing lalai oleh Keil, anda dapat melihat pesan berkelip di bawah. Sekiranya anda baru menggunakan Keil atau Nuvoton, periksa permulaan mikrokontroler Nuvoton untuk memahami asas dan cara memuat naik kodnya.
Membina semula bermula: Projek: Pemasa Membina semula sasaran 'Target 1' memasang STARTUP.A51… menyusun main.c… menyusun lcd.c… menyusun Delay.c… menghubungkan… Program Saiz: data = 101.3 xdata = 0 code = 4162 membuat fail hex dari ". \ Objects \ timer"… ". \ Objects \ timer" - 0 Ralat, 0 Amaran. Masa Binaan Berlalu: 00:00:02 Muat "G: \\ n76E003 \\ Display \\ Objects \\ timer" Flash Padam Selesai. Flash Write Done: 4162 bait diprogramkan. Flash Verify Selesai: 4162 bait disahkan. Beban Kilat selesai pada 11:56:04
Gambar di bawah menunjukkan perkakasan yang disambungkan dalam sumber kuasa menggunakan penyesuai DC dan paparan menunjukkan output voltan yang ditetapkan oleh potensiometer di sebelah kanan.
Sekiranya kita menghidupkan potensiometer, voltan yang diberikan pada pin ADC juga akan berubah dan kita dapat melihat nilai ADC dan voltan Analog yang dipaparkan pada LCD. Anda boleh melihat video di bawah untuk demonstrasi kerja lengkap tutorial ini.
Harap anda menikmati artikel ini dan mempelajari sesuatu yang berguna, jika anda mempunyai pertanyaan, tinggalkan di bahagian komen di bawah, atau anda boleh menggunakan forum kami untuk menghantar soalan teknikal lain.