robotics-university.com | Analog to Digital Converter atau ADC adalah fitur dalam mikrokontroler yang memiliki fungsi untuk menggonversi (merubah) sinyal masukan analog (dari peranti masukan eksternal) menjadi sinyal masukan digital. Pada mikrokontroler, ADC dapat digunakan untuk berkomunikasi antara mikrokontroler dengan peranti-peranti eksternal (sensor) yang memiliki gelombang sinyal keluaran berupa gelombang sinyal analog (sinus). Gambar 1 merupakan gambar diagram blok fitur ADC pada mikrokontroler AVR ATMEGA32.
A. Register Pengatur ADC Mikrokontroler AVR ATMEGA32
Dalam pengaturan ADC melibatkan beberapa register. Register-register tersebut antara lain sebagai berikut:
C. Kode Digital ADC
ADC mengonversi tegangan input analog menjadi bilangan (kode) digital selebar 10-bit.
Rumus kode digital ADC:
1) Resolusi 10-bit.
ADC = (Vinput/Vref) x 1024
2) Resolusi 8-bit.
ADC = (Vinput/Vref) x 256
Contoh perhitungan kode digital ADC:
Misalkan terdapat input kanal ADC beresolusi 8-bit adalah 2,5 volt dan tegangan referensi yang digunakan Vref internal sebesar 2,56 volt, sehingga kode digital ADC-nya adalah:
= (2500 mV/2560 mV) x 256
= 250 - dalam desimal
= FA - dalam heksadesimal
= 11111010 - dalam biner
Catatan:
Akurasi ADC tidak sempurna (toleransi ±2LSB), sehingga kemungkinan kode digital ADC yang dihasilkan tidak tepat 0xFA, namun bisa di atasnya (0xFB/0xFC) atau di bawahnya (0xF8/0xF9).
D. Prosedur Pengaturan ADC
Prosedur 1: Pengaturan register ADMUX
Berfungsi untuk:
Register ADCH dan ADCL berfungsi untuk menyimpan data hasil konversi ADC dengan format yang bergantung pada nilai bit ADLAR (0 atau 1) pada register ADMUX (bit ke-5).
Prosedur 2: Pengaturan register ADCSRA
Berfungsi untuk:
Register SFIOR berfungsi untuk menentukan sumber auto trigger konversi ADC, yaitu dengan menentukan nilai dari bit ADTS0, ADTS1, dan ADTS2
Catatan untuk register SFIOR:
Efek pengaturan ADTS0, ADTS1, dan ADTS2 bergantung pada pengaturan bit ADATE pada register ADCSRA (bit ke-5).
Jika ADATE = 1, maka sumber auto trigger akan menjadi pemicu otomatis proses konversi ADC.
Jika ADATE = 0, maka pengaturan bit ADTS0 – ADTS2 tidak akan berdampak apa-apa pada sistem.
E. Mode Operasi ADC
1. Mode Operasi ADC - Single Conversion
2. Mode Operasi ADC - Single Conversion (Auto triggered)
3. Mode Operasi ADC - Free Running
F. Contoh Program Pengaturan ADC
1. Menggunakan software IDE WinAVR
Contoh:
Dengan menggunakan AVR trainer pada gambar 8, akan dibuat program yang bertujuan untuk mengatur nyala terang atau redup LED (dihubungkan pada PORTD) dengan menggunakan sebuah resistor variable (trimpot) yang dihubungkan pada PORTA.0 yang merupakan kanal ADC0 mikrokontroler AVR ATMEGA32. Program ini menggunakan interupsi ADC.
2. Menggunakan software IDE BASCOM-AVR
Contoh:
Dengan menggunakan AVR trainer pada gambar 8, akan dibuat program yang bertujuan untuk mengatur nyala terang atau redup LED (dihubungkan pada PORTD) dengan menggunakan resistor variable (trimpot) yang dihubungkan pada PORTA yang merupakan kanal-kanal ADC mikrokontroler AVR ATMEGA32.
Gambar 1. Diagram blok ADC mikrokontroler AVR ATMEGA32
A. Register Pengatur ADC Mikrokontroler AVR ATMEGA32
Dalam pengaturan ADC melibatkan beberapa register. Register-register tersebut antara lain sebagai berikut:
- ADC Multiplexer Selection Register (ADMUX)
- ADC Control & Status Register A (ADCSRA)
- ADC Data Register (ADCL dan ADCH)
- Special Function I/O Register (SFIOR)
- Resolusi ADC= 10-bit
- Akurasi mencapai ± 2LSB
- Memiliki 8 kanal ADC
- Rentang tegangan input = 0 volt – Vcc
- Tegangan referensi internal = 2,56 volt
- Terdapat 2 mode kerja, yaitu:
a) Konversi tunggal (single conversion)
b) Konversi terus-menerus (free running) - Konversi ADC dimulai ketika mendapat auto trigger dari sumber interupsi.
- Lengkapnya proses konversi ADC dapat menjadi pemicu interupsi.
- Nilai minimum ADC = 0 volt (GND)
- Nilai maksimum ADC = tegangan pada pin AREF (minus 1 LSB).
- Sinyal tegangan input ADC tidak boleh melebihi tegangan referensinya.
- Hasil konversi ADC disimpan pada pasangan register ADCH dan ADCL.
C. Kode Digital ADC
ADC mengonversi tegangan input analog menjadi bilangan (kode) digital selebar 10-bit.
Rumus kode digital ADC:
1) Resolusi 10-bit.
ADC = (Vinput/Vref) x 1024
2) Resolusi 8-bit.
ADC = (Vinput/Vref) x 256
Contoh perhitungan kode digital ADC:
Misalkan terdapat input kanal ADC beresolusi 8-bit adalah 2,5 volt dan tegangan referensi yang digunakan Vref internal sebesar 2,56 volt, sehingga kode digital ADC-nya adalah:
= (2500 mV/2560 mV) x 256
= 250 - dalam desimal
= FA - dalam heksadesimal
= 11111010 - dalam biner
Catatan:
Akurasi ADC tidak sempurna (toleransi ±2LSB), sehingga kemungkinan kode digital ADC yang dihasilkan tidak tepat 0xFA, namun bisa di atasnya (0xFB/0xFC) atau di bawahnya (0xF8/0xF9).
D. Prosedur Pengaturan ADC
Prosedur 1: Pengaturan register ADMUX
Berfungsi untuk:
- Memilih kanal ADC yang akan digunakan.
bit MUX0, MUX1, MUX2, MUX3, dan MUX4 (lihat tabel 1). - Menentukan format data hasil konversi ADC
bit ADLAR. Lihat formatnya pada register ADCH & ADCL. - Memilih tegangan referensi ADC
bit REFS0 dan REFS1 (lihat tabel 2).
Register ADCH dan ADCL berfungsi untuk menyimpan data hasil konversi ADC dengan format yang bergantung pada nilai bit ADLAR (0 atau 1) pada register ADMUX (bit ke-5).
Prosedur 2: Pengaturan register ADCSRA
Berfungsi untuk:
- Menentukan faktor pembagi (prescaler) frekuensi CPU yang digunakan sebagai clock ADC
bit ADPS0, ADPS1, dan ADPS2 (Lihat tabel 3) - Memilih mode operasi ADC
bit ADATE = 1 - Mode single conversion/auto trigger
bit ADATE = 0 - Mode free running conversion
Mengaktifkan auto trigger ADC (bit ADATE = 1), sehingga proses pengonversian sinyal analog dimulai. Sumber trigger diatur menggunakan bit ADTS0, ADTS1, dan ADTS2 pada register SFIOR. Sumber trigger tergantung pada pengaturan bit ADATE pada register ADCSRA. - Mengaktifkan ADC (bit ADEN = 1)
- Memulai proses konversi (start conversion) ADC (bit ADSC = 1)
Jika mode single conversion: set ADSC tiap kali akan mengonversi.
Jika mode free running: set ADSC untuk memulai awal konversi.
- Aktifkan interupsi ADC (bit ADIE = 1)
- Aktifkan interupsi global mikrokontroler (bit-I pada register SREG = 1) atau dengan perintah - sei ();
- Buat fungsi layanan interupsi:
ISR(ADC_vect)
{
……program yang akan dikerjakan…
}
Register SFIOR berfungsi untuk menentukan sumber auto trigger konversi ADC, yaitu dengan menentukan nilai dari bit ADTS0, ADTS1, dan ADTS2
Catatan untuk register SFIOR:
Efek pengaturan ADTS0, ADTS1, dan ADTS2 bergantung pada pengaturan bit ADATE pada register ADCSRA (bit ke-5).
Jika ADATE = 1, maka sumber auto trigger akan menjadi pemicu otomatis proses konversi ADC.
Jika ADATE = 0, maka pengaturan bit ADTS0 – ADTS2 tidak akan berdampak apa-apa pada sistem.
E. Mode Operasi ADC
1. Mode Operasi ADC - Single Conversion
- Konversi dilakukan untuk sekali pembacaan sampel sinyal input.
- Jika ingin membaca lagi harus melakukan sampel sinyal input lagi, sehingga kita dapat mengonversi sinyal tegangan input ketika dibutuhkan saja.
- Konversi tunggal akan dimulai ketika bit-ADSC pada register ADCSRA di-set. Bit tersebut akan tetap set sampai satu kali konversi selesai (complete). Setelah konversi selesai, maka secara otomatis bit-ADSC akan clear.
2. Mode Operasi ADC - Single Conversion (Auto triggered)
- Single conversion dengan auto trigger adalah alternatif cara aktivasi konversi ADC.
- Pada mode auto trigger, proses konversi ADC dapat dipicu secara otomatis oleh beberapa variasi sumber pemicunya (trigger).
- Mode ini akan aktif dan proses konversi ADC dimulai ketika:
1) Bit ADATE pada register ADCSRA di-set.
2) Sumber pemicu auto trigger dipilih.
(mengatur bit ADTS0, ADTS1, dan ADTS2 pada register SFIOR)
3) Ada transisi (edge) sinyal positif (0 ke 1) dari sumber trigger.
4) Faktor pembagi clock (prescaler) pada register ADCSRA di atur (ADSP0/1/2).
5) Bit ADSC pada register ADCSRA di-set. - Proses konversi baru tidak akan terjadi jika sinyal trigger masih set ketika proses konversi ADC selesai (complete).
- Jika terjadi transisi (edge) sinyal positif lain saat proses konversi berlangsung, maka edge sinyal tersebut akan diabaikan.
3. Mode Operasi ADC - Free Running
- Penggunaan flag interupsi ADC sebagai sumber trigger membuat proses konversi ADC baru dimulai segera setelah proses konversi yang sedang berjalan selesai (complete).
- Pada kondisi tersebut, ADC bekerja pada mode free running conversion.
- Pada mode free running, konversi dilakukan secara terus-menerus (ADC membaca sample tegangan input kemudian dikonversi dan hasilnya disimpan ke dalam register ADCH-ADCL secara terus-menerus).
- Proses konversi ADC harus dimulai dengan men-set bit ADSC pada register ADCSRA.
- Pada mode free running, ADC bekerja secara independen (tidak bergantung) dari flag interupsi ADC. Apakah ADIF set atau clear, maka tidak akan mempengaruhi operasi ADC.
F. Contoh Program Pengaturan ADC
Gambar 8. Interface antara AVR ATMEGA32 - Vr (8x) - LED (8x)
1. Menggunakan software IDE WinAVR
Contoh:
Dengan menggunakan AVR trainer pada gambar 8, akan dibuat program yang bertujuan untuk mengatur nyala terang atau redup LED (dihubungkan pada PORTD) dengan menggunakan sebuah resistor variable (trimpot) yang dihubungkan pada PORTA.0 yang merupakan kanal ADC0 mikrokontroler AVR ATMEGA32. Program ini menggunakan interupsi ADC.
#include <avr/io.h>#include <avr/interrupt.h>// Rutin layanan intrupsi - fungsi interupsi ADC// Kerjakan rutin ini ketika terjadi interupsi ADCISR(ADC_vect){PORTC = ADCH; // Output ADCH pada PortCADCSRA |= 1<<ADSC; // Mulai mengonversi}int main(void){DDRC = 0xFF; // PortC sebagai outputDDRA = 0x00; // PortA sebagai input// PA0 is ADC0 inputADCSRA = 0x8F; // Aktifkan ADC & fitur interupsinya// pre-scale clock = clk/128ADMUX = 0xE0; // Vref internal = 2.56V | format data// rata kiri | ADC0 sebagai kanal ADCsei(); // Aktifkan global interupsiADCSRA |= 1<<ADSC; // Mulai mengonversiwhile(1); // Tunggu konversi ADC & loop}
2. Menggunakan software IDE BASCOM-AVR
Contoh:
Dengan menggunakan AVR trainer pada gambar 8, akan dibuat program yang bertujuan untuk mengatur nyala terang atau redup LED (dihubungkan pada PORTD) dengan menggunakan resistor variable (trimpot) yang dihubungkan pada PORTA yang merupakan kanal-kanal ADC mikrokontroler AVR ATMEGA32.
$regfile = "m32def.dat"$crystal = 12000000Config Porta = InputConfig Portd = OutputConfig Adc = Single , Prescaler = Auto , Reference = AvccStart AdcDim Data_adc As WordDoData_adc = Getadc(0)Portd.0 = Data_adcData_adc = Getadc(1)Portd.1 = Data_adcData_adc = Getadc(2)Portd.2 = Data_adcData_adc = Getadc(3)Portd.3 = Data_adcData_adc = Getadc(4)Portd.4 = Data_adcData_adc = Getadc(5)Portd.5 = Data_adcData_adc = Getadc(6)Portd.6 = Data_adcData_adc = Getadc(7)Portd.7 = Data_adcLoop
terimakasih atas info yang sangat menarik ini dan untuk referensi silahkan kunjungi http://ps-elektronika.gunadarma.ac.id/
ReplyDelete