- Apa itu ADC (Konversi Analog ke Digital)
- ADC dalam Mikrokontroler AVR Atmega16
- Komponen Diperlukan
- Diagram Sirkuit
- Menyiapkan Register kontrol ADC di Atmega16
- Pemrograman Atmega16 untuk ADC
Salah satu fitur umum yang digunakan di hampir setiap aplikasi tertanam adalah modul ADC (Analog to Digital Converter). Ini Analog ke Converter digital dapat membaca tegangan dari sensor analog seperti sensor suhu, sensor Tilt, sensor sekarang, Flex sensor dll Dalam tutorial ini kita akan belajar Apa ADC dan Cara menggunakan ADC di Atmega16. Tutorial ini termasuk menghubungkan potensiometer kecil ke pin ADC Atmega16 dan 8 LED digunakan untuk menampilkan perubahan tegangan nilai output ADC sehubungan dengan perubahan nilai input ADC.
Sebelumnya kami menjelaskan ADC di mikrokontroler lain:
- Cara menggunakan ADC di ARM7 LPC2148 - Mengukur Tegangan Analog
- Cara menggunakan ADC di STM32F103C8 - Mengukur Tegangan Analog
- Cara menggunakan ADC di MSP430G2 - Mengukur Tegangan Analog
- Bagaimana cara menggunakan ADC di Arduino Uno?
- Menggunakan Modul ADC Mikrokontroler PIC dengan MPLAB dan XC8
Apa itu ADC (Konversi Analog ke Digital)
ADC adalah singkatan dari Analog to Digital Converter. Dalam elektronika, ADC adalah perangkat yang mengubah sinyal analog seperti arus dan tegangan menjadi kode digital (bentuk biner). Di dunia nyata sebagian besar sinyal adalah analog dan setiap mikrokontroler atau mikroprosesor memahami bahasa biner atau digital (0 atau 1). Jadi, untuk membuat mikrokontroler memahami sinyal analog, kita harus mengubah sinyal analog ini menjadi bentuk digital. ADC melakukan ini untuk kita. Ada banyak jenis ADC yang tersedia untuk berbagai aplikasi. Beberapa ADC yang populer adalah flash, aproksimasi berurutan, dan sigma-delta.
Jenis ADC yang paling murah adalah Pendekatan-Berturut-turut dan dalam tutorial ini ADC-perkiraan-berturut-turut akan digunakan. Dalam jenis ADC-Berturutan-Perkiraan, serangkaian kode digital, masing-masing sesuai dengan tingkat analog tetap, dihasilkan secara berurutan. Penghitung internal digunakan untuk membandingkan dengan sinyal analog yang sedang dikonversi. Pembangkitan dihentikan ketika level analog menjadi lebih besar dari sinyal analog. Kode digital yang sesuai dengan level analog adalah representasi digital yang diinginkan dari sinyal analog. Ini menyelesaikan sedikit penjelasan kita tentang perkiraan-berurutan.
Jika Anda ingin mendalami ADC lebih dalam maka Anda bisa merujuk tutorial kami sebelumnya tentang ADC. ADC tersedia dalam bentuk IC dan juga mikrokontroler dilengkapi dengan ADC bawaan saat ini. Dalam tutorial ini kita akan menggunakan ADC bawaan dari Atmega16. Mari kita bahas tentang ADC bawaan dari Atmega16.
ADC dalam Mikrokontroler AVR Atmega16
Atmega16 memiliki ADC 10 bit dan 8 saluran bawaan. 10 bit sesuai dengan itu jika tegangan input 0-5V maka akan dibagi dalam nilai 10 bit yaitu 1024 level nilai Analog diskrit (2 10 = 1024). Sekarang 8-saluran sesuai dengan 8 ADC Pin khusus di Atmega16 di mana setiap pin dapat membaca tegangan Analog. Porta Lengkap (GPIO33-GPIO40) didedikasikan untuk operasi ADC. Secara default, pin PORTA adalah pin IO umum, artinya pin port tersebut multipleks. Untuk menggunakan pin ini sebagai pin ADC, kita harus mengkonfigurasi register tertentu yang didedikasikan untuk kontrol ADC. Inilah sebabnya mengapa register dikenal sebagai register kontrol ADC. Mari kita bahas cara mengatur register ini untuk mulai memfungsikan ADC bawaan.
Pin ADC di Atmega16
Komponen Diperlukan
- IC Mikrokontroler Atmega16
- Osilator Kristal 16Mhz
- Dua Kapasitor 100nF
- Dua Kapasitor 22pF
- Tekan tombol
- Kabel Jumper
- Papan tempat memotong roti
- USBASP v2.0
- Led (Warna Apa Pun)
Diagram Sirkuit
Menyiapkan Register kontrol ADC di Atmega16
1. Daftar ADMUX (Daftar Pilihan Multiplekser ADC) :
Register ADMUX adalah untuk pemilihan saluran ADC dan memilih tegangan referensi. Gambar di bawah ini menunjukkan gambaran umum register ADMUX. Penjelasannya dijelaskan di bawah.
- Bit 0-4: bit pemilihan saluran.
MUX4 |
MUX3 |
MUX2 |
MUX1 |
MUX0 |
Saluran ADC Dipilih |
0 |
0 |
0 |
0 |
0 |
ADC0 |
0 |
0 |
0 |
0 |
1 |
ADC1 |
0 |
0 |
0 |
1 |
0 |
ADC2 |
0 |
0 |
0 |
1 |
1 |
ADC3 |
0 |
0 |
1 |
0 |
0 |
ADC4 |
0 |
0 |
1 |
0 |
1 |
ADC5 |
0 |
0 |
1 |
1 |
0 |
ADC6 |
0 |
0 |
1 |
1 |
1 |
ADC7 |
- Bit-5: Digunakan untuk menyesuaikan hasil ke kanan atau kiri.
ADLAR |
Deskripsi |
0 |
Sesuaikan hasilnya |
1 |
Kiri menyesuaikan hasilnya |
- Bit 6-7: Digunakan untuk memilih tegangan referensi untuk ADC.
REFS1 |
REFS0 |
Pemilihan Referensi Tegangan |
0 |
0 |
AREF, Vref Internal dimatikan |
0 |
1 |
AVcc dengan kapasitor eksternal pada pin AREF |
1 |
0 |
Pendiam |
1 |
1 |
Referensi Tegangan internal 2,56 dengan kapasitor eksternal pada Pin AREF |
Sekarang mulailah mengkonfigurasi bit register ini dalam program sehingga kita mendapatkan pembacaan dan keluaran ADC Internal ke Semua Pin PORTC.
Pemrograman Atmega16 untuk ADC
Program lengkap diberikan di bawah ini. Bakar program di Atmega16 menggunakan JTAG dan Atmel studio dan putar potensiometer untuk memvariasikan nilai ADC. Di sini, kode dijelaskan baris demi baris.
Mulailah dengan membuat satu fungsi untuk membaca nilai konversi ADC. Kemudian berikan nilai saluran sebagai 'chnl' dalam fungsi ADC_read .
unsigned int ADC_read (unsigned char chnl)
Nilai saluran harus antara 0 hingga 7 karena kami hanya memiliki 8 saluran ADC.
chnl = chnl & 0b00000111;
Dengan menulis '40' yaitu '01000000' ke register ADMUX kami memilih PORTA0 sebagai ADC0 dimana input Analog akan dihubungkan untuk konversi digital.
ADMUX = 0x40;
Sekarang langkah ini melibatkan proses konversi ADC, di mana dengan menulis SATU ke ADSC Bit di register ADCSRA kita memulai konversi. Setelah itu, tunggu bit ADIF mengembalikan nilai saat konversi selesai. Kami menghentikan konversi dengan menulis '1' di ADIF Bit di register ADCSRA. Ketika konversi selesai maka kembalikan nilai ADC.
ADCSRA - = (1 <
Di sini tegangan referensi ADC internal dipilih dengan mengatur bit REFS0. Setelah itu aktifkan ADC dan pilih prescaler sebagai 128.
ADMUX = (1 <
Sekarang simpan nilai ADC dan kirimkan ke PORTC. Di PORTC, 8 LED terhubung yang akan menampilkan output digital dalam format 8 bit. Contoh yang telah kami tunjukkan memvariasikan tegangan antara 0V hingga 5V menggunakan satu pot 1K.
i = ADC_read (0); PORTC = i;
Multimeter Digital digunakan untuk menampilkan tegangan input analog di Pin ADC dan 8 LED digunakan untuk menunjukkan nilai 8 Bit output ADC yang sesuai. Putar saja Potensiometer dan lihat hasil yang sesuai pada multimeter serta LED yang menyala.
Kode lengkap dan video kerja diberikan di bawah ini.