Anda di halaman 1dari 22

TUGAS MIKROKONTROLLER

ANALOG TO DIGITAL CONVERTER (ADC)

Oleh : MERYL SABARA JTD 2A

ADC menggunakan LED 8 bit ADC menggunakan 7segment dan LED indikator ADC menggunakan menu dan NIM ADC menggunakan LM35

POLITEKNIK NEGERI MALANG

BAB I PENDAHULUAN
1.1 DasarTeori : 1.1.1 ADC 1.1.2 7segment 1.2 Tujuan :Mengetahuicarakerja ADC pada AtMega16 dengan output akanditampilkanolehLED 8 bit maupun 7 segment sebagai indicator nilai ADC 1.3 Manfaat : Mampumengoperasikan ADC pada simulator AVR dan Proteus

1.1 DasarTeori 1.1.1 ADC Dalam Mikrokontroler ATMEGA16 terdapat 8 buah ADC yang berada pada PORTA (ADC0-ADC7), ADC (Analog to Digital Converter) merupakan proses perubahan tegangan DC kedalam data bilangan digital, bisa berupa biner, heksa, ataupun desimal tergantung pemrograman yang dilakukan. ADC pada mikrokontroler ATMEGA16 dapat diberi referensi tegangan eksternal, yang dalam uji coba ini referensi tegangan eksternal di inputkan pada PIN 30 (AVCC).Dua buah potensio meter di inputkan pada port ADC yang dipergunakan sebagai simulasi perubahan tegangan yang terjadi ketika potensio ini diputar, dalam kenyataan perubahan nilai tegangan ini dapat di aplikasikan berupa pembacaan sensor, misalkan sensor suhu LM35, sensor jarak GP2D12, dll tergantung aplikasi yang akan digunakan. Atmega16 (dan sejenisnya) memiliki fitur ADC sebanyak 8 channel dengan resolusi 10-bit Register yang digunakan untuk setting ADC ini adalah:

+-+ ADCSR | ADEN | ADSC | ADATE | ADIF | ADIE | ADPS2 | ADPS1 | ADPS0 | ++ 76543210

1. ADEN : 1=adc enable, 0=adc turn off 2. ADSC : 1:mulai konversi,0:konversi belum terjadi 3. ADATE:1:auto trigger di aktifkan ,trigger berasal; dari sinyal yang dipilih(set pada register SFIOR bit ADTS).ADC akan start

konversi pada edge positip sinyal trigger. 4. ADIF:di set ke 1,jika konversi ADC selesai dan data register terUpdate.Namun ADC Conversion Complete Interrupt di eksekusi jika bit ADIE dan bit-I dalam register SREG di set.

5. ADIE:di set 1,jika bit-I dalam register SREG di set. 6. ADPS0:2 ,faktor pembagi 0-7 = 2 2 4 8 16 32 64 128.
+-+ ADMUX | REFS1 | REFS0 | ADLAR | MUX4 | MUX3 | MUX2 | MUX1 | MUX0 | ++ 76543210

1. REFS 0,1 :pemilihan tegangan referensi ADC 2. 00:vref=AREF, 01:vref=AVCC dengan eksternal capasitor pada AREF,

10:Vref= Reserved , 11: vref= internal 2.56 volt dengan eksternal kapasitor pada AREF
3. ADLAR:

Untuk setting format data hasil konversi ADC,default=0.


4. MUX0-MUX4 :pemilihan channel ADC yang

digunakan0=channel1,1=channel 2,dst.

+-+ SFIOR | ADTS2 | ADTS1 | ADTS0 | ADHSM | ACME | PUD | PSR2 | PSR10 | ++ 76543210

1. ADTS0-ADTS2 :pemilihan trigger untuk konversi ADC.bit-bit ini berhubungan dengan bit ADATE pada register ADCSRA. 2. ADHSM:ADC high speed mode enabled. 1.1.2 ADC padaCodevisin

