nur 016
TRANSCRIPT
Nama : Nur Hudatu Munawaroh
NIM : P27838012016
Kelas: 2A,1-2
LABORATORIUM MIKROKONTROLLER
JURUSAN TEKNIK ELEKTROMEDIK
POLTEKKES KEMENKES SURABAYA
2013
LAPORAN PRAKTIKUM MIKROKONTROLLER
ANALOG TO DIGITAL CONVERTER
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,maupun 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.
//>>> portc akan menampilkanpembacaan dari tegangan yang masuk di adc nol dengan delay selama 100ms
PENJELASAN PROGRAM DARI MASING-MASING PERCOBAAN
a. Percobaan ADC display LED
#include <mega8535.h> //>>> menginputkan library dari mikrokontroller yang kita gunakan ,disini menggunakan Atmega 8535
#include <delay.h> //>>> menginputkan library delay#define ADC_VREF_TYPE 0x00 //>>>type diatas menggunnakan Vref…artinya
kita bisa memasukkan tegangan Vref yang diinginkan
unsigned int read_adc(unsigned char adc_input) //>>> mendeklarasikan variabel data read_adc
{ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);delay_us(10);ADCSRA|=0x40;while ((ADCSRA & 0x10)==0);ADCSRA|=0x10;return ADCW;}
void main(void){DDRC = 0xFF;ADMUX=ADC_VREF_TYPE & 0xff;ADCSRA=0xA3;SFIOR&=0x0F;
while(1){PORTC = read_adc(0);Delay_ms(100);
//>>>fungsi program ini adalah melakukan pembacaan ADC berdasarkan pin masukan ADC
//>>>untuk memangil inisialisasi ADC
b. Percobaan ADC Display 7 Segmen
#include <mega8535.h>#include <delay.h>#define mode_ADC 0x00int ubah;int sat,pul,rat,rib;unsigned int data;unsigned int baca_adc (unsigned char pin_adc)
//>>> menginputkan library dari mikrokontroler yang digunakan yaitu 8535
//>>>meniputkan ibrar delay
//>>>mendeklarasikan variabel data
ADMUX =pin_adc | mode_ADC;ADCSRA |=0x40;while ((ADCSRA & 0x10)==0);ADCSRA |= 0x10;return ADCW;
//>>>fungsi program ini adalah melakukan pembacaan ADC berdasarkan pin masukan ADC
void ubah_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;}}
//fungsi untuk mengubah kedalam format 7segment
PORTC=rib;//mengirimkan data kedigit5PORTD.5=0;PORTD.6=0;PORTD.7=0;delay_ms(20);PORTC=rat;//mengirimkan data kedigit6PORTD.5=1;PORTD.6=0;PORTD.7=0;delay_ms(20);PORTC=pul;//mengirimkan data kedigit7PORTD.5=0;PORTD.6=1;PORTD.7=0delay_ms(20);PORTC=sat;//mengirimkan data kedigit8PORTD.5=1;PORTD.6=1;PORTD.7=0;delay_ms(20);//lamanya waktu scanning ditentukan delay}
//>>>Menentukan posisi 7segmen yang menyala. Disini untuk bagian ribuan akan ditampilkan pada Y0. Untuk bagian ratusan akan ditampilakn pada Y1. Untuk bagian puluhan akan ditampilkan pada Y2. Untuk bagian puluhan akan ditampilkan pada Y3. Untuk bagian satuan akan ditampilkan pada Y4. Semuanya akan ditampilakan dengan delay 20ms.
void main(void){DDRD = 0XFF;DDRC = 0xFF;ADMUX=mode_ADC;ADCSRA=0x85
//>>>untuk memanggil inisialisasi adc
c. Simulasi konversi data ADC ke Tegangan 0.000 sd 5.000 V
{data = baca_adc(0);sat = data % 10;// sat = sisa dari data dibagi 10pul = data / 10;
pul = pul % 10;rat = data / 100;rat = rat % 10;rib = data / 1000;
//>>>data yang diambil dari pembacaan adc 0
//>>> data satuan merupakan sisa dari hasil dari data / 10
//>>>data puluhan adaah hasil dari data / 10
//>>> data puluhan merupakan hasil dari data /10
//>>>data puluhan adalah sisa dari data / 10
//>>> data ratusan merupakan hasil dari data /10
//>>>data ratusan adalah sisa dari data / 10
//>>> data ribuan merupakan hasil dari data /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();
//>>>mengubah data ke format 7segment dan menampilkanya ke 7segment
#include <mega8535.h>#include <delay.h>#define mode_ADC 0x00
//>>>berfungsi untuk menginputkan librar yang digunakan. Disini kita menggunakan atmega8535 dan library delay
unsigned int ubah,sat,pul,rat,rib,suhu;unsigned int baca_adc (unsigned char pin_adc)//
//>>>mendeklarasikan variabel data ubah,satuan,puluhan,ratusan,ribuan,suhu,baca_adc.
ADMUX =pin_adc | mode_ADC;ADCSRA |=0x40;while ((ADCSRA & 0x10)==0);ADCSRA |= 0x10;return ADCW;
//>>>untuk memanggil inisialisasi adc
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;
//>>>suhu diperoleh dari pembacaan tegangan yang masuk dari adc 0 x 4.8875 +1
//>>> data ribuan merupakan hasil dari suhu / 1000
//>>>data ratusan adalah sisa dari suhu / 1000
//>>> data ratusan merupakan hasil dari suhu/100
//>>>data puluhan adalah sisa dari suhu / 10 0
//>>> data puluhan merupakan hasil dari suhu /10
//>>>data satuan adalah sisa dari suhu / 10
//>>> data satuan merupakan hasil dari suhu /100
//>>>data puluhan adalah sisa dari data / 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();
//>>>mengubah data ke format 7segment dan menampilkanya ke 7segment
d. Simulasi Thermometer dengan display LCD 0.000 sd 100.000 oC
#include <stdlib.h>#include <lcd.h>#include <delay.h>#include <mega8535.h>
//>>>meninputkan ibrary yang digunakan seperti atmeg 8535, delay,dan lcd
unsigned int SUHU;char temp[10];float suhu_c;
//>>>mendeklarasikan variabel data suhu
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);// Delay needed for the stabilization of the ADC input voltagedelay_us(10);// Start the AD conversionADCSRA|=0x40;// Wait for the AD conversion to completewhile ((ADCSRA & 0x10)==0);ADCSRA|=0x10;return ADCW;
//>>>memanggil inisialisasi adc
lcd_init(16);lcd_clear();lcd_gotoxy(0,0);lcd_putsf("DISP.THERMOMETER");
//>>>menggunakan lcd karakter 16
//>>>letak karakter yang akan ditampilkan pada koordinat (0,0);
//>>>menampilkan tulisan DISP. THERMOMETER pada lcd
SUHU= read_adc(0);suhu_c=(float)SUHU*100/1023;//rumus ubah ke derajat celciuslcd_gotoxy(0,0);ftoa(suhu_c,3,temp);//float to ascii
//>.>>suhu di dapata dari pembacaan tegangan yang masuk dari adc 0
//>>suhu dapat diperoleh dengan rumus untuk menguah ke derajat celcius SUHU*100/1023
//>>>karakter akan di tampilkan pada koordinat (0,0)
//>>>suhu yang diperoleh akan diubah ke bentuk ascii
FLOWCHART DARI MASING-MASING PROGRAM
a. Percobaan adc dengan led
lcd_gotoxy(0,1) ;lcd_puts(temp);lcd_gotoxy(7,1) ;lcd_putchar(0xdf);//menampilkan karakter derajatlcd_putsf("C");delay_ms(100);
//>>>suhu atau karakter akan ditampilkan pada koordinat (0,0)
//>>>suhu yang diperoleh dari rumus dan telah di ubah ke ascii akan di tampilkan di lcd
//>>> akan menampilkan karakter derajat
//>>>menampilkan tulisan C pada lcd
//>>>memberikan waktu delay selama 100 ms
Start
InisialisasiADC, PORTC
PORTC = read_adc(0); delay_ms(100);
End
b. Percobaan adc dengan display 7segment
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
c. SIMULASI KONVERSI DATA ADC KE TEGANGAN 0.000 SD 5.0
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
d. SIMULASI THERMOMETER DENGAN DISPLAY LCD 0.000SD 100.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
PROTEUS DARI MASING-MASING PROGRAM
e. Percobaan dengan led
f. Percobaan adc dengan display 7segment
g. SIMULASI KONVERSI DATA ADC KE TEGANGAN 0.000 SD 5.0
h. SIMULASI THERMOMETER DENGAN DISPLAY LCD 0.000SD 100.000OC