You are on page 1of 10

ADC

Mikrokontroller atmega8535 telah memiliki fasilitas Analog to Digital Converter yang

sudah built-in dalam chip. Atmega8535 memiliki resolusi ADC 10-bit dengan 8channel input

dan mendukung 16macam penguat beda. ADC ini bekerja dengan teknik successive

approximation. Rangkaian internal ADC ini memiliki catu daya tersendiri yaitu pin AVCC.

Tegangan AVCC harus sama dengan VCC ± 0.3 Volt (datasheet pada lampiran 1).

Data hasil konversi ADC dirumuskan sebagai berikut:

Vin.1024
ADC=
Vref

dimana Vin adalah tegangan masukan pada pin yang dipilih sedangkan Vref adalah

tegangan referensi yang dipilih.

ADC terdiri atas rangkaian Sample and Hold yang menjamin tegangan masukan ke ADC

di tahan pada level konstan saat konversi. Block diagram ADC terlihat di Gambar 2.45 berikut.

Inisialisasi ADC

Untuk menggunakan ADC, haruslah diinisialisasi terlebih dahulu. Proses inisialisasi ADC

meliputi proses penentuan clock, tegangan referensi, format output, dan mode pembacaan.

Register yang perlu diset nilainya adalah ADMUX (ADC Multiplexer Selection Register)

,ADCSRA ( ADC Control and Status Reister A), SFIOR ( Spesial Function IO Register).

Inisialisasi ADMUX

ADMUX merupakan register 8 bit yang berfungsi menentukan tegangan referensi ADC,

format data Output, dan saluran ADC yang digunakan. Konfigurasinya seperti gambar berikut.
Gambar Register ADMUX

Gambar Konfigurasi saat ADLAR sama dengan nol

Gambar Konfigurasi saat ADLAR sama dengan satu

Bit –bit penyusunya dapat dijelaskan sebgai berikut :

A. REFS [1..0] merupakan bit pengatur teangan referensi ADC ATmega16 Memiliki nilai

awal 00 sehingga referensi teganan berasal dari pin AREF,jika nilai REFS 01 maka nilai

tegangan referensi diambil dari pin AVCC,jika nilai REFS 11 berarti nilai teganan

referensi berasal dari dalam yaitu sebesar 2,56 Volt.

B. ADLAR merupakan bit pemilih mode data keluaran ADC. Bernilai awal 0 sehingga 2 bit

tertinggi data hasil konfersinya berada diregister ADCH dan 8bit sisanya berada di

register ADCL,seperti ditujukkan gambar 2.4(b) dan jika bernilai 1,maka hasilnya pada

gambar 2.4(c).

C. MUX [ 4..0] merupakan bit pemilih saluran pembacaan ADC. Bernilai awal 0000. Untuk

mode single ended input,MUX[4..0] bernilai dari 0000-00111. Berikut tabel konfigurasi

bit MUX
Tabel pemilihan bit saluran pembacaan ADC

Tabel pemilihan bit saluran pembacaan ADC (lanjutan)

Inisialisasi ADCSRA

ADCSRA merupakan register 8 bit yang berfungsi melakukan manajemen sinyal kontrol

dan status dari ADC. Memiliki sususan seperti gambar berikut.


Gambar Register ADCSRA

Bit penyusunnya dapat dijelaskan sebagai berikut :

a) ADEN merupakan bit pengatur aktivasi ADC. Berawal dari 0.Jika 1, maka ADC Aktif.

b) ADSC merupakan bit penanda mulainya konversi ADC. Bernilai awal 0,selama konvesi

akan bernilai 1, dan jika telah selesai akan bernilai 1.

c) ADATE merupakan bit pengatur aktivasi picu otomatis operasi ADC.Bernilai awal 0. Jika

1,operasi ADC akan dimulai pada saat transisi positif sinyal picu yang dipilih. Pemilihan

sinya picu menggunakan bit ADTS pada register SFIOR

d) ADIF merupakan bit penanda akhir suatu konversi ADC. Bernilai awal 0. Jika bernilai

1,maka suatu saluran telah selesai dan data siap diakses

e) ADIE merupakan bit pengatur aktivasi interupsi yang berhubungan denan akhir konversi

ADC. Bernilai awal 0. Jika bernilai 1 sebuah interupsi akan dieksekusi.

f) ADPS[2..0] merupakan bit pengatur clock ADC. Bernilai awal 000. Detail nilai bit dapat

dilihat tabel berikut :

Tabel 2.8 Konfigurasi Clock ADC


Inisialisasi SFIOR

Register SFIOR (Special Function IO Register) merupakan register 8 bit pengatur sumber

picu konversi ADC, apakah dari picu internal atau dari picu eksternal. Susunannya sebagai

berikut :

Gambar 2.48 Register-register SFIOR

