You are on page 1of 8

Modul 8 ATMEGA16 Analog Digital Converter (ADC)

MODUL 8
Analog Digital Converter (ADC)
AVR ATMega16 merupakan tipe AVR yang telah dilengkapi dengan 8 saluran ADC internal
dengan resolusi 10 bit. Dalam mode operasinya, ADC dapatdi konfigurasi, baik single ended
input maupun differential input. Selain itu, ADC ATMega16 memiliki konfigurasi pewaktuan,
tegangan referensi, mode operasi, dan kemampuan filter derau (noise) yang amat fleksibel
sehingga dapat dengan mudah disesuaikan dengan kebutuhan dari ADC itu sendiri. ADC pada
ATMega16 memiliki fitur-fitu rantara lain :
Resolusi mencapai 10-bit
Akurasi mencapai } 2 LSB
Waktu konversi 13-260s
8 saluran ADC dapat digunakan secara bergantian
Jangkauan tegangan input ADC bernilai dari 0 hingga VCC
Disediakan 2,56V tegangan referensi internal ADC
Mode konversi kontinyu atau mode konversi tunggal
Interupsi ADC complete
Sleep Mode Noise canceler
Proses inisialisasi ADC meliputi proses penentuan clock, tegangan referensi, formal data
keluaran, dan modus pembacaan. Register-register yang perlu diatur adalah sebagai berikut:
Register Terkait ADC
ADC Control and Status Register A ADCSRA
ADCSRA
ADEN

ADSC

ADATE

ADIF

ADIE

ADPS2 ADPS1 ADPS0

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

Initial
Value

Keterangan
ADEN: ADC Enable
1 = adc enable, 0 = adc disable
ADSC: ADC Start Conversion
1 = mulai konversi, 0 = konversi belum dilakukan
ADATE: ADC Auto Trigger Enable
1 = auto trigger diaktifkan, trigger berasal dari sinyal yang dipilih
(set pada trigger SFIOR bit ADTS). ADC akan start konversi pada edge positif sinyal trigger.
1|P o litek nik Ja mbi

Modul 8 ATMEGA16 Analog Digital Converter (ADC)

ADIF: ADC Interrupt Flag


disetke 1, jika konversi ADC selesai dan data register ter-update. ADIF akan diset 1 secara
hardware jika Interrupt ADC atau bit ADIE di aktifkan.
ADIE: ADC Interrupt Enable
diset 1 dan Interrupt ADC akan aktif jika Bit I (Interrupt Enable) pada register SREG diaktifkan
atau dapat menggunakan subrutinsei() untuk meng-enablekan Interrupt.
ADPS2:0: ADC Prescaler Select Bits
Bit pengatur clock ADC, faktorpembagi 0 7 = 2, 4, 8, 16, 32, 64, 128.
ADPS2
0
0
0
0
1
1
1
1

ADPS1
0
0
1
1
0
0
1
1

ADPS0
0
1
0
1
0
1
0
1

Division Factor
1
2
4
8
16
32
64
128

ADMUX (ADC Multiplexer)


ADMUX

REFS1 REFS0 ADLAR

MUX4

MUX3

MUX2

MUX1

MUX0

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

Initial
Value

REFS1:0: Reference Selection Bits


REFS1
REFS2
Voltage Reference Selection
0
0
AREF, Internal Vref Turned Off
0
1
VCC with external capacitor at AREF Pin
1
0
Reserved
1
1
Internal 2.56 V Voltage Reference With External
Capasitor at Aref
ADLAR: ADC Left Adjust Result
Untuk setting format data hasil konversi ADC.
ADLAR = 0
-

ADC9

ADC8

ADCH

ADC7

ADC6

ADC5

ADC4

ADC3

ADC2

ADC1

ADC0

ADCL

2|P o litek nik Ja mbi

Modul 8 ATMEGA16 Analog Digital Converter (ADC)

ADLAR = 1
ADC9

ADC8

ADC7

ADC6

ADC5

ADC4

ADC3

ADC2

ADCH

ADC1

ADC0

ADCL

MUX4:0: ADC Channel Selection

Special Function IO Register-SFIOR


SFIOR merupakan register 8 bit pengatur sumber picu konversi ADC,
Apakah dari sumber picu eksternal atau dari sumber picu internal, susunannya seperti yang
terlihat pada gambar berikut:

ADTS2 ADTS1 ADTS0

ADHSM

ACME

PUD

PSR2

PSR10

ADTS[0...2] : Pemilihan trigger (pengatur picu) untuk konversi ADC, bit-bit ini akan berfungsi jika
bit ADATE pada register ADCSRA bernilai 1. Konfigurasi bit ADTS[0...2] dapat dilihat pada table
berikut:

3|P o litek nik Ja mbi

Modul 8 ATMEGA16 Analog Digital Converter (ADC)


ADTS2
0
0
0
0
1
1
1
1

ADTS1
0
0
1
1
0
0
1
1

ADTS0
0
1
0
1
0
1
0
1

Trigger Source
Free Running (manual)
Analog Comparator
External Interrupr Request 0
Timer/Counter0 Compare Match
Timer/Counter0 Overflow
Timer/Counter Compare Match B
Timer/Counter1 Overflow
Timer/Counter1 Capture Event

Register ADCW
merupakan register data yang menyimpan data hasil konversi ADC.
Untuk memilih channel ADC mana yang digunakan(single ended atau diferensial),dapat
dilakukan dengan mengatur nilai MUX4 :0. Misalnya channel ADC0 sebagai input ADC,
makaMUX4 :0 diberinilai 00000B, informasi lebih lengkap dapat di lihat pada datasheet.
Tegangan referensi ADC dapat dipilih antara lain pada pin AREF, pin AVCC atau menggunakan
tegangan referensi internal sebesar 2.56V.
Setelah konversi selesai (ADIF high), hasil konversi dapat diperoleh pada register hasil (ADCL,
ADCH). Untuk konversi single ended, hasilnya ialah

