Anda di halaman 1dari 10

1

MODUL V
ANALOG-TO-DIGITAL CONVERTER
TUJUAN

 Praktikan mampu membuat program yang menggunakan ADC pada AVR


ATMEGA8535 untuk mengkonversi input tegangan analog menjadi nilai
digital.
 Praktikan mampu membuat program untuk mengubah hasil konversi
dalam satuan biner menjadi satuan BCD dan dikirimkan ke PC melalui
komunikasi serial USART

KONFIGURASI ADC

Gambar dan table berikut ini dikutipkan dari datasheet ATMega 8535:

ADC Multiplexer Selection Register (Datasheet ATMega8535 Hal. 219)


2

ADC Control and Status RegisterA (Datasheet ATMega8535 Hal. 221)

ADC Data Register ADCL and ADCH, ADLAR = 0 (Datasheet ATMega8535 Hal. 222)

ADC Data Register ADCL and ADCH, ADLAR = 1 (Datasheet ATMega8535 Hal. 222)

Special Function IO Register (Datasheet ATMega8535 Hal. 223)

Pada ADC hasil konversi untuk single ended input dapat dihitung dengan
menggunakan persamaan berikut ini:

Perubahan hasil konversi per-satu LSB pada ADC 10-bit dapat dihitung dengan
menggunakan rumus (dengan VREF = 5 volt)

TUGAS PENDAHULUAN
1. Jelaskan fungsi dari setiap bit register ADMUX dan ADCSRA!
2. Gambarkan rangkaian ADC serta jelaskan prinsip kerja dari rangkaian
tersebut!
3

III.A PENGUKURAN SUHU DENGAN LM35DZ

Persiapan

 Siapkan alat dan bahan yang digunakan (starter-kit AVR DT-Combo,


USBasp, PC/Laptop).
 Buka software yang digunakan (Code Vision AVR, Khazamma Programmer,
dan HyperTerminal)
 Pastikan semua sambungan telah terkoneksi sesuai panduan
 Install terlebih dahulu driver USBasp di laptop (tanya kepada asisten)
 Hubungkan USBasp pada starter-kit AVR pad port yang disediakan,
kemudian hubungkan ke laptop.
 Lakukan panduan praktikum dengan hati-hati dan teliti.

TUGAS III.A.1

Buatlah rangkaian untuk mengukur suhu menggunakan LM35DZ seperti pada


gambar berkut.

Jalankan contoh program di bawah ini. Amati hasilnya dan buatlah flowchart-
nya.

#include <mega8535.h>
#include <delay.h>
#include <string.h>
#include <stdio.h>

unsigned long int hasil;


//Fungsi untuk mengubah input biner menjadi bentuk BCD
unsigned long int bin2BCD (unsigned int input)
{
hasil=((input/10000)*65536)+
(((input%10000)/1000)*4096)+
((((input%10000)%1000)/100)*256)+
(((((input%10000)%1000)%100)/10)*16)+
((((input%10000)%1000)%100)%10);
return(hasil);
}

//Tegangan referensi : pin AREF


//Hasil konversi ADC : right adjusted
#define ADC_VREF_TYPE 0x00
//Fungsi untuk membaca tegangan input ADC (konversi ADC)
4

unsigned int read_adc (unsigned char adc_input)


{
unsigned char temp;
unsigned int data_adc;
ADMUX=adc_input|ADC_VREF_TYPE;
//Start konversi ADC
ADCSRA|=0x40;
//Tunggu sampai konversi ADC selesai (flag ADIF)
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10; //Clear flag ADIF
data_adc=0x0000;
temp=ADCL; //Baca ADC Data Register LOW
data_adc=ADCH;//Baca ADC Data Register HIGH
data_adc<<=8; //Geser data_adc HIGH ke kiri 8 kali
data_adc|=temp; //Hasil konversi ADC= 0000 00xx xxxx xxxx
return data_adc; //Right adjusted
}

flash unsigned char string[]= {"Hasil pada ADC0 : "};


void main(void)
{
unsigned char i,temp,adc_input=0x00;
DDRA=0x00;
//Tegangan referensi ADC : pin AREF
ADMUX=ADC_VREF_TYPE;
//Inisialisai ADC (Enable ADC)
//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)
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x19;

while (1)
{
for (i=0; i<= strlenf(string)-1; i++)
{
temp=string[i];
putchar(temp); //Kirim temp ke USART
}
hasil=read_adc(adc_input); //Baca tegangan pada pin ADC0
hasil=hasil*49; //Hasil pembacaan dikalikan dengan 1 LSB
hasil=bin2BCD(hasil); //Konversi hasil ADC ke format BCD
temp=(hasil>>16 & 0x0F)+0x30; //Ubah format BCD ke ASCII
temp=(hasil>>12 & 0x0F)+0x30;
putchar(temp); //Kiirim ASCII ke USART
temp=(hasil>>8 & 0x0F)+0x30;
putchar(temp);
putchar(',');
temp=(hasil>>4 & 0x0F)+0x30;
putchar(temp);
temp=(hasil & 0x0F)+0x30;
putchar(temp);
putchar(' ');
5

putchar('C');

putchar(0x0D);//Kirim ENTER pada terminal untuk baris


baru
putchar(0x0A);
delay_ms(1000);
}
}
Jika program diatas berhasil dijalankan pembacaan suhu oleh LM35DZ akan
ditampilkan pada HyperTerminal

