Abstrak—Pada modul V ini berjudul Analog To Digital mengecek kondisi dari rangkaian yang akan dibuat. Pada
Converter yang bertujuan untuk praktikan mampu pembuatan simulasi suatu rangkaian elektronika ini dapat
membuat program yang menggunakan ADC pada AVR digunakan suatu program yang dapat memberikan fasilitas
ATMEGA 8535 untuk mengkonversi input tegangan analog dalam perancangan suatu rangkaian yaitu
menjadi nilai digital serta praktikan mampu membuat program proteus.7 dan CVAVR untuk pembuatan program
program untuk mengubah hasil konversi dalam satuan
yang dibutuhkan oleh rangkaian yang kita buat.
biner menjadi satuan BCD dan dikirimkan ke PC melalui
komunikasi USART. Dalam praktikum ini menggunakan
mikroprosesor ATMEGA8535, sensor LDR, sensor suhu
Adapun tujuan dari percobaan modul 1 ini ialah :
LM35DZ, capasitor, resistor, crystal. Konsep pada
praktikum ini merupakan merubah analog menjadi digital
1. Praktikan mampu membuat program yang menggunakan
dalam artian merubah intensitas menjadi satuan biner dan
ADC pada AVR ATMEGA8535 untuk mengkonversi
dikonversi menjadi satuan BCD dan dikirimkan ke PC agar
input tegangan analog menjadi nilai digital.
output dapat diipahami oleh user. Praktikum tersebut
2. Praktikan mampu membuat program untuk mengubah
dilakukan secara online sehingga praktikan menggunakan
hasil konversi dalam satuan biner menjadi satuan BCD
software proteus untuk merakit rangkaian dan software
dan dikirimkan ke PC melalui komunikasi serial USART
CVAVR untuk mengupload program pada ATMEGA8535.
• Software CVAVR
• Software Proteus
• PC/Laptop
Langkah Kerja
Selesai
Prinsip kerja dari konverter A/D adalah semua bit-bit diset
kemudian diuji, dan bilamana perlu sesuai dengan kondisi yang
telah ditentukan. Dengan rangkaian yang paling cepat, konversi Untuk percoban kedua dna ketiga dilakukan hal yang sama .
akan diselesaikan sesudah 8 clock, dan keluaran D/A
merupakan nilai analog yang ekivalen dengan nilai register
SAR. Apabila konversi telah dilaksanakan, rangkaian kembali
mengirim sinyal selesai konversi yang berlogika rendah. Sisi
turun sinyal ini akan menghasilkan data digital yang ekivalen
IV. HASIL DAN ANALISIS (4MHz)
UCSRA=0x00;
Rangkaian Penguat Non-Inverting UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
#include <mega8535.h> UBRRL=0x19;
#include <delay.h> while (1)
#include <string.h> {
#include <stdio.h> for (i=0; i<= strlenf(string)-1; i++)
unsigned long int hasil; {
//Fungsi untuk mengubah input biner menjadi bentuk BCD temp=string[i];
unsigned long int bin2BCD (unsigned int input) putchar(temp); //Kirim temp ke USART
{ }
hasil=((input/10000)*65536)+ hasil=read_adc(adc_input); //Baca tegangan pada pin ADC1
(((input%10000)/1000)*4096)+ hasil=hasil*49; //Hasil pembacaan dikalikan
((((input%10000)%1000)/100)*256)+ dengan 1 LSB
(((((input%10000)%1000)%100)/10)*16)+ hasil=bin2BCD(hasil); //Konversi hasil ADC ke format BCD
((((input%10000)%1000)%100)%10); temp=(hasil>>16 & 0x0F)+0x30; //Ubah format BCD ke
return(hasil); ASCII
} putchar(temp);
6 putchar(',');
//Tegangan referensi : pin AREF //Kiirim ASCII ke USART
//Hasil konversi ADC : right adjusted 7
#define ADC_VREF_TYPE 0x00 temp=(hasil>>12 & 0x0F)+0x30;
//Fungsi untuk membaca tegangan input ADC (konversi ADC) putchar(temp);
unsigned int read_adc (unsigned char adc_input) temp=(hasil>>8 & 0x0F)+0x30;
{ putchar(temp);
unsigned char temp; putchar(' ');
unsigned int data_adc; putchar('V');
ADMUX=adc_input|ADC_VREF_TYPE; temp=(hasil>>4 & 0x0F)+0x30;
//Start konversi ADC temp=(hasil & 0x0F)+0x30;
ADCSRA|=0x40; //ADCSRA di-OR-kan dengan 40H putchar(0x0D); //Kirim ENTER pada terminal untuk baris
(ADCSRA=ADCSRA|0x40) baru
//Tunggu sampai konversi ADC selesai (flag ADIF) putchar(0x0A);
while ((ADCSRA & 0x10)==0); delay_ms(1000);
ADCSRA|=0x10; //Clear flag ADIF }
data_adc=0x0000; }
temp=ADCL;
data_adc=ADCH; Analisis
//Baca ADC Data Register LOW Pada percobaan ini hasil yang ditampilkan di ADC 0 sebesar
//Baca ADC Data Register HIGH 27,44 derajat celcius Ketika push button ditekan maka hasilnya
data_adc<<=8; //Geser data_adc HIGH ke kiri 8 kali akan berenti dan Ketika push button dilepas maka hasilnya akan
data_adc|=temp; terus berjalan seiring perubahan suhu.
xxxx
return data_adc; MENGUKUR TEGANGAN OUTPUT LDR
//Hasil konversi ADC= 0000 00xx xxxx
//Right adjusted #include
} #include
flash unsigned char string[]= {"Hasil pada ADC1 : "}; #include
void main(void) #include
{ <mega8535.h>
unsigned char i,temp,adc_input=0x01; <delay.h>
DDRA=0x00; <string.h>
//Tegangan referensi ADC : pin AREF <stdio.h>
ADMUX=ADC_VREF_TYPE; unsigned long int hasil;
//Inisialisai ADC (Enable ADC) //Fungsi untuk mengubah input biner menjadi bentuk BCD
//Frekuensi clock ADC : 31.250 kHz (4MHz/128) unsigned long int bin2BCD (unsigned int input)
ADCSRA=0x87; {
SFIOR&=0xEF; //Sumber trigger : Free Running mode hasil=((input/10000)*65536)+
// Inisialisasi USART 8-N-1 dengan baud rate 9600 bps (((input%10000)/1000)*4096)+
((((input%10000)%1000)/100)*256)+ dengan 1 LSB
(((((input%10000)%1000)%100)/10)*16)+ hasil=bin2BCD(hasil); //Konversi hasil ADC ke format BCD
((((input%10000)%1000)%100)%10); temp=(hasil>>16 & 0x0F)+0x30; //Ubah format BCD ke
return(hasil); ASCII
} putchar(temp);
6 putchar(',');
//Tegangan referensi : pin AREF //Kiirim ASCII ke USART
//Hasil konversi ADC : right adjusted 7
#define ADC_VREF_TYPE 0x00 temp=(hasil>>12 & 0x0F)+0x30;
//Fungsi untuk membaca tegangan input ADC (konversi ADC) putchar(temp);
unsigned int read_adc (unsigned char adc_input) temp=(hasil>>8 & 0x0F)+0x30;
{ putchar(temp);
unsigned char temp; putchar(' ');
unsigned int data_adc; putchar('V');
ADMUX=adc_input|ADC_VREF_TYPE; temp=(hasil>>4 & 0x0F)+0x30;
//Start konversi ADC temp=(hasil & 0x0F)+0x30;
ADCSRA|=0x40; //ADCSRA di-OR-kan dengan 40H putchar(0x0D); //Kirim ENTER pada terminal untuk baris
(ADCSRA=ADCSRA|0x40) baru
//Tunggu sampai konversi ADC selesai (flag ADIF) putchar(0x0A);
while ((ADCSRA & 0x10)==0); delay_ms(1000);
ADCSRA|=0x10; //Clear flag ADIF }
data_adc=0x0000; }
temp=ADCL;
data_adc=ADCH; Analisis
//Baca ADC Data Register LOW Pada percobaan ini hasilnya ada di ADC 1 sebesar 4,65 volt jika
//Baca ADC Data Register HIGH push button ditekan maka hasilnya akan berhenti dan jika push
data_adc<<=8; //Geser data_adc HIGH ke kiri 8 kali button dilepas maka hasilnya akan terus berjalan mengupdate
data_adc|=temp; data
xxxx
return data_adc; Kombinasi Percobaan 1 dan 2
//Hasil konversi ADC= 0000 00xx xxxx
//Right adjusted #include <mega8535.h>
} #include <delay.h>
flash unsigned char string[]= {"Hasil pada ADC1 : "}; #include <string.h>
void main(void) #include <stdio.h>
{ unsigned long int hasil1;
unsigned char i,temp,adc_input=0x01; unsigned long int bin2BCD1 (unsigned int input1)
DDRA=0x00; {
//Tegangan referensi ADC : pin AREF hasil1=((input1/10000)*65536)+(((input1%10000)/1000)*409
ADMUX=ADC_VREF_TYPE; 6)+((((input1%10000)%1000)/100)*256)+(((((input1%10000)
//Inisialisai ADC (Enable ADC) %1000)%100)/10)*16)+((((input1%10000)%1000)%100)%10
//Frekuensi clock ADC : 31.250 kHz (4MHz/128) );
ADCSRA=0x87; return(hasil1);
SFIOR&=0xEF; //Sumber trigger : Free Running mode }
// Inisialisasi USART 8-N-1 dengan baud rate 9600 bps unsigned long int hasil;
(4MHz) //Fungsi untuk mengubah input biner menjadi bentuk BCD
UCSRA=0x00; unsigned long int bin2BCD (unsigned int input)
UCSRB=0x18; {
UCSRC=0x86; hasil=((input/10000)*65536)+(((input%10000)/1000)*4096)+
UBRRH=0x00; ((((input%10000)%1000)/100)*256)+(((((input%10000)%100
UBRRL=0x19; 0)%100)/10)*16)+((((input%10000)%1000)%100)%10);
while (1) return(hasil);
{ }
for (i=0; i<= strlenf(string)-1; i++) //Tegangan referensi : pin AREF
{ //Hasil konversi ADC : right adjusted
temp=string[i]; #define ADC_VREF_TYPE 0x00
putchar(temp); //Kirim temp ke USART #define ADC_VREF_TYPE1 0x00
} //Fungsi untuk membaca tegangan input ADC (konversi ADC)
hasil=read_adc(adc_input); //Baca tegangan pada pin ADC1 unsigned int read_adc (unsigned char adc_input)
hasil=hasil*49; //Hasil pembacaan dikalikan {
unsigned char temp; {
unsigned int data_adc; temp=string[i];
ADMUX=adc_input|ADC_VREF_TYPE; putchar(temp); //Kirim temp ke USART
//Start konversi ADC }
ADCSRA|=0x40; hasil=read_adc(adc_input); //Baca tegangan pada pin ADC0
//Tunggu sampai konversi ADC selesai (flag ADIF) hasil=hasil*49; //Hasil pembacaan dikalikan dengan 1 LSB
while ((ADCSRA & 0x10)==0); hasil=bin2BCD(hasil); //Konversi hasil ADC ke format BCD
ADCSRA|=0x10; //Clear flag ADIF temp=(hasil>>16 & 0x0F)+0x30; //Ubah format BCD ke
data_adc=0x0000; ASCII
temp=ADCL; //Baca ADC Data Register LOW temp=(hasil>>12 & 0x0F)+0x30;
data_adc=ADCH;//Baca ADC Data Register HIGH putchar(temp); //Kiirim ASCII ke USART
data_adc<<=8; //Geser data_adc HIGH ke kiri 8 kali temp=(hasil>>8 & 0x0F)+0x30;
data_adc|=temp; //Hasil konversi ADC= 0000 00xx xxxx xxxx putchar(temp);
return data_adc; //Right adjusted putchar(',');
} temp=(hasil>>4 & 0x0F)+0x30;
unsigned int read_adc1 (unsigned char adc_input1) putchar(temp);
{ temp=(hasil & 0x0F)+0x30;
unsigned char temp1; putchar(temp);
unsigned int data_adc1; putchar(' ');
ADMUX=adc_input1|ADC_VREF_TYPE1; putchar('C');
//Start konversi ADC putchar(0x0D);//Kirim ENTER pada terminal untuk baris baru
ADCSRA|=0x40; //ADCSRA di-OR-kan dengan 40H putchar(0x0A);
(ADCSRA=ADCSRA|0x40); delay_ms(1000);
//Tunggu sampai konversi ADC selesai (flag ADIF) for (j=0; j<= strlenf(string1)-1; j++)
while ((ADCSRA & 0x10)==0); {
ADCSRA|=0x10; //Clear flag ADIF temp1=string1[j];
data_adc1=0x0000; putchar(temp1); //Kirim temp ke USART
temp1=ADCL; }
data_adc1=ADCH; hasil1=read_adc1(adc_input1); //Baca tegangan pada pin
//Baca ADC Data Register LOW ADC1
//Baca ADC Data Register HIGH hasil1=hasil1*49; //Hasil pembacaan dikalikandengan 1 LSB
data_adc1<<=8; //Geser data_adc HIGH ke kiri 8 kali hasil1=bin2BCD1(hasil1); //Konversi hasil ADC ke format
data_adc1|=temp1; BCD
return data_adc1; temp1=(hasil1>>16 & 0x0F)+0x30; //Ubah format BCD
//Hasil konversi ADC= 0000 00xx xxxx keASCII
//Right adjusted putchar(temp1);
} putchar(',');
flash unsigned char string[]= {"Hasil pada ADC0 : "}; temp1=(hasil1>>12 & 0x0F)+0x30;
flash unsigned char string1[]= {"Hasil pada ADC1 : "}; putchar(temp1);
void main(void) temp1=(hasil1>>8 & 0x0F)+0x30;
{ putchar(temp1);
unsigned char i,temp,adc_input=0x00; putchar(' ');
unsigned char j,temp1,adc_input1=0x01; putchar('V');
DDRA=0x00; temp1=(hasil1>>4 & 0x0F)+0x30;
//Tegangan referensi ADC : pin AREF temp1=(hasil1 & 0x0F)+0x30;
ADMUX=ADC_VREF_TYPE; putchar(0x0D); //Kirim ENTER pada terminal untuk barisbaru
ADMUX=ADC_VREF_TYPE1; putchar(0x0A);
//Inisialisai ADC (Enable ADC) delay_ms(1000);
//Frekuensi clock ADC : 31.250 kHz (4MHz/128) }
ADCSRA=0x87; }
SFIOR&=0xEF; //Sumber trigger : Free Running mode
// Inisialisasi USART 8-N-1 dengan baud rate 9600 bps(4MHz) Analisis
UCSRA=0x00; Pada percobaan ini akan mengeluarkan hasil ADC 0 dan ADC
UCSRB=0x18; 1 secara bersamaan dan jika push button ditekan maka hasil
UCSRC=0x86; akan berhenti mengupdate hasil, jika push button dilepas, maka
UBRRH=0x00; hasil akan terus di update.
UBRRL=0x19;
while (1)
{
for (i=0; i<= strlenf(string)-1; i++)
V. SIMPULAN
VI. REFERENSI