Dimana VIN ialah tegangan pada input yang dipilih dan VREF merupakan tegangan referensi. Jika
hasil ADC =000H, maka menunjukkan tegangan input sebesar 0V, jika hasil ADC=3FFH
menunjukkan tegangan input sebesar tegangan referensi dikurangi 1 LSB.
Sebagai contoh, jika diberikan VIN sebesar 0.2V dengan VREF 5V, makahasil konversi ADC ialah
41

4|P o litek nik Ja mbi

Modul 8 ATMEGA16 Analog Digital Converter (ADC)


AplikasiVoltmeter Digital dan Display LCD
Komponen Yang Digunakan :

RangkaianAplikasiVolmeter Digital

5|P o litek nik Ja mbi

Modul 8 ATMEGA16 Analog Digital Converter (ADC)


Program Aplikasi ADC - Voltmeter Digital
#include
#include
#include
#include

<mega16.h>
<delay.h>
<stdlib.h>
<string.h>

typedef unsigned char ubyte;


typedef unsigned int uint;
ubyte adc_channel = 0;
ubyte RS0E0 = 0b00000000;
ubyte RS0E1 = 0b00000100;
ubyte RS1E0 = 0b00000001;
ubyte RS1E1 = 0b00000101;
ubyte str_adc[16];
float vin;
float vref = 5;
uint
void
void
void
void
void

read_adc();
init_port();
init_lcd();
init_adc();
kirim_karakter(ubyte);
kirim_instruksi(ubyte);

void main()
{
Uint adc =0;
ubyte i = 0;
init_port();
init_lcd();
init_adc();
while(1){
adc = read_adc();
vin = (float)adc * vref/1024;
ftoa(vin,2,str_adc);
kirim_instruksi (0x01);
kirim_instruksi (0x80);
for(i = 0; i <strlen(str_adc);i++){
if (str_adc[i]!=0){
kirim_karakter(str_adc[i]);
}
}
kirim_karakter(' ');
kirim_karakter('v');
kirim_karakter('o');
kirim_karakter('l');
kirim_karakter('t');
delay_ms(100);
}
}
6|P o litek nik Ja mbi

Modul 8 ATMEGA16 Analog Digital Converter (ADC)

uintread_adc()
{
delay_ms(5);
// Start the AD conversion
ADCSRA|=0b01000000;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0b00010000; //ADIF diset1 , conversion stop
return ADCW;
}
voidinit_port(){
DDRB = 0xFF;
DDRC = 0xFF;
DDRD = 0xFF;
DDRA = 0x00;
}
voidinit_adc(){
ADMUX = 0b00000000 | adc_channel ;
ADCSRA = 0b10000011;
}
voidinit_lcd(){
kirim_instruksi(0x01);
kirim_instruksi(0x38);
kirim_instruksi(0x06);
kirim_instruksi(0x0C);
kirim_instruksi(0x80);
}
voidkirim_karakter(ubyte
PORTC = RS1E0;
PORTD = karakter;
delay_ms(1);
PORTC = RS1E1;
delay_ms(1);
PORTC = RS1E0;
}

karakter){

voidkirim_instruksi(ubyte instruksi){
PORTC = RS0E0;
PORTD = instruksi;
delay_ms(1);
PORTC = RS0E1;
delay_ms(1);
PORTC = RS0E0;
}

7|P o litek nik Ja mbi

Modul 8 ATMEGA16 Analog Digital Converter (ADC)


Langkah-langkah membaca data ADC (mode free running channel 0) :
1. Atur register ADMUX = 0x00sebagai proses inisialisasi ADC
REFS1 REFS0 ADLAR
0

MUX4

MUX3

MUX2

MUX1

MUX0

REFS1 =0 dan REFS0 = 0


Voltage Reference :AREF, Internal Vref Turned Off
ADLAR = 0
-

ADC9

ADC8

ADCH

ADC7

ADC6

ADC5

ADC4

ADC3

ADC2

ADC1

ADC0

ADCL

MUX4:MUX0 = 00000
ADC single Ended Input ADC channel 0
2. Kemudian atur nilai register ADCSRA = 0b10000011
ADEN

ADSC

ADATE

ADIF

ADIE

ADPS2

ADPS1

ADPS0

ADEN:
ADSC:
ADATE:
ADIF:
ADIE:
ADPS2-0:

1 => ADC Enable


0 =>KonversiBelumdilakukan
0 => Auto Trigger disable
0 =>Konversibelumdilakukanflag status masih 0
0 =>ADC Interrupt Disable
011 =>ADC Prescalerfactor pembagi clock = 8

3. Atur bit ADSC (bit 6)pada register ADCSRA menjadi logika 1 untuk memulai
konversi data ADC , proses ini dilakukan menggunakan perintahberikut :
ADCSRA |= 0b01000000 ( register ADCSRA di-OR kandengan 0b01000000)
4. Tunggu sampai bit ADIF (bit 4) berubah menjadi logika 1 sebagai tanda konversi
data ADC selesai.
5. Setelah itu set bit ADIF(bit 4) ke logika 1 agar konversi data berhenti (stop).
Proses ini dilakukan dengan perintahberikut:
ADCSRA |= 0b00010000 ( register ADCSRA di-OR kandengan 0b00010000)
6. Kemudian data hasil konversi (10 bit) akan tersimpan pada register ADCW
7. Nilaitegangan analog dapat diperoleh dengan menggunakan rumus berikut:

8|P o litek nik Ja mbi

You might also like