TEKNOLOGI SENSOR
PERCOBAAN 1
Oleh :
Muhamad Sulton Endi Velani
3110191018
Teknik Mekatronika 3A
I. TUJUAN
a. Mahasiswa dapat mengetahui fungsi rangkaian Analog to Digital Converter
b. Mahasiswa dapat mengetahui prinsip kerja rangkaian Analog to Digital Converter
c. Mahasiswa dapat mengetahui karakteristik Analog to Digital Converter
d. Mahasiswa dapat memahami cara menggunakan ADC pada mikrokontroler
e. Mahasiswa dapat memahami cara menampilkan data ADC pada mikrokontroler
II. PENDAHULUAN
Analog to Digital Converter (ADC) adalah sebuah perangkat elektronika yang
berfungsi untuk mengubah sinyal analog (kontinyu) menjadi sinyal digital (diskrit).
ADC dapat berbentuk suatu modul, rangkaian elektronika maupun suatu chip IC,
atau pheriperal yang tertanam dalam sebuah mikrokontroler. ADC berfungsi untuk
menjembatani pemrosesan sinyal analog oleh sistem digital.
Karakteristik ADC
1. Kecepatan Sampling
2. Resolusi Data
Resolusi ADC menentukan ketelitian nilai hasil konversi ADC. Hal ini
menunjukkan seberapa besar data tersebut dicacah dalam jangkah (range)
yang diberikan. Sebagai contoh: ADC 8 bit akan memiliki output 8 bit data
digital, ini berarti sinyal input dapat dinyatakan dalam 255 (2n – 1) nilai
diskrit. ADC 12 bit memiliki 12 bit output data digital, ini berarti sinyal input
dapat dinyatakan dalam 4096 nilai diskrit. Dari contoh diatas ADC 12 bit
akan memberikan ketelitian nilai hasil konversi yang jauh lebih baik daripada
ADC 8 bit.
= (102/255) * 5
= 2 Volts
ADC Simultan atau biasa disebut flash converter atau parallel converter.
Input analog Vin yang akan diubah ke bentuk digital diberikan secara
simultan pada sisi + pada komparator tersebut, dan input pada sisi –
tergantung pada ukuran bit converter. Ketika V in melebihi tegangan input –
Misal :
Vin diberi sinyal analog 3 Volt, maka output dari C7=0, C6=0, C5=0, C4=1,
C3=1, C2=1, C1=1, sehingga didapatkan output ADC yaitu 100 2
Ketika sinyal input Vin lebih rendah dari keluaran DAC, maka comparator
akan mengeluarkan logika 1 yang membuat sinyal clock dari clock generator
masuk kedalam rangkaian counter. Pada saat yang sama keluaran dari
rangkaian counter masuk ke DAC unntuk diubah menjadi tegangan analog
yang mereprensentasikan keluaran data counter saat itu. Selama tegangan
dari DAC lebih rendah dari tengangan input Vin, maka counter akan terus
menghitung. Ketika tegangan Vin sudah sama/sedikit lebih rendah dengan
tegangan dari DAC, maka kondisi luaran komparator akan berubah dan akan
menghentikan sinyal clock dan output dari counter akan dicapture oleh
rangkaian latch (D Flip-Flop) dan data hasil konversi akan keluar pada bagian
output. Misal akan dikonversi tegangan analog 2 volt, dengan
mengasumsikan counter reset, sehingga keluaran pada DAC juga 0 volt.
Apabila konversi dimulai maka counter akan naik dari 0000 ke 0001 karena
mendapatkan pulsa masuk dari Clock oscillator dimana saat itu keluaran
Comparator = 1, karena mendapatkan kombinasi biner dari counter 0001
maka tegangan keluaran DAC naik dan dibandingkan lagi dengan tegangan
masukan demikian seterusnya nilai counter naik dan keluaran tegangan DAC
juga naik hingga suatu saat tegangan masukan dan tegangan keluaran DAC
sama yang mengakibatkan keluaran komparator = 0 dan Clock tidak dapat
masuk. Nilai counter saat itulah yang merupakan hasil konversi dari analog
yang dimasukkan. Kelemahan dari counter tersebut adalah lama, karena
harus melakukan trace mulai dari 0000 hingga mencapai tegangan yang
sama sehingga butuh waktu.
3.
Analo cv
g Digital Output (8x
Out LED)
ISP
I/O CONNECTO
R
PORT
LCD
16x2
Modul Praktikum yang digunakan menggunakan Chip mikrokontroler AT
Mega 16 atau AT Mega 8535. Modul ini dilengkapi dengan Digital dan Analog I/O
serta LCD text.
d. Analog Output terhubung ke OC1A dan OC1B yaitu PWM yang dikeluarkan ke
timer/counter 1. Dari PWM tersebut akhirnya dimasukkan ke rangkaian LPF
untuk mengubah sinyal PWM ke tegangan analog
V. PERALATAN
1. Modul Mikrokontroller Simulasi
2. Komputer dengan IDE (Code Vision AVR)
VI. PROSEDUR PERCOBAAN
1. Konversi Kanal Tunggal
a) Buat di proteus tangkaian seperti berikut ini. Pada rangkaian ini
menggunakan atmega 16. PORTB sebagai output 8 bit ke masing masing LED
kemunian input berupa potensiometer dikoneksikan ke ADC
16%
b) Dalam praktikum ini akan ditampilkan data hasil konversi ADC kanal 0 pada LED
dengan langkah pertama membuka program codeVision AVR pada PC.
o) Silahkan lakukan setting pada program file arahkan ke file .hex dari program
anda yang telah buat
p) Kemudian click OK dan running simulasi anda
q) Ubah dan catat data ADC untuk posisi VR paling kiri (0%), tengah (50%) dan
paling kanal(100%)
2. Konversi Multi Tunggal
a) Dalam percobaan ini akan dilakukan konversi 8 kanal ADC dan ditampilkan
pada LCD. Terlebih dahulu buatlah simulasinya menggunakan proteus.
R
1
R R RV8 RV7 RV6
U V1 V2 RV5 RV4 RV3
1
VDD
VSS
VEE
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
E
13
14
10
11
12
1
2
3
4
5
6
7
8
9
16%
/* adytdarma created
*/
#ifndef _myLCD_
#define _myLCD_ void tampil3(int xxx)
{
lcd_putchar((xxx/100)+48);
lcd_putchar(((xxx/10)%10)+48);
lcd_putchar(((xxx/1)%10)+48);
}
#pragma used-
#endif
k) Selanjutnya simpan file ini ke folder sorce Anda dan beri namamyLCD.h
l) Kembali ke file file yang lama dan tambahkan file LCD.h tadi ke project ADC
m) Tampilankan data konversi pada dari kanal 0 sampai dengan 7 ke LCD pada
loop while(1)
n) Build Project dengan menekan tombol Ctrl+F9
o) Buka file hex hasil build dari program (arahkan pada folder dimana Anda
menyimpan file dari CodeVisionAVR)
p) Lakukan configure file .hex pada rangkaian simulasi anda.
q) Tun simulasi anda. maka LCD akan menampilkan nilai biner dari hasil
konversi ADC kanal 0 sampai dengan 7 dengan dalam bentuk desimal nilai
dari 000 sampai dengan 255.
r) Ubah dan catat data ADC untuk posisi VR paling kiri, tengah dan paling
kanan dari masing- masing VR
Tugas
1. Dari praktikum A, ubah resolusi konversi yang digunakan dari 8 bit ke 10 bit, dan apa
yang terjadi dengan tampilan LED dan perubahan posisi VR.Untuk mengubah resolusi
ADC, uncheck menu Use 8 bit dari c
2. Tampilkan data konversi tersebut (tugas 1) ke LCD (data ADC adalah 10 bit pada range 0
s/d 1023)
1. Ketika resolusi konversi dirubah ke 10 bit, yang terjadi LED menyala tetap menampilkan
8 bit karena PORTB hanya dapat menampilkan 8 bit terkecil, sedangkan 2 bit yang lain
tidak bisa ditampilkan. Pada gambar dibawah ini VR di set pada 50%
3. List Program :
/*******************************************************
This program was created by the
CodeWizardAVR V3.12 Advanced
Automatic Program Generator
© Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
void main(void)
{
// Declare your local variables here
// Port C initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) |
(0<<PORTC1) | (0<<PORTC0);
// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) |
(0<<PORTD1) | (0<<PORTD0);
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0<<AS2;
TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;
// USART initialization
// USART disabled
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) |
(0<<TXB8);
// ADC initialization
// ADC Clock frequency: 86.400 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: ADC Stopped
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) |
(1<<ADPS0);
SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
// SPI initialization
// SPI disabled
SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);
while (1)
{
// Place your code here
lcd_gotoxy(0,0);
tampil3(adc_data[0]);
if(adc_data[0]>400){
PORTC = 0xff;
}
else if (adc_data[0]<=400){
PORTC = 00000000;
}
}