8
Modul 8 ATMEGA16 – Analog Digital Converter (ADC) 1 | Politeknik Jambi 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 0 0 0 0 0 0 0 0 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.

Modul 8 Aplikasi Analog Digital Converter Adc

Embed Size (px)

DESCRIPTION

modul

Citation preview

Page 1: Modul 8 Aplikasi Analog Digital Converter Adc

Modul 8 ATMEGA16 – Analog Digital Converter (ADC)

1 | P o l i t e k n i k J a m b i

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

0 0 0 0 0 0 0 0

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.

Page 2: Modul 8 Aplikasi Analog Digital Converter Adc

Modul 8 ATMEGA16 – Analog Digital Converter (ADC)

2 | P o l i t e k n i k J a m b i

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 ADPS1 ADPS0 Division Factor

0 0 0 1

0 0 1 2

0 1 0 4

0 1 1 8

1 0 0 16

1 0 1 32

1 1 0 64

1 1 1 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

0 0 0 0 0 0 0 0

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

ADCLADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0

Page 3: Modul 8 Aplikasi Analog Digital Converter Adc

Modul 8 ATMEGA16 – Analog Digital Converter (ADC)

3 | P o l i t e k n i k J a m b i

ADLAR = 1

ADC9 ADC8 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADCH

ADCLADC1 ADC0 - - - - - -

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:

Page 4: Modul 8 Aplikasi Analog Digital Converter Adc

Modul 8 ATMEGA16 – Analog Digital Converter (ADC)

4 | P o l i t e k n i k J a m b i

ADTS2 ADTS1 ADTS0 Trigger Source

0 0 0 Free Running (manual)

0 0 1 Analog Comparator

0 1 0 External Interrupr Request 0

0 1 1 Timer/Counter0 Compare Match

1 0 0 Timer/Counter0 Overflow

1 0 1 Timer/Counter Compare Match B

1 1 0 Timer/Counter1 Overflow

1 1 1 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

Page 5: Modul 8 Aplikasi Analog Digital Converter Adc

Modul 8 ATMEGA16 – Analog Digital Converter (ADC)

5 | P o l i t e k n i k J a m b i

AplikasiVoltmeter Digital dan Display LCD

Komponen Yang Digunakan :

RangkaianAplikasiVolmeter Digital

Page 6: Modul 8 Aplikasi Analog Digital Converter Adc

Modul 8 ATMEGA16 – Analog Digital Converter (ADC)

6 | P o l i t e k n i k J a m b i

Program Aplikasi ADC - Voltmeter Digital

#include <mega16.h>

#include <delay.h>

#include <stdlib.h>

#include <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 read_adc();

void init_port();

void init_lcd();

void init_adc();

void kirim_karakter(ubyte);

void 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);

}

}

Page 7: Modul 8 Aplikasi Analog Digital Converter Adc

Modul 8 ATMEGA16 – Analog Digital Converter (ADC)

7 | P o l i t e k n i k J a m b i

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 karakter){

PORTC = RS1E0;

PORTD = karakter;

delay_ms(1);

PORTC = RS1E1;

delay_ms(1);

PORTC = RS1E0;

}

voidkirim_instruksi(ubyte instruksi){

PORTC = RS0E0;

PORTD = instruksi;

delay_ms(1);

PORTC = RS0E1;

delay_ms(1);

PORTC = RS0E0;

}

Page 8: Modul 8 Aplikasi Analog Digital Converter Adc

Modul 8 ATMEGA16 – Analog Digital Converter (ADC)

8 | P o l i t e k n i k J a m b i

Langkah-langkah membaca data ADC (mode free running channel 0) :

1. Atur register ADMUX = 0x00sebagai proses inisialisasi ADC

REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0

0 0 0 0 0 0 0 0

REFS1 =0 dan REFS0 = 0

Voltage Reference :AREF, Internal Vref Turned Off

ADLAR = 0 - - - - - - ADC9 ADC8 ADCH

ADCLADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0

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: 1 => ADC Enable ADSC: 0 =>KonversiBelumdilakukan ADATE: 0 => Auto Trigger disable ADIF: 0 =>Konversibelumdilakukanflag status masih 0 ADIE: 0 =>ADC Interrupt Disable

ADPS2-0: 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:

( )