Nama : Dianesty Trisuciyani
NIM : P27838012002
Kelas: 2A, 1-2
LABORATORIUM MIKROKONTROLLER
JURUSAN TEKNIK ELEKTROMEDIK
POLTEKKES KEMENKES SURABAYA
2013
LAPORANPRAKTIKUM MIKROKONTROLLER
PERCOBAAN LED DAN SW PUSH BUTTON
PERCOBAAN 5
ANALOG TO DIGITAL CONVERTER
1. GAMBAR RANGKAIAN DAN PENJELASAN
PENJELASAN RANGKAIAN
Rangkaian di atas merupakan rangkaian ADC. Pada bit ADC di inputkan tegangan. Tegangan yang masuk melalui bit ADC ini diatur dengan variabel resistor. Adc ini berfungsi untuk merubah tegangan yang sifatya analog ke digital untuk dioutputkan melalui led, 7segment, atau display.
Output led
Jika ADC di outputkan pada led maka katoda led dihubungkan pada port c (0)-port c (7). Sedangkan anoda mendapatkan VCC. Untuk menyalakan led tersebut output port c harus berlogika 0. Jika portc berlogika 1 maka led akan mati.
Output 7 segment
Jika adc dioutputkan pada 7segment, Rangkaian Seven segment disini terlebih dahulu dihubungkan dengan 74LS138 sebagai IC dekoder. Pada ic ini PD5,PD6,PD7 berfungsi untuk mengaktikan Y0-Y7. Ic ini digunakan karena dapat meminimalisir jumlah portD yang diperlukan jika 7segment yang di pakai jumlahnya banyak. Sedanhkan untuk portC di hubungkan dengan 7segment. Adc di sini langsung di outputkan pada portc dengan display 7segment.
Output lcd
Untuk output lcd sama seperti utput yang lain yaitu dihubungkan dengan portc namun display yang dipakai adalah lcd.
Start
InisialisasiADC, PORTC
PORTC = read_adc(0); delay_ms(100);
End
2. Flowchart tiap Rangkaian1. ADC display LED
Start
InisialisasiADC, 7segment, PORTC
data = baca_adc(0); sat = data % 10; pul = data / 10;pul = pul % 10; rat = data / 100; rat = rat % 10; rib = data / 1000; ubah=sat; ubah_ke_format7segment(); sat=ubah;// ubah=pul; ubah_ke_format7segment(); pul=ubah; // ubah=rat; ubah_ke_format7segment(); rat=ubah; // ubah=rib; ubah_ke_format7segment(); rib=ubah; // tampil_7segment();
End
2. PercobaanADC Display7Segmen
Start
InisialisasiADC, 7segment, PORTC
suhu = (float)(baca_adc(0)*4.8875)+1; rib= suhu/1000; // rat= suhu%1000; rat= rat/100; // pul= suhu%1000; pul= pul%100; pul= pul/10; // sat= suhu%1000; sat= sat%100; sat= sat%10;ubah=sat; ubah_ke_format7segment(); sat=ubah;ubah=pul; ubah_ke_format7segment(); pul=ubah;ubah=rat; ubah_ke_format7segment(); rat=ubah;ubah=rib; ubah_ke_format7segment(); rib=ubah;tampil_7segment();
End
3. Simulasi konversidataADC keTegangan0.000sd5.000V
4. SimulasiThermometerdengandisplayLCD 0.000sd100.000oC
Start
InisialisasiADC, 7segment, PORTC
SUHU= read_adc(0); suhu_c=(float)SUHU*100/1023; lcd_gotoxy(0,0); ftoa(suhu_c,3,temp);lcd_gotoxy(0,1) ; lcd_puts(temp); lcd_gotoxy(7,1) ; lcd_putchar(0xdf); lcd_putsf("C"); delay_ms(100);
End
3. Listing Program1. PercobaanADC display LED
Coding:
#include<mega8535.h>#include<delay.h>#defineADC_VREF_TYPE0x00
unsignedintread_adc(unsignedcharadc_input){ ADMUX=adc_input|(ADC_VREF_TYPE&0xff);delay_us(10); ADCSRA|=0x40; while((ADCSRA&0x10)==0);ADCSRA|=0x10; returnADCW;}voidmain(void){ DDRC = 0xFF; ADMUX=ADC_VREF_TYPE&0xff; ADCSRA=0xA3; SFIOR&=0x0F;while(1)
{PORTC = read_adc(0);// pembacaan data adc pada channel 0 yang ditampilkan ke PORTCdelay_ms(100);// lamanya waktu scanning perintah}
}2. PercobaanADC Display7Segmen
Coding:
#include<mega8535.h>#include<delay.h>#definemode_ADC 0x00 intubah;intsat,pul,rat,rib;unsignedintdata;
unsignedintbaca_adc(unsignedcharpin_adc){ADMUX =pin_adc|mode_ADC; ADCSRA
|=0x40;while ((ADCSRA&0x10)==0);ADCSRA|= 0x10;returnADCW;}
voidubah_ke_format7segment(){
if(ubah==0){ubah=0xc0;}
if(ubah==1){ubah=0xf9;}
if(ubah==2){ubah=0xa4;}
if(ubah==3){ubah=0xb0;}
if(ubah==4){ubah=0x99;}
if(ubah==5){ubah=0x92;}
if(ubah==6){ubah=0x82;}
if(ubah==7){ubah=0xf8;}
if(ubah==8){ubah=0x80;}
if(ubah==9){ubah=0x90;}}voidtampil_7segment(){
PORTC=rib;//mengirimkandatakedigit5PORTD.5=0;//pada PD5 berlogika 0.
PORTD.6=0;//pada PD6 berlogika 0
PORTD.7=0; //pada PD7 berlogika 0
delay_ms(20);PORTC=rat;//mengirimkandatakedigit6PORTD.5=1; //pada PD5 berlogika 1
PORTD.6=0; //pada PD6 berlogika 0
PORTD.7=0; //pada PD7 berlogika 0
delay_ms(20);PORTC=pul;//mengirimkandatakedigit7
Mengkonversi sat sesuai list pada void ubah_ke_format7segment();
Mengkonversi pul sesuai list pada void ubah_ke_format7segment();
PORTD.5=0;//pada PD5 berlogika 0
PORTD.6=1;//pada PD6 berlogika 1
PORTD.7=0;//pada PD7 berlogika 0
delay_ms(20);PORTC=sat;//mengirimkandatakedigit8PORTD.5=1;//pada PD5 berlogika 1
PORTD.6=1;//pada PD6 berlogika 1
PORTD.7=0;//pada PD7 berlogika 0
delay_ms(20);
}voidmain(void){DDRD = 0XFF; DDRC = 0xFF; ADMUX=mode_ADC; ADCSRA=0x85;while(1){
data=baca_adc(0); //pembacaan data adc pada channel 0 oleh “data”sat=data%10;// sat = sisa dari data dibagi 10
pul=data/10; //pul = data yang habis dibagi 10
pul=pul%10; // pul = sisa dari pul dibagi 10
rat=data/100; // rat = data yang habis dibagi 100
rat=rat%10; // rat = sisa dari rat dibagi 10rib=data/1000; // rib = data yang habis dibagi 1000
ubah=sat;ubah_ke_format7segment();sat=ubah;
ubah=pul;
ubah_ke_format7segment();
pul=ubah;
Mengkonversi rat sesuai list pada void ubah_ke_format7segment();
Mengkonversi rib sesuai list pada void ubah_ke_format7segment();
ubah=rat;ubah_ke_format7segment();rat=ubah;
ubah=rib;ubah_ke_format7segment();rib=ubah;
tampil_7segment(); // perintah untuk mengambil list di void tampil_7segment();
} }
3. Simulasi konversidataADC keTegangan0.000sd5.000VCoding:
#include<mega8535.h>#include<delay.h>#definemode_ADC 0x00unsignedint ubah,sat,pul,rat,rib,suhu;
unsignedintbaca_adc(unsignedcharpin_adc){ ADMUX =pin_adc|mode_ADC; ADCSRA|=0x40; while ((ADCSRA&0x10)==0); ADCSRA|= 0x10; returnADCW;}
voidubah_ke_format7segment(){
if(ubah==0){ubah=0xc0;} if(ubah==1){ubah=0xf9;} if(ubah==2){ubah=0xa4;} if(ubah==3){ubah=0xb0;} if(ubah==4)
{ubah=0x99;}if(ubah==5){ubah=0x92;} if(ubah==6){ubah=0x82;} if(ubah==7){ubah=0xf8;} if(ubah==8){ubah=0x80;} if(ubah==9){ubah=0x90;}
}
voidtampil_7segment(){
PORTC=rib;//mengirimkandatakedigit5PORTD.5=0; PORTD.6=0; delay_ms(10);
PORTC=rat;//mengirimkandatakedigit6PORTD.5=1; PORTD.6=0; delay_ms(10);
PORTC=pul;//mengirimkandatakedigit7P
ORTD.5=0; PORTD.6=1; delay_ms(10);
PORTC=sat;//mengirimkandatakedigit8PORTD.5=1;PORTD.6=1;delay_ms(10);//lamanyawaktuscanningditentukanolehintruksidelay
}
voidmain(void){
DDRD = 0XFF; DDRC=0xFF;
ADMUX=mode_ADC; ADCSRA=0x85;
while(1){suhu=(float)(baca_adc(0)*4.8875)+1; //pembacaan data adc pada channel 0 yang dikalikan 4.8875 kemudian ditambah 1 dengan tipe data (bilangan) decimal oleh “suhu”
rib= suhu/1000;// rib = suhu yang habis dibagi 1000
rat= suhu%1000; // rat = sisa dari suhu dibagi 1000rat= rat/100; // rat = rat yang habis dibagi 100
pul=suhu%1000; // pul = sisa dari suhu dibagi 1000pul=pul%100; // pul = sisa dari pul dibagi 100
Mengkonversi sat sesuai list pada void ubah_ke_format7segment();
Mengkonversi pul sesuai list pada void ubah_ke_format7segment();
Mengkonversi rat sesuai list pada void ubah_ke_format7segment();
Mengkonversi rib sesuai list pada void ubah_ke_format7segment();
pul=pul/10; //pul = pul yang habis dibagi 10
sat= suhu%1000; pul = sisa dari suhu dibagi 1000sat= sat%100; sat = sat dari pul dibagi 100sat= sat%10;sat = sat yang habis dibagi 10
ubah=sat; ubah_ke_format7segment(); sat=ubah;
ubah=pul; ubah_ke_format7segment(); pul=ubah;
ubah=rat; ubah_ke_format7segment(); rat=ubah;
ubah=rib; ubah_ke_format7segment(); rib=ubah;
tampil_7segment();// perintah untuk mengambil list di void tampil_7segment();
}}
4. SimulasiThermometerdengandisplayLCD 0.000sd100.000oC
Coding:
#asm.equ
lcd_port=0x15;POR
TC#endasm#defineADC_VREF_TYPE0x00
unsignedintread_adc(unsignedcharadc_input){
ADMUX=adc_input|(ADC_VREF_TYPE&0xff);voltage delay_us(10);ADCSRA|=0x40;complete while((ADCSRA&0x10)==0); ADCSRA|=0x10;returnADCW;
}
voidmain(void){
SFIOR=0x00;ADMUX=ADC_VREF_TYPE&0xff; ADCSRA=0xA3;SFIOR&=0x0F;
initialization lcd_init(16);lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("DISP.THERMOMETER");while(1){SUHU=read_adc(0); //pembacaan data adc channel 0 oleh “SUHU”suhu_c=(float)SUHU*100/1023;//rumusubahkederajatcelcius lcd_gotoxy(0,0);ftoa(suhu_c,3,temp);//floattoascii (dari decimal berubah ke ascii)
lcd_gotoxy(0,1); //menentukan koordinat kolom 0, baris 1lcd_puts(temp); //pengambilan/peletakkan data oleh lcd dari templatelcd_gotoxy(7,1); //menentukan koordinat kolom 7, baris 1lcd_putchar(0xdf);//menampilkankarakterderajat lcd_putsf("C");delay_ms(100); //lamanya waktu scanning perintah
};}}
Gambar Simulasi pada Proteus
ADC DISPLAY LED
ADC DISPLAY 7 SEGMEN
SIMULASI KONVERSI DATA ADC KE TEGANGAN 0.000 SD 5.000V
SIMULASI THERMOMETER DENGAN DISPLAY LCD 0.000SD 100.000OC