III.B MENGUKUR TEGANGAN OUTPUT LDR

Persiapan

Sama seperti III.A

TUGAS III.B.1

Buatlah rangkaian untuk mengukur tegangan OUTPUT menggunakan LDR


seperti pada gambar berikut.

Jalankan contoh program di bawah ini, amati hasilnya dan buatlah flowchart-
nya.

#include <mega8535.h>
#include <delay.h>
#include <string.h>
#include <stdio.h>

unsigned long int hasil;


//Fungsi untuk mengubah input biner menjadi bentuk BCD
unsigned long int bin2BCD (unsigned int input)
{
hasil=((input/10000)*65536)+
(((input%10000)/1000)*4096)+
((((input%10000)%1000)/100)*256)+
(((((input%10000)%1000)%100)/10)*16)+
((((input%10000)%1000)%100)%10);
return(hasil);
}
6

//Tegangan referensi : pin AREF


//Hasil konversi ADC : right adjusted
#define ADC_VREF_TYPE 0x00
//Fungsi untuk membaca tegangan input ADC (konversi ADC)
unsigned int read_adc (unsigned char adc_input)
{
unsigned char temp;
unsigned int data_adc;
ADMUX=adc_input|ADC_VREF_TYPE;
//Start konversi ADC
ADCSRA|=0x40; //ADCSRA di-OR-kan dengan 40H
(ADCSRA=ADCSRA|0x40)
//Tunggu sampai konversi ADC selesai (flag ADIF)
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10; //Clear flag ADIF
data_adc=0x0000;
temp=ADCL; //Baca ADC Data Register LOW
data_adc=ADCH; //Baca ADC Data Register HIGH
data_adc<<=8; //Geser data_adc HIGH ke kiri 8 kali
data_adc|=temp; //Hasil konversi ADC= 0000 00xx xxxx
xxxx
return data_adc; //Right adjusted
}

flash unsigned char string[]= {"Hasil pada ADC1 : "};


void main(void)
{
unsigned char i,temp,adc_input=0x01;
DDRA=0x00;
//Tegangan referensi ADC : pin AREF
ADMUX=ADC_VREF_TYPE;
//Inisialisai ADC (Enable ADC)
//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)
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x19;

while (1)
{
for (i=0; i<= strlenf(string)-1; i++)
{
temp=string[i];
putchar(temp); //Kirim temp ke USART
}
hasil=read_adc(adc_input); //Baca tegangan pada pin ADC1
hasil=hasil*49; //Hasil pembacaan dikalikan
dengan 1 LSB
hasil=bin2BCD(hasil); //Konversi hasil ADC ke format BCD
temp=(hasil>>16 & 0x0F)+0x30; //Ubah format BCD ke
ASCII
putchar(temp); //Kiirim ASCII ke USART
putchar(',');
7

temp=(hasil>>12 & 0x0F)+0x30;


putchar(temp);
temp=(hasil>>8 & 0x0F)+0x30;
putchar(temp);
putchar(' ');
putchar('V');
temp=(hasil>>4 & 0x0F)+0x30;
temp=(hasil & 0x0F)+0x30;

putchar(0x0D); //Kirim ENTER pada terminal untuk baris


baru
putchar(0x0A);
delay_ms(1000);
}
}
Jika program diatas berhasil dijalankan pembacaan tegangan pada LDR
akan ditampilkan pada HyperTerminal

TUGAS III.B.2

Modifikasi program sehingga hasil keluaran program pada Tugas III.A.1 dan
Tugas III.B.1 dapat ditampilkan secara bersamaan menggunakan
HyperTerminal
8

APENDIKS A
KIT PRAKTIKUM
AVR Microcontroller

Informasi Pin
9
10

APENDIKS B

HYPERTERMINAL
Di dalam praktikum ini, Anda akan melakukan percobaan komunikasi antara
mikrokontroler AVR ATMega8535 dan komputer melalui protocol RS-232. Pada bagian
komputernya, Anda akan menggunakan program terminal dari Windows XP yaitu
HyperTerminal.

Berikut adalah langkah-langkah menyiapkan HyperTerminal:

 Buka program HyperTerminal yang telah disediakan (tanya asisten)


 Dialog box yang pertama kali muncul adalah “Location Information”. Klik
CANCEL
 Pada dialog box “Connection Desciption”, ketik sebarang karakter pada kolom
“Name:”dan pilih sebarang Icon, lalu klik OK
 Pada dialog box “Connect To”, pilih COM1 pada baris “Connect using”, lalu klik OK
 Pada dialog box “COMx Properties”, lakukan pengaturan seperti di bawah ini,
lalu klik OK.

Bits per second: sesuaikan dengan pengaturan pada AVR

Data bits:

Parity: None

Stop bits:

Flow controls: None

 Klik icon CONNECT untuk memulai komunikasi.

Anda mungkin juga menyukai