CodeVisionmerupakansalahsatu software codinguntukmikrokontroller yang dapatmembuat program pada simulator proteussehinggamemoripadamikrokontrollerbekerjasesuaidengan coding yang perintahkan. Adapuncaradalampenyetingan code vision untukmendapatkanfotmat ADC denganmaksud agar PORT input maupunoutpunbekerjasebagai analog to digital converter: 1. File-New 2. Pilih menu project - yes

3. Setting chip, port, maupun ADC seperti di bawahini -

4. Generate Program

1.2 Tujuan 1. MensimulasikancarakerjaADC dengan LEDsebagai output menggunakan Proteus 2. MempraktikkanADCpadaCodeVision yang menggunakanbahasac++ 3. Menganalisisdasarperbedaanjikamenggunakanreferensi VCC 4. Membuat program secaraspesifikpenggunaan ADC dengan input potensio

1.3 Manfaat 1. Memahamicarakerja ADC 2. Dapatmembuat program ADCmenggunakan Code Vision

dandisimulasikanmenggunakanproteus 3. MemahamiteoriTeganganreferensi 4. Memahami indicator nilai ADC dengan input potensio

BAB II ANALISIS
2.1 2.2 2.3 2.4 ADC menggunakan LED 8 bit ADC menggunakan 7segment dan LED indikator ADC menggunakan menu dan NIM ADC menggunakan LM35

2.1 ADC menggunakan LED 8 bit Dalam percobaan kali ini akan dilakukan uji coba pembacaan nilai ADC pada PORTA.0(ADC 0) dan PORTA.1(ADC 1) pembacaan data dalam bentuk digital 8bit dan dirubah kedalam bentuk desimal dan ditampilkan dalam LED 8bit. berikut merupakan skema rangkaian uji cobanya :

Flow Chart

Algoritma 1. Inisialisasi ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Start the AD conversion ADCSRA|=0x40; // tunggu AD conversion selesai while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; kembalike ADCH; 2. PORTC=0xff, PORTD=0xff 3. Baca data_adc0 dan data_adc1 4. Proses rata-rata denganmenggabungkanmasukan data_adc0 dan data_adc1 = (data_adc0+data_adc1)/2 5. Tampilkanrata-ratapada PORTC 6. Jika PORTC > 128 maka PORTD.7 akanmenyala.

#include <mega16.h> #include <delay.h>

Listing Program

{ data_adc0 = read_adc(0); data_adc1 = read_adc(1); rata2=(data_adc0+data_adc1)/2; PORTC = rata2;

unsigned char data_adc0,data_adc1,rata2; 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; } void main(void)

if (rata2>128)

{PORTD.7 = 1;} else {PORTD.7 = 0;}}

Simulasi

1. Nyala

LED

merupakannilaidari Urutan

ADC bit adalah

yang bit0

telahdikonversikandalammikrokontroller. mulaidarisebelahkanan.

2. LED pada PORTD.7 merupakan LED indicator bahwanilai ADC melebihinilai 128. 3. Nilai-nilaitersebutmerupakanhasildari switch potensio yang diputarputarnilainyasehinggadidapatkannilaitegangan input yang berbeda pula. 4. Tegangan yang masukadalahhasil rata-rata daripotensio ADC.0 danpotensio ADC.1. rata-rata = (ADC.0+ADC.1)/2

2.2

ADC menggunakan 7segment dan LED indicator Dalam percobaan kali ini akan dilakukan uji coba pembacaan nilai

ADC pada PORTA.0(ADC 0) pembacaan data dalam bentuk digital 8bit dan dirubah kedalam bentuk desimal dan ditampilkan dalam seven segment. berikut merupakan skema rangkaian uji cobanya :

Flowchart

Algoritma

1. Inisialisasi ADMUX = adc_input | (ADC_VREF_TYPE & 0xff); // Start the AD conversion ADCSRA|=0x40; // tunggu AD conversion selesai while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; kembalike ADCH; 2. PORTA=0x00, PORTC=0xff, PORTD=0xff 3. Baca data_adc0 4. Tampilkannilai ADC pada 7segment ratusandengan indicator berupa LED 5. Tampilkannilai ADC pada 7segment puluhandengan indicator berupa LED 6. Tampilkannilai ADC pada 7segment satuandengan indicator berupa LED 7. Jikaratusanmaka led pada PORTD.0 =1, PORTD.1=0, PORTD.2=0 8. Jikapuluhanmaka led pada PORTD.0 =0, PORTD.1=1, PORTD.2=0 9. Jikapuluhanmaka led pada PORTD.0 =0, PORTD.1=0, PORTD.2=1

