OLEH:
BRAMASTO ADI NUGROHO
1310131042
DOSEN:
EPYK SUNARNO ,S.ST, MT
Pada sebuah mikrokontroller yang telah modern seperti saat ini, bukan hal
yang mustahil apabila kita ingin mengubah suatu besaran analog menjadi besaran
digital. Fitur ini dinamakan ADC atau Analog To Digital Converter. Komponen ini
mutlak diperlukan apabila mikrokontroller dihubungkan pada sebuah sensor yang
keluarannya mempunyai besaran analog. Sedangkan data yang dapat dibaca dan diolah
oleh sebuah mikrokontroller adalah data digital atau besaran digital. Proses konversi
atau perubahan data analog menjadi digital dapat kita tampilkan pada sebuah LCD. Hal
ini bertujuan agar user dapat lebih mudah dalam memantau proses konversi yang
sedang terjadi. Mikrokontroller yang digunakan ialah ATMEGA 16.
II.PRINSIP KERJA
Variabel Resistor memliki 3 kaki atau pin dimana pin yang berada ditengah
merupakan data yang terhubung pada PORTA.0 ATMEGA16 yang merupakan PORT
untuk input ADC. Sedangkan 2 kaki lain dari Variabel Resistor terhubung pada VCC dan
GND. Apabila VCC atau sumber tegangan sebesar 5 V, maka kaki output pada Variabel
Resistor akan mengeluarkan tegangan 0 5 V. Nilai keluaran tersebut bergantung pada
nilai resistor yang dapat kita atur pada pemutar yang terdapat pada variabel resistor.
Tegangan pada kaki ouput Variabel Resistor yang masuk pada PORTA.0 mikrokontroller
akan dibandingkan dengan tegangan referensi yang digunakan oleh ADC tersebut.
Setelahnya, nilai perbandingan tersebut akan dikalikan dengan bit yang digunakan pada
ADC tersebut.
Contoh :
Tegangan input pada PORTA.0 ialah 2 V. Tegangan referensi yang digunakan oleh ADC
ialah 5 V. Sedangkan ADC yang digunakan 8 bit. Maka nilai desimal hasil konversi ialah
Vin / Vref x Jumlah Bit = 2 / 5 x 255 = 102 (desimal) 01100100 (biner)
Nilai desimal hasil konversi tersebut akan diubah menjadi sebuah karakter dan disimpan
pada variabel array bertipe char. Dari variabel array char tersebut akan ditampilkan pada
sebuah LCD.
Arsitektur ATMega16
Mikrokontroler ini menggunakan arsitektur Harvard yang memisahkan memori program
dari memori data, baik bus alamat maupun bus data, sehingga pengaksesan program dan
data dapat dilakukan secara bersamaan (concurrent), adapun blog diagram arsitektur
ATMega16. Secara garis besar mikrokontroler ATMega16 terdiri dari :
1.
2.
3.
4.
5.
6.
7.
Dua buah 8-bit timer/counter dengan prescaler terpisah dan mode compare
Satu buah 16-bit timer/counter dengan prescaler terpisah, mode compare,
capture
Real time counter dengan osilator tersendiri
Empat kanal PWM dan Antarmuka komparator analog
8 kanal, 10 bit ADC
Byte-oriented Two-wire Serial Interface
Watchdog timer dengan osilator internal
dan mode
Port B (PB7..PB0)
Pin B adalah suatu pin I/O 8-bit dua arah dengan resistor internal pull-up (yang dipilih
untuk beberapa bit). Pin B output buffer mempunyai karakteristik gerakan simetris
dengan keduanya sink tinggi dan kemampuan sumber. Sebagai input, Pin B yang secara
eksternal ditarik rendah akan arus sumber jika resistor pull-up diaktifkan. Pin B adalah
tri-stated manakala suatu kondisi reset menjadi aktif, sekalipun waktu habis.
Port C (PC7..PC0)
Pin C adalah suatu pin I/O 8-bit dua arah dengan resistor internal pull-up (yang dipilih
untuk beberapa bit). Pin C output buffer mempunyai karakteristik gerakan simetris
dengan keduanya sink tinggi dan kemampuan sumber. Sebagai input, pin C yang secara
eksternal ditarik rendah akan arus sumber jika resistor pull-up diaktifkan. pin C adalah
tri-stated manakala suatu kondisi reset menjadi aktif, sekalipun waktu habis
Port D (PD7..PD0)
Pin D adalah suatu pin I/O 8-bit dua arah dengan resistor internal pull-up (yang dipilih
untuk beberapa bit). Pin D output buffer mempunyai karakteristik gerakan simetris
dengan keduanya sink tinggi dan kemampuan sumber. Sebagai input, pin D yang secara
eksternal ditarik rendah akan arus sumber jika resistor pull-up diaktifkan. Pin D adalah
tri-stated manakala suatu kondisi reset menjadi aktif, sekalipun waktu habis.
Proses inisialisasi ADC meliputi proses penentuan clock, tegangan referensi, formal data
keluaran, dan modus pembacaan. Register-register yang perlu diatur adalah sebagai
berikut:
8 Single-ended Saluran
2 Differential Saluran dengan Gain Programmable pada 1x, 10x, atau 200x
- Byte-oriented Antarmuka Dua-kawat Serial
- Serial USART Programmable
- Master / Slave SPI Serial Interface
- Timer Programmable Watchdog On-chip dengan Oscillator terpisah
- Komparator Analog On-chip
Fitur Khusus Mikrokontroler
- Power-on Reset dan Programmable Brown-out Detection
- RC Oscillator internal yang Dikalibrasi
- Interrupt Sumber Eksternal dan Internal
- Enam Sleep Mode: Idle, ADC Noise Reduction, Power-save, Power-down, Standby
dan siaga diperpanjang
I / O dan Paket
- 32 Programmable I / O
- 40-pin PDIP, 44-lead TQFP, dan 44-pad QFN / MLF
Operasi Tegangan
- 2.7 - 5.5V untuk ATmega16L
- 4.5 - 5.5V untuk ATmega16
Kelas Kecepatan
- 0 - 8 MHz untuk ATmega16L
- 0 - 16 MHz untuk ATmega16
Konsumsi Daya @ 1 MHz, 3V, dan 25 C untuk ATmega16L
- Aktif: 1,1 mA
- Diam Mode: 0,35 mA
- Power-down Mode: <1 p="p">
A.
Alamat
Peralatan
Keterangan
PA.0
Variabel Resistor
Input
PC.0-7
LCD 16x2
Output
while (1)
data = read_adc(0);
tegangan = (float)data*5/255;
lcd_gotoxy(0,0);
sprintf(temp,"Desimal = %3u",data);
lcd_puts(temp);
lcd_gotoxy(0,1);
lcd_puts("Tegangan=");
lcd_gotoxy(10,1);
ftoa(tegangan,2,temp1);
lcd_puts(temp1);
lcd_gotoxy(15,1);
lcd_putchar('V');
END
VIII. PROGRAM
#include <mega16.h>
#include <stdlib.h>
#include <stdio.h>
#include <delay.h>
// Alphanumeric LCD functions
#include <alcd.h>
#define ADC_VREF_TYPE 0x60
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
// Declare your global variables here
void main(void)
{
char temp[33];
char temp1[33];
int data;
float tegangan;
// Declare your local variables here
PORTA=0x00;
DDRA=0x00;
PORTC=0x00;
DDRC=0x00;
// ADC initialization
// ADC Clock frequency: 750,000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: ADC Stopped
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 16
lcd_init(16);
while (1)
{
// Place your code here
data=read_adc(0);
tegangan =(float)data*5/255;
lcd_gotoxy(0,0);
sprintf(temp,"Desimal = %3u",data);
lcd_puts(temp);
lcd_gotoxy(0,1);
lcd_puts("Tegangan=");
lcd_gotoxy(10,1);
ftoa(tegangan,2,temp1);
lcd_puts(temp1);
lcd_gotoxy(15,1);
lcd_putchar('V');
delay_ms(100);
}
}
IX. SIMULASI dan OUTPUT