Senin, 05 Desember 2016

laporan mikrokontroler menggunakan ADC



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
Contoh: misal tegangan analog yang diukur 1 V, maka tegangan digital adalah:
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