ADTS[2..0] merupakan bit pengatur picu eksternal operasi ADC. Hanya berfungsi jika bit

ADATE pada register ADCSRA bernilai 1. Bernilai awal 000 sehingga ADC bekerja mode free

running dan tidak ada interupsi yang dihasilkan. Detailnya dapat ditujukkan tabet berikut.

Tabel Konfigurasi mode ADC


Atmega 8535 telah include analog-to-digiatal (A/D) converter dengan resolusi 10 bit yang

dapat juga di program dengan 8 bit.

Kali ini kita akan juga akan belajar menggunakan codeWizard CvAVR. Dengan

menggunakan codewizard ini mempermudah kita dalam pengaturan register pada program kita.

Ini dia caranya gan, cikidot.

Atur micro dan clock yang digunakan, trus enable adc, ni di contoh qt pake adc 10bit, tapi uC

bisa akses adc 8bit atow 10bit tergantung pemilihan anda.

Lanjutnya, pilih file >> generate, save and exit >> save dah dulu gan
Bis tu jadi deh program kita, eitz belum selesei tapi.. ya tinggal gunain aja tu fungsi2nya.

N yang ga dipake boleh di hapus koq, ni dia contoh jadinya

/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.8d Professional
Automatic Program Generator
© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 4/24/2010
Author : F4CG
Company : F4CG
Comments:
Chip type : ATmega8535
Program type : Application
Clock frequency : 12.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 128
*****************************************************/

#include <mega8535.h>
#define ADC_VREF_TYPE 0x40

// Read the AD conversion result


unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

// Declare your global variables here

void main(void)
{
PORTA=0x00;
DDRA=0x00;

// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: On
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x84;
SFIOR&=0xEF;
SFIOR|=0x10;

while (1)
{
// Place your code here

};
}

ni ada contoh program baca adc n ditampilin di lcd. Dari program di atas Cuma dimasukin dan
diubah dikid

#include <mega8535.h>
#include <lcd.h>
#include <stdio.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ; //PORTC
#endasm
#define ADC_VREF_TYPE 0x40
char lcd_buffer[33];
unsigned int dataADC;
void inisialisasi_LCD()
{// LCD module initialization
lcd_init (16);
lcd_gotoxy (0,0);
lcd_putsf (" Diploma ");
lcd_gotoxy (0,1);
lcd_putsf (" T.Elektro UGM ");
delay_ms (1000);
}
void inisialisasi_ADC()
{
// ADC initialization
// ADC Clock frequency: 750,000 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: On
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x84;
SFIOR&=0xEF;
SFIOR|=0x10;
}
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void main(void)
{
inisialisasi_ADC();
inisialisasi_LCD();
while(1)
{ dataADC=read_adc (0); //baca adc0 10bit (0-1024)
lcd_clear ();
lcd_gotoxy (0,0);
sprintf (lcd_buffer,"ADC0=%i",dataADC);
lcd_puts (lcd_buffer);
delayms (100);
};
}
ADC pada mikrokontroler ini diakses 10bit, maka resolusi setiap bitnya bila kita

menggunakan referensi tegangan 5volt sebagai berikut.

Resolusi ADC = 1 x Vref


nbit
2

Resolusi ADC = 1 x 5
2 10
Resolusi ADC = 4.88mV

Hasil konversi ADC dihitung dengan menggunakan rumus sebagai berikut

Vin.1024
Hasil konversi =
Vref

Penjelasan program

inisialisasi_ADC

Listing berikut adalah inisialisasi_ADC. Program ini mengatur mode kerja ADC, yaitu

mengisi ADMUX dengan 0x20 yang berarti ADC bekerja dengan tegangan referensi yang

terhubung ke pin AVCC. Dan dengan format data ADCH-ADCL karna bit ADLAR=0. Berikut

adalah listing fungsi inisialisasi ADC.

void inisialisasi_ADC()
{
// ADC initialization
// ADC Clock frequency: 750,000 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: On
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x84;
SFIOR&=0xEF;
SFIOR|=0x10;
}

Fungsi baca_adc

Berikut adalah fungsi pembacaan ADC 10bit. Fungsi ini adalah fungsi dengan nilai balik.

Sehingga saat fungsi ini dipanggil akan menghasilkan nilai balik sesuai dengan data pada

ADCW.

// Read the AD conversion result


unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

Pada fungsi ini, ADMUX diisikan dengan adc_input dan di-or-kan dengan

ADC_VREF_TYPE. Seperti yang telah didefinisikan sebelumnya konstanta ADC_VREF_TYPE

bernilai 0x40 sedangkan adc_input merupakan argument dati fungsi read_adc.

Materi micro club di upload di facebook >> kardono judin >> bagian catatan

Atau visit blog kardono.blog.ugm.ac.id

You might also like