BAB I
PENDAHULUAN
A.
TUJUAN
·
Mengetahui dan memahami cara menggunakan
ADC yang ada di dalam mikrokontroler.
·
Mengetahui dan memahami bagaimana
memrogram mikrokontroler untuk mengonversi data analog menjadi data digital.
B.
DASAR
TEORI
1.
Pengeritan
ADC (Analog to Digital Converter)
Penggunaan ADC sebagai pengonversi data analog
menjadi data digital merupakan sesuatu hal yang diperlukan jika data yang masuk
ke dalam mikrokontroler, biasanya data dari sensor berupa sinyal analog.
Fitur ADC dalam ATMega8535 adalah sebagai
berikut:
- Resolusi 10 bit.
- Waktu konversi 65-260 μs.
- Input 8 kanal.
- Input ADC 0-5Vcc.
- 3 Mode pemilihan tegangan referensi.
Ada beberapa langkah yang harus dilakukan
untuk inisialisasi ADC, yaitu penentuan clock, tegangan referensi, format data
output dan mode pembacaan. Inisialisasi ini dilakukan pada register-register
berikut:
ADMUX (ADC Multiplexer Selection Register)
ADMUX
merupakan register yang mengatur tegangan referensi yang digunakan ADC,
format
data output dan saluran ADC.
- REFS0-1 (Reference Selection Bits)
REFS0-1
adalah bit-bit pengatur mode tegangan referensi ADC.
- ADLAR (ADC Left Adjust Result)
ADLAR
adalah bit keluaran ADC. Jika ADC telah selesai konversi, maka data ADC akan diletakkan di 2 register, yaitu ADCH dan
ADCL dengan format sesuai ADLAR.
Format data ADC jika ADLAR=0
Format data ADC jika ADLAR=1
- MUX0-4 (Analog Channel and Gain Selection Bits)
MUX0-4 adalah bit-bit pemilih saluran pembacaan ADC.
ADCSRA (ADC Control and Status Register A)
ADCSRA adalah register 8 bit yang berfungsi
untuk melakukan manajemen sinyal kontrol dan status ADC.
- ADEN (ADC Enable)
ADEN merupakan bit pengatur aktivasi ADC. Jika
bernilai 1 maka ADC akan aktif.
- ADCS (ADC Start Conversion)
ADCS merupakan bit penanda dimulainya konversi
ADC. Selama konversi berlogika 1 dan akan berlogika 0 jika selesai konversi.
- ADATE (ADC Auto Trigger Enable)
ADATE merupakan bit pengatur aktivasi picu
otomatis. Jika bernilai 1 maka konversi ADC akan dimulai pada saat tepi positif
pada sinyal trigger yang digunakan.
- ADIF (ADC Interrupt Flag)
ADIF merupakan bit penanda akhir konversi ADC.
Jika bernilai 1 konversi ADC pada suatu saluran telah selesai dan siap diakses.
- ADIE (ADC Interrupt Enable)
ADIE merupakan bit pengatur aktivasi
interupsi. Jika bernilai 1 maka interupsi penandaan telah selesai. Konversi ADC
diaktifkan.
- ADPS0-2 (ADC Prescaler Select Bit)
ADPS0-2 merupakan bit pengatur clock ADC.
SFIOR (Special Function IO Register)
SFIOR adalah register 8 bit yang mengatur
sumber pemicu ADC. Jika bit ADATE pada register ADCSRA bernilai 0 maka ADTS0-2
tidak berfungsi.
Rangkaian yang digunakan untuk mempelajari ADC
dapat dilihat dalam Gambar dibawah. Rangkaian ini merupakan rangkaian pembagi
tegangan dimana tegangan keluaran dapat dihitung dengan rumus:
Vout = R2 x Vcc
R1+R2
C.
ALAT
DAN BAHAN YANG DIGUNAKAN
Pada
praktikum mikrokontroler dengan LED membutuhkan alat dan bahan sebagai berikut
:
·
1 set PC/Laptop yang sudah berisi program
Code Vision dan Khazama
·
1 buah catu daya DC +5V
·
1 buah multimeter
·
1 buah ISP Downloader AVR
·
1 buah sistem minimum AVR
·
1 buah I/O
·
1 buah kabel printer USB
·
2 buah kabel pita hitam
·
1 buah potensiometer
D.
PROSEDUR
1.
Rangkailah peralatan yang diperlukan
seperti dalam Gambar diatas. Hubungkan soket jumper PORTC pada minimum system
dengan soket jumper pada OUTPUT LED. Vout pada rangkaian potensiometer
dihubungkan pada PORTA.0 (ADC channel 0).
2.
Buka program Code Vision AVR
3.
Buat program dengan menggunakan aplikasi
Code Vision AVR
4.
Buatlah file project (.prj) kemudian pilih
IC yang digunakan (ATmega8535) dan atur clock 4.000 Mhz. (seperti praktikum
sebelumnya)
5.
Buatlah file source (.c) kemudian
hubungkan file project dengan file source seperti pada praktikum sebelumnya.
6.
Tambahkan file header
7.
Program berikut merupakan deklarasi
variabel hasil konversi ADC. Tuliskan variabel berikut di luar program utama.
8.
Buatlah program utama dan inisialisasikan
PORT C sebagai output dengan kondisi awal LOW.
9.
Tuliskan inisialisasi ADC berikut di dalam
program utama.
10.
Perhatikan blok program berikut. Arti dari
blok instruksi tersebut adalah setting ADC di PORTA dan inisialisasi ADC.
Tuliskan fungsi berikut di luar program utama.
11.
Tuliskan program berikut dalam program
utama tepatnya di dalam while(1).
12.
Compile dan Build program jika ada yang
error perbaiki program. Masukkan file hex menggunakan Khanzama AVR Programer.
Klik auto program.
13.
Hubungkan output potensiometer pada
PORTA.0.
14.
Ukur tegangan potensiometer (kaki tengah)
sebesar 0-5V (sesuai tabel).
15.
Lepas probe AVO Meter lalu perhatikan dan
catat nyala LED dan konversi nilai dalam desimal.
16.
Hitung perhitungan nilai digital dalam
desimal dengan rumus berikut:
Vdigital
= Vukur / Vcc *255
V
= 1/5 *255 = 51 desimal, atau 33H atau 00110011B
BAB
II
DATA
HASIL PERCOBAAN DAN ANALISA
2.1
Percobaan ADC Untuk Data Analog dari Potensiometer
Percobaan ADC dengan input potensiometer diprogram melalui CVAVR
menggunakan script program berikut:
#include <mega8535.h> // header
program chip ATmega8535
#include <delay.h> //header
program delay
#define ADC_VREF_TYPE 0x60 Mendefinisikan
type ADC
unsigned char read_adc(unsigned
char adc_input) //mendeklarasikan
variabel red_adc
{
ADMUX=adc_input|(ADC_VREF_TYPE&0xff);
//Setting
register ADMUX
delay_us(10); //tunda 10us
ADCSRA|=0x40; //Setting
register ADCSRA
while((ADCSRA&0x10)==0); //perulangan
untuk mengecek logika ADCRA
ADCSRA|=0x10; //set ADCSRA
0x10
return ADCH; //pengembalian nilai
ADCH
}
unsigned char adcdt; //deklarasi
variabel adcdt
void main (void) //fungsi main
{
DDRC=0xff; //set PORTC sebagai output
PORTC=0x00; //PORTC aktif
High
ADMUX=ADC_VREF_TYPE&0xff; //Inisialisasi
register ADMUX
ADCSRA=0xA7; //nisialisasi
register ADCSRA
SFIOR&=0x0f; //Inisialisasi flag pada register SFIOR
while(1)
{
adcdt=read_adc(0); //nilai adcdt
mengikuti nilai input tegangan
PORTC=adcdt; //output PORTC
sama dengan hasil konversi pada adcdt
}
}
Analisi
Program:
Untuk menampilkan hail konversi ADC pada
bit LED maka harus didefinisikan terlebih dahulu tipe ADC yang akan digunakan
melalui deklarasi #define
ADC_VREF_TYPE 0x60 selanjutnya program akan membuat array untuk menampung
hasil pembacaan data analog pada variabel adcdt.
Untuk menggunakan ADC maka harus melakukan setting register-registernya
yaitu setting ADMUX, ADCSRA, dan SFIOR. Hasil setting yang digunakan pada
program diatas menjadikan ADC bekerja secara free running, frekuensi clocknya
sebesar 31.250 kHz dan nilai tegangan referensinya diperoleh dari pin AVCC.
Untuk menampilkan data hasil konversi terlebih dahulu program harus menentukan
PORT yang akan menjadi output ke LED yaitu PORTC. Kemudian program akan
melakukan pembacaan data analog pada tegangan referensi melalui perintah adcdt=read_adc(0);.
Kemudian nilai hasil pembacaan data analog tersebut akan disimpan pada variabel
adcdt yang akan dikeluarkan melalui PORTC yang terhubung ke LED yang menentukan
nyalanya agar sesuai dengan hasil konversi ADC.
Hasil dari script program diatas dapat
digambarkan dalam tabel nyala LED 2.1
ADC
|
|||||||||||
Tegangan
|
Lampu
LED berdasarkan butiran
|
Desimal
|
Perhitungan
|
||||||||
0
|
0
|
0
|
|||||||||
0.5
|
25
|
25.5
|
|||||||||
1
|
51
|
51
|
|||||||||
1.5
|
77
|
76.5
|
|||||||||
2
|
103
|
102
|
|||||||||
2.5
|
128
|
127.5
|
|||||||||
3
|
154
|
153
|
|||||||||
3.5
|
175
|
178.5
|
|||||||||
4
|
204
|
204
|
|||||||||
4.5
|
229
|
229.5
|
|||||||||
5
|
255
|
255
|
Tabel 2.1 Nyala
LED praktikum ADC dengan input potensiometer
2.1.1
Analisa Data Percobaan ADC dengan input potensiometer
Pada percobaan konversi ADC digunakan tegangan refensi dari
VCC sebesar 5 volt.artinya range data analog yang dimiliki berkisar dari 0-5
volt. Karena tipe ADC yang digunakan adalah ADC 8 bit artinya range data
digital yang dimiliki adalah dari 0-255. Artinya 1 bit data digital akan
mewakili 0,0196 volt data analog. Pada percobaan pertama digunakan input data analog sebesar 0 volt
yang menyebabkan nilai hasil konversi yang ditunjukkan LED adalah 00000000
artinya semua LED akan padam dengan kondisi input analog sebesar 0 volt. Pada
percobaan kedua dengan input data analog sebesar 0,5 volt maka diperoleh hasil
konversi secara teoritis sebesar 0,5/0,0196 atau 25,5 data digital. Dari
percobaan ini diperoleh LED yang menyala dengan konfigurasi biner 00011001 sehingga
led yang menyala adalah LED pada bit 0, 3, dan 4. Konfigurasi nyala LED
tersebut apabila dikonversi kedalam bilangan decimal diperoleh nilai 25.
Artinya terdapat selisih antara teori konversi dengan hasil konversi sebesar
0,5. Selisih tersebut masih dalam batas resolusi ADC.
Pada percobaan ketiga dengan input data analog sebesar 1 volt
maka diperoleh hasil konversi secara teoritis sebesar 1/0,0196 atau 51 data
digital. Dari percobaan ini diperoleh LED yang menyala dengan konfigurasi biner
00110011 sehingga led yang menyala adalah LED pada bit 0,1,4,dan 5. Konfigurasi
nyala LED tersebut apabila dikonversi kedalam bilangan decimal diperoleh nilai
52. Artinya ADC mengkonversi dengan presisi karena tidak terdapat perbedaan
antara hasil teori konversi dengan hasil konversinya. Pada percobaan keempat
dengan input data analog sebesar 1,5 volt maka diperoleh hasil konversi secara
teoritis sebesar 1,5/0,0196 atau 76,5 data digital. Dari percobaan ini
diperoleh LED yang menyala dengan konfigurasi biner 01001101 sehingga led yang
menyala adalah LED pada bit 0,2,3,dan 6 . Konfigurasi nyala LED tersebut
apabila dikonversi kedalam bilangan decimal diperoleh nilai 77. Artinya
terdapat selisih antara teori konversi dengan hasil konversi sebesar 0,5.
Selisih tersebut masih dalam batas resolusi ADC. Pada percobaan kelima dengan
input data analog sebesar 2 volt maka diperoleh hasil konversi secara teoritis
sebesar 2/0,0196 atau 102 data digital. Dari percobaan ini diperoleh LED yang
menyala dengan konfigurasi biner 01100111 sehingga led yang menyala adalah LED
pada bit 0,1,2,5,dan 6. Konfigurasi nyala LED tersebut apabila dikonversi
kedalam bilangan decimal diperoleh nilai 103. Artinya terdapat selisih antara
teori konversi dengan hasil konversi sebesar 1. Selisih tersebut masih dalam
batas resolusi ADC. Pada percobaan keenam dengan input data analog sebesar 2,5
volt maka diperoleh hasil konversi secara teoritis sebesar 2,5/0,0196 atau
127,5 data digital. Dari percobaan ini diperoleh LED yang menyala dengan
konfigurasi biner 10000000 sehingga led yang menyala adalah LED pada bit 7.
Konfigurasi nyala LED tersebut apabila dikonversi kedalam bilangan decimal
diperoleh nilai 128. Artinya terdapat selisih antara teori konversi dengan
hasil konversi sebesar 0,5. Selisih tersebut masih dalam batas resolusi ADC. Pada
percobaan ketujuh dengan input data analog sebesar 3 volt maka diperoleh hasil
konversi secara teoritis sebesar 3/0,0196 atau 153 data digital. Dari percobaan
ini diperoleh LED yang menyala dengan konfigurasi biner 10011010 sehingga led
yang menyala adalah LED pada bit 1,3,4,dan 7. Konfigurasi nyala LED tersebut
apabila dikonversi kedalam bilangan decimal diperoleh nilai 154. Artinya
terdapat selisih antara teori konversi dengan hasil konversi sebesar 1. Selisih
tersebut masih dalam batas resolusi ADC.
Pada percobaan kedelapan dengan input data analog sebesar 3,5 volt maka
diperoleh hasil konversi secara teoritis sebesar 3,5/0,0196 atau 178,5 data
digital. Dari percobaan ini diperoleh LED yang menyala dengan konfigurasi biner
10101011 sehingga led yang menyala adalah LED pada bit 0,1,3,5,dan 7.
Konfigurasi nyala LED tersebut apabila dikonversi kedalam bilangan decimal
diperoleh nilai 175. Artinya terdapat selisih antara teori konversi dengan
hasil konversi sebesar 3,5. Selisih tersebut sudah di luar batas resolusi ADC
sehingga terdapat kesalahan hasil konversi. Pada percobaan kesembilan dengan
input data analog sebesar 4 volt maka diperoleh hasil konversi secara teoritis
sebesar 4/0,0196 atau 204 data digital. Dari percobaan ini diperoleh LED yang
menyala dengan konfigurasi biner 11001100 sehingga led yang menyala adalah LED
pada bit 2,3,6,dan 7. Konfigurasi nyala LED tersebut apabila dikonversi kedalam
bilangan decimal diperoleh nilai 204. Artinya terdapat selisih antara teori
konversi dengan hasil konversi sebesar 0.Pada percobaan kesepuluh dengan input
data analog sebesar 4,5 volt maka diperoleh hasil konversi secara teoritis
sebesar 4,5/0,0196 atau 229,5 data digital. Dari percobaan ini diperoleh LED
yang menyala dengan konfigurasi biner 11011001 sehingga led yang menyala adalah
LED pada bit 0,2,5,6,dan 7. Konfigurasi nyala LED tersebut apabila dikonversi
kedalam bilangan decimal diperoleh nilai 229. Artinya terdapat selisih antara
teori konversi dengan hasil konversi sebesar 0,5. Pada percobaan kesebelas
dengan input data analog sebesar 5 volt maka diperoleh hasil konversi secara
teoritis sebesar 5/0,0196 atau 255 data digital. Dari percobaan ini diperoleh
LED yang menyala dengan konfigurasi biner 11111111 sehingga led yang menyala
adalah semua bit LED. Konfigurasi nyala LED tersebut apabila dikonversi kedalam
bilangan decimal diperoleh nilai 255. Artinya terdapat selisih antara teori
konversi dengan hasil konversi sebesar 0.
2.2
Percobaan Menampilkan hasil konversi ADC pada LCD
Percobaan ADC dengan
input potensiometer diprogram melalui CVAVR menggunakan script program berikut:
#include <mega8535.h> //Header program
chip ATmega8535
#include <delay.h> //header program untuk delay
#include <alcd.h> //header program untuk lcd
unsigned char temp[16]; //deklarasi variable array temp
float balik,adcdt; Delarasi variabel balik dan adcdt tipe
float
#define ADC_VREFF_TYPE 0x60//Mendefinisikan type ADC
unsigned char
read_adc(unsigned char adc_input) //mendeklarasikan variabel red_adc
{
ADMUX=adc_input|(ADC_VREFF_TYPE & 0xff); //Setting register ADMUX
delay_us(10); //tunda 10us
ADCSR|=0x40; //Setting register ADCSRA
while((ADCSRA&0x10)==0); //perulangan untuk mengecek logika ADCRA
ADCSRA|=0x10; //set ADCSRA
0x10
return ADCH; //pengembalian
nilai ADCH
}
void main(void) //fungsi main
{
PORTC=0x00; //PORTC aktif
High
DDRC=0xff; //set PORTC
sebagai output
//ADC initialization
//ADC clock frequency: 31.250
kHz
//ADC votlage Referance: AVCC
pin
//ADC high speed Mode: off
//ADC auto trigger source free
running
//only the 8 most significant
bits off
//the AD conversion result are
used
ADMUX=ADC_VREF_TYPE&0xff; //Inisialisasi
register ADMUX
ADCSRA=0xA7; //nisialisasi
register ADCSRA
SFIOR&=0x0f; //Inisialisasi
lcd_init (16);//set kolom lcd 16
while(1)
{
adcdt=read_adc(0);//membaca
adc didalam bit
PORTC=adcdt; //output PORTC
sama dengan hasil konversi pada adcdt
balik=adcdt/51;//
sprintf(temp,"volt %0.2f",balik); //
lcd_gotoxy(0,0); //Pindahkan kursor ke kolom 0 baris 0
lcd_puts(temp); //tampilkan nilai dalam array temp
delay_ms(100); //Tunda 100ms
}
}
2.1.1
Analisa Program Menampilkan Konversi ADC pada LCD
Untuk
mengunakan LCD maka pada header program digunakan #include
<alcd.h> selanjutnya program akan membuat array untuk menampung
hasil pembacaan data analog pada variabel temp.
Untuk menggunakan ADC maka harus melakukan setting register-registernya
yaitu setting ADMUX, ADCSRA, dan SFIOR. Hasil setting yang digunakan pada
program diatas menjadikan ADC bekerja secara free running, frekuensi clocknya
sebesar 31.250 kHz dan nilai tegangan referensinya diperoleh dari pin AVCC.
Untuk menampilkan data hasil konversi terlebih dahulu program harus menentukan
PORT yang akan menjadi output ke LCD yaitu PORTC. Kemudian program akan
melakukan pembacaan data analog pada tegangan referensi melalui perintah adcdt=read_adc(0);.
Kemudian
nilai hasil pembacaan data analog tersebut akan disimpan pada variabel adcdt
yang kemudian dijadikan sebagai penentu nilai variabel balik yang merupakan
hasil konversi digitalnya . Untuk menampilkan hasil konversinya, program
membaca perintah lcd_puts(temp); perintah tersebut
berfungsiuntuk menampilkan data nilai konversi yang tersimpan dalam array temp
ke LCD.
BAB
III
KESIMPULAN
DAN PENUTUP
Dari hasil praktikum antarmuka
mikrokontroler ATmega8535 diperoleh kesimpulan sebagai berikut:
a)
ADC merupakan fitur yang ada dalam
mikrokontroller dan berfungsi sebagai piranti pengkonversi data analog menjadi
data digital.
b)
Dalam mikrokontroller ATmega8535 terdapat
2 jenis ADC yaitu ADC 8 bit dan ADC 10 bit.
c)
Keunggulan ADC dalam ATmega8535 adalah
resolusi tinggi sebesar 10 bit, waktu
konversi yang singkat yaitu 65-260us dengan input 8 kanal serta memiliki 3 mode
pemilihan tegangan referensi.
d)
ADC pada ATmega8535 memiliki 3 register
utama yaitu ADMUX, ADCSRA, dan SFIOR ..
DAFTAR PUSTAKA
Andrianto, Heri. 2007. Pemrograman
Mikrokontroler AVR Atmega 16. Jakarta: Informatika.
Atmel Corporation. Atmega 8535
Datasheet (Complete).
Gadre,
Dhananjay V. 2001. Programming and Customizing the AVR Microcontroller. New York: Mc Graw Hill.
Heryanto, M Ary. 2007. Pemrograman
Bahasa C untuk Mikrokontroler Atmega 8535. Yogyakarta; Penerbit Andi.
Ibrahim,
Dogan. 2002. Microcontroller Based
Temperature Monitoring & Control. Newnes
Tidak ada komentar:
Posting Komentar