Analog To Digital Converter Mikrokontroler AVR
Pada bagian ini kita akan belajar mengakses salah satu fitur dari mikrokontroler AVR yaitu ADC (Analog to Digital Converter). ADC merupakan salah satu fitur yang dapat digunakan untuk menerima masukan tegangan analog. Pada AVR mikrokontroler, besarnya resolusi ADC adalah 10 bit, namun kita juga bisa menggunakan resolusi 8 bit. Resolusi 10 bit artinya kita dapat membaca input tegangan analog dari 0 – Vref dengan nilai desimal dari 0 – 1023. Vref sendiri nilainya sebesar 0 – 5 volt, dan masukan Vref dapat kita pilih dari external (pin aref), 5V, atau internal.
Pada tahap ini kita akan mencoba menampilkan data hasil pembacaan ADC 8 bit pada 8 buah led yang berada pada PORTB. LED tersebut nantinya akan menampilkan nilai biner dari pembacaan ADC. Untuk mencoba program, saya menggunakan PROTEUS sebagai software simulasi. Berikut Rangkaiannya.

Pastikan pin AVCC diberi tegangan 5 volt pada saat ingin menggunakan ADC. Pin ini merupakan masukan tegangan supply untuk ADC. Selanjutnya pengaturan pada mikrokontroler ATMega8535 dapat dilihat pada gambar di bawah ini. Frekuensi clock yang digunakan adalah 16MHz (external crystal)

Selanjutnya kita akan melakukan pemograman. Buat project baru pada CodeVisionAVR, selanjutnya gunakan code wizard seperti biasa. Adapun beberapa pengaturan yang dilakukan adalah sebagai berikut.
1. Pemilihan Chip & Frekuensi Clock
Sesuaikan dengan tipe mikrokontroler dan frekuensi clock yang digunakan. Karena kita menggunakan ATMega8535 dan clock sebesar 16MHz, maka pengaturan pada bagian chip adalah seperti di bawah ini.

2. Konfigurasi ADC
Beri centang tab ADC Enabled untuk dapat mengaktifkan ADC. Karena kita menggunakan resolusi sebesar 8 bit, maka pada bagian Use 8 bits harus diaktifkan. Untuk pemilihan tegangan referensi (Vref), pilih AVCC pin (5V).

3. Konfigurasi PORT output (LED)
Karena 8 buah LED kita hubungkan pada PORTB, maka kita harus mengkonfigurasi PORTB agar dapat berfungsi sebagai output (keluaran). Konfigurasinya sebagai berikut.