Listing Program

#include <mega16.h> #include <delay.h> unsigned char data_adc; unsigned char segment7[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char rat,pul,sat; #define ADC_VREF_TYPE 0x60 unsigned char read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); delay_us(10); ADCSRA|=0x40; while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCH; void main(void) {while (1) { // Place your code here data_adc = read_adc(0); {rat = data_adc/100; PORTC = segment7[rat]; if (segment7[rat]) {PORTD.0=1;} {PORTD.1=0;} {PORTD.2=0;} delay_ms(200);} {pul = (data_adc%100)/10; PORTC = segment7[pul]; if (segment7[pul]) {PORTD.1=1;} {PORTD.0=0;} {PORTD.2=0;} delay_ms(200);} {sat = data_adc%10; PORTC = segment7[sat]; if (segment7[sat]) {PORTD.2=1;} {PORTD.0=0;} {PORTD.1=0;} delay_ms(200); } }; }

Simulasi

1. Nilai ADC di konversisehinggamenyimpannilaitertentu, danhasilbaca ADC tersebutakanditampilkanmelalui seven segment 2. LED pada PORTD.1, PORTD.2, PORTD.3 adalah indicator yang membantumengetahuinilairatusan, puluhan, satuandar 7segment 3. Nilai-nilaitersebutmerupakanhasildari switch potensio yang diputarputarnilainyasehinggadidapatkannilaitegangan input yang berbeda pula. 4. Tegangan yang masukadalahdaripotensio ADC.0

2.3

ADC menggunakan menu dan NIM Padapercobaan kali iniyaitumengkombinasikan ADC menggunakantampilan

seven segment dengan seven segment untukmenampilkan NIM jikanilai ADC adalahtertentu. PORTA merupakanmasukan , PORTB adalah indicator menu darinilai seven segment apakahituratusan, puluhanataupunsatuan. Sedangkan PORTC dan PORTD masing-masingadalah seven segment ADC dan NIM.


start

Flowchart

PORTA=0x00 PORTB=0xff PORTC=0xff PORTD=0xff Char seg[10] Char nim[10] ADMUX=0x60 ADCSRA|=0x40

while ((ADCSRA & 0x10)==0); ADCSRA|=0x10

data_adc = read_adc(0)

if (data_adc< 128 )

PORTD = seg[nim1[i]] pul = (data_adc%100)/10


PORTC = segment7[pul]

rat = data_adc/100

sat = data_adc%10

PORTC = segment7[rat]

PORTC = segment7[sat]

if (segment7[rat])

if (segment7[pul])

if (segment7[sat])

{PORTD.0=1;} {PORTD.1=0;} {PORTD.2=0;}

{PORTD.1=0;} {PORTD.0=1;} {PORTD.2=0;}

{PORTD.2=0;} {PORTD.0=0;} {PORTD.1=1;}

delay_ms(200)

delay_ms(200)

delay_ms(200)

Algoritma

1. Inisialisasi ADMUX = adc_input | (ADC_VREF_TYPE & 0xff); // Start the AD conversion ADCSRA|=0x40; // tunggu AD conversion selesai while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; kembalike ADCH; 2. PORTA=0x00, PORTB=0xff, PORTC=0xff, PORTD=0xff 3. Baca data_adc0 4. Jika ADC<=128, maka PORTD= seg[nim[i]] dimanaiadalah for (i=1,i<=128;i++) 5. Tampilkannilai ADC pada 7segment ratusandengan indicator berupa LED 6. Tampilkannilai ADC pada 7segment puluhandengan indicator berupa LED 7. Tampilkannilai ADC pada 7segment satuandengan indicator berupa LED 8. Jikaratusanmaka led pada PORTB.0 =1, PORTB.1=0, PORTB.2=0 9. Jikapuluhanmaka led pada PORTB.0 =0, PORTB.1=1, PORTB.2=0 10. Jikapuluhanmaka led pada PORTB.0 =0, PORTB.1=0, PORTB.2=1

