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-260μs • 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
0
0
0
0
0
0
0
0
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
0
0
0
0
0
0
0
0
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
0
MUX4
MUX3
MUX2
MUX1
MUX0
0
0
0
0
0
0
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
1
0
0
0
0
0
1
1
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
)