Pengaturan konfigurasi register telah selesai, selanjutnya kita dapat membuat program utama. Program ini akan membaca input analog pada pin ADCO, selanjutnya nilai digitalnya akan ditampilkan pada LED yang berada pada PORTB secara biner. Sintak program dapat dilihat di bawah ini.
Program Analog To Digital Converter Pada Mikrokontroler AVR
#define ADC_VREF_TYPE 0x60
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
// Declare your global variables here
void main(void)
{
PORTB=0x00;
DDRB=0xFF;
// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: ADC Stopped
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
SFIOR&=0xEF;
while (1)
{
PORTB = read_adc(0);
}
}
Sekian tutorial tentang Analog To Digital Converter pada mikrokontroler AVR, semoga tulisan ini dapat menambah pengetahuan Anda di bidang mikrokontroler
maturnuwun tutorialnya
Monggo dipraktekkan mas,, semoga bermanfaat 🙂
mas… bisa ajarin saya pembacaan 3 sensor lm35 dan dikirim melalui wirelless…
agungwicaks@gmail.com
bisa mas,, modul wireless nya pakai apa ? kalau saya biasanya pakai modul wifi RN-VX Wifly atau modul gprs modem Zonglab ,, kalau ada waktu luang nanti saya posting
mas tau caranya baca adc kl input bit adc nya lbih dari 8 bit ga? kan port adc yg disediain cm 8 port mas(PA.0-PA.7).
bisa menggunakan IC analog multiplexer mas,, kalau tidak salah tipe 4001
Mas mau nanya dong
Gimana bahasa C buat komunikasi serial dari atmega8 ke max232
trus datanya di olah menggunakan J2ME pada hp dengan interface kabel data usb
Itu bisa g mas?
Makasih
hmm,, kalau J2ME saya belum pernah coba,, kemungkinan sih bisa dengan menggunakan library RxTx nya java. Mungkin alternatif lain untuk komunikasi ke mikrokontroler bisa menggunakan TCP/UDP
Kalau untuk komunikasi serialnya itu sendiri di atmega8 bahasa c nya gmna ya mas?
mungkin untuk komunikasi serialnya bisa baca tulisan saya disini mas http://blognyaeko.wordpress.com/2011/09/01/simulasi-komunikasi-serial-pc-mikrokontroler-dengan-proteus/
mas kenapa program di proteus temperaturnya tidak berubah (pada lcd) padahal input pada adc sudah dirubah2..
pin AVCC harus dikasi power 5volt juga !!
sipp!!!!!
kalau arti dari PORTB = 0b 1111000
trus sama delay_(1000)
itu apa?
PORTB = 0b11110000, berarti menset nilai PB0 – PB3 ke low PB4-PB7 ke high,, delay_ms(1000); berarti tunda waktu 1 detik
knp clock pada pemilihan ADC nya harus tinggi tdk pakai 750 saja?
terima kasih
ya sebetulnyaa terserah mau pakai sampling yg cepet atau lambat,, semua tergantung programmernya
kalau saya pakai cristalnya 16 apakah sampling ADCnya jauh lbh cpt dr cristal 12MHz ?
mohon pencerahannya.
mas nanya misalnya teganganny 12volt berrati itu sangat mempengaruhi
microcontroller cuma bisa baca adc dengan max tegangan 5 volt
mksh mas ya mas….
sangat membantu,,,,,
Mas, saya kn mw nampilin nilai keluaran tegangan sensor cahaya ke LCD…
tpi kok gx stabil yh…
Padahal semua catu daya udh d cek, mantap keluarannya…
Mohon pencerahanny mas…
Makasih…
coba di input adc nya dikasih capacitor sekitar 10nF untuk mereduksi noise nya
Mas, salam kenal saya Regie,mau tanya kalo menggunakan 2 LM35 dan hasil pengukuranya ditampilkan pada 1 lcd,artinya kita mengaktifkan 2 adc, bisa kasih contoh listing programnya dengan bahasa C mas ? terimakasih.
Iyaa,, silahkan dicoba sendiri dulu mas 🙂
mas, mau tanya.
1. kita kan make ADC0, kalo mau pake selain ADC0 gimana?
2. kita mau nambahin sensor lain juga, multiplexingnya gimana?
ya tinnggal read_aadc(1); untuk membaca ADC pada channel 1
mas mau nanya mas…
saya mau bikin data akuisisi yang nantinya dari sensor untuk mendeteksi capasitansi benda trus mau danhasil datanya mau diubah ke ADC dan ditampilkan ke komputer menggunakan kominikasi serial… caranya dan programnya gmn ya mas? saya menggunakan ATmega 8535
mas biar arduinonya bisa terima perintah dan kirim perintah ke java netbean gimana ya caranya?
sallam mas eko.
ijin tanya, bagai mana cara setting adc utk sensor LDR dengan prinsip jika sensor LDR membaca cahaya, maka led akan ON dan sebaliknya.
mohon buantuannya.
Trimakasih sblm n sesudah.
bisa menggunakan if-else saja, membandingkan data adc yg dibaca contoh
if(read_adc(0)>500) {
PORTA.0=1 // Lampu On
}
else{
PORTA.0=0 // Lampu Off
}
Maksud angka >500 diatas itu apa ya?
mas mau nanya tau ngak dimana ada jual color barcode scenner? makasih mas
bang itu dekat pin adc0 simbol apa ya di proteus ?