Simulasi

Gambar PORTB (NIM)

Gambar PORTC

1. ADC

akanmenghasilkannilaitertentudari

input

kemudian

di

tampilkanpada seven segment PORTC, kemudianjikanilai ADC <= 128, maka seven segment pada PORTD (NIM)

akanberjalansesuaidengan char NIM yang akan d looping oleh variable i 2. Ada pula indicator pada PORTB yang ditunjukkandenganadanya 3 buah LED pada PORTB.0 (ratusan) , PORTB.1 (puluhan) , PORTB.2 (satuan) 3. Hal tersebutakanmenjadibaikjikakitamemberikan coding berupa delay agar perpindahan digit angkapada seven segment benarbenarstabildantidakterlalucepat.

2.4 ADC menggunakan LM35 Padapercobaan kali iniyaitudenganmenggunakan sensor panas, LM35.Untukitu sensor tersebutakanmenjadiinputan ADC. Untukkeluaranpada AtMega16

yaitudenganmemberikandiplay seven segment pada PORTC untukmenampilkannilai ADC. Dan jugaindikator led pada PORTB dan PORTD. Indicator led pada PORTB yaituuntukmenunjukkanbahwadiaakanmenyalajikanilaidari ADC melebihi 128.

Karenakitaasumsikanada indicator untukmenandakankelebihanpanas.Sedangkan led indicator pada PORTD adalahuntukketerangan seven segment apakahituratusan, puluhan, satuan.


start

Flowchart

PORTA=0x00 PORTC=0xff ADMUX=0x60 ADCSRA|=0x40

while ((ADCSRA & 0x10)==0); ADCSRA|=0x10

data_adc0 = read_adc(0); data_adc1 = read_adc(1);

rata2=(data_adc0 +data_adc1)/2;

If (rata2<=128)

PORTB.0=1

rat = rata2/100

pul = (rata2%100)/10

sat = rata2%10

PORTC = segment7[rat]

PORTC = segment7[pul]

PORTC = segment7[sat]

if (segment7[rat])

if (segment7[pul])

if (segment7[sat])

{PORTD.0=1;} {PORTD.1=0;} {PORTD.2=0;}

{PORTD.1=0;} {PORTD.0=1;} {PORTD.2=0;}

{PORTD.2=0;} {PORTD.0=0;} {PORTD.1=1;}

delay_ms(200)

delay_ms(200)

delay_ms(200)

Algoritma

1. Inisialisasi ADMUX = adc_input | (ADC_VREF_TYPE & 0xff); // Start the AD conversion ADCSRA|=0x40; // tunggu AD conversion selesai while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; kembalike ADCH; 2. PORTA=0x00, PORTB=0xff, PORTC=0xff, PORTD=0xff 3. Baca data_adc0 dan data_adc1 4. Rata2=(data_adc0+data_adc1)/2 5. Jika rata2 <=123 maka PORTB.0=1 6. Tampilkannilai ADC pada 7segment ratusandengan indicator berupa LED 7. Tampilkannilai ADC pada 7segment puluhandengan indicator berupa LED 8. Tampilkannilai ADC pada 7segment satuandengan indicator berupa LED 9. Jikaratusanmaka led pada PORTD.0 =1, PORTD.1=0, PORTD.2=0 10. Jikapuluhanmaka led pada PORTD.0 =0, PORTD.1=1, PORTD.2=0 11. Jikapuluhanmaka led pada PORTD.0 =0, PORTD.1=0, PORTD.2=1

Simulasi

1. Input ADC menggunakan LM35 pada ADC0 dan ADC1 kemudian di rata2. Dari rata2 menjadiacuan input untuk coding selanjutnya 2. PORTB.0 digunakanuntuk indicator jika rata2 lebihdari 128 makamenyala 3. PORTC adalahuntukmenampilkannilai ADC 4. PORTD sebagai indicator apakahitunilairatusan, puluhan, atausatuan.