Anda di halaman 1dari 12

Analog To Digital Converter (ADC) Mikrokontroler AVR ATMEGA32

 
Analog to Digital Converter atau ADC adalah fitur dalam mikrokontroler yang memiliki fungsi
untuk menggonversi (merubah) sinyal masukan analog (dari peranti masukan eksternal) menjadi
sinyal masukan digital. Pada mikrokontroler, ADC dapat digunakan untuk berkomunikasi antara
mikrokontroler dengan peranti-peranti eksternal (sensor) yang memiliki gelombang sinyal
keluaran berupa gelombang sinyal analog (sinus). Gambar 1 merupakan gambar diagram blok
fitur ADC pada mikrokontroler AVR ATMEGA32.

Gambar 1. Diagram blok ADC mikrokontroler AVR ATMEGA32

A. Register Pengatur ADC Mikrokontroler AVR ATMEGA32

Dalam pengaturan ADC melibatkan beberapa register. Register-register tersebut antara lain
sebagai berikut:
1. ADC Multiplexer Selection Register (ADMUX)
2. ADC Control & Status Register A (ADCSRA)
3. ADC Data Register (ADCL dan ADCH)
4. Special Function I/O Register (SFIOR)
B. Spesifikasi ADC Mikrokontroler AVR ATMEGA32

1. Resolusi ADC= 10-bit


2. Akurasi mencapai ± 2LSB
3. Memiliki 8 kanal ADC
4. Rentang tegangan input = 0 volt – Vcc
5. Tegangan referensi internal = 2,56 volt
6. Terdapat 2 mode kerja, yaitu:
a) Konversi tunggal (single conversion)
b) Konversi terus-menerus (free running)
7. Konversi ADC dimulai ketika mendapat auto trigger dari sumber interupsi.
8. Lengkapnya proses konversi ADC dapat menjadi pemicu interupsi.
9. Nilai minimum ADC = 0 volt (GND)
10. Nilai maksimum ADC = tegangan pada pin AREF (minus 1 LSB).
11. Sinyal tegangan input ADC tidak boleh melebihi tegangan referensinya.
12. Hasil konversi ADC disimpan pada pasangan register ADCH dan ADCL.

C. Kode Digital ADC

ADC mengonversi tegangan input analog menjadi bilangan (kode) digital selebar 10-bit.
Rumus kode digital ADC:

1) Resolusi 10-bit.
ADC = (Vinput/Vref) x 1024
2) Resolusi 8-bit.
ADC = (Vinput/Vref) x 256
Contoh perhitungan kode digital ADC:
Misalkan terdapat input kanal ADC beresolusi 8-bit adalah 2,5 volt dan tegangan
referensi yang digunakan Vref internal sebesar 2,56 volt, sehingga kode digital
ADC-nya adalah:
= (2500 mV/2560 mV) x 256
= 250 -  dalam decimal
= FA - dalam heksadesimal
= 11111010 - dalam biner
Catatan:
Akurasi ADC tidak sempurna (toleransi ±2LSB), sehingga kemungkinan kode
digital ADC yang dihasilkan tidak tepat 0xFA, namun bisa di atasnya
(0xFB/0xFC) atau di bawahnya (0xF8/0xF9).
D. Prosedur Pengaturan ADC
Prosedur 1: Pengaturan register ADMUX

Berfungsi untuk:
1. Memilih kanal ADC yang akan digunakan.
bit MUX0, MUX1, MUX2, MUX3, dan MUX4 (lihat tabel 1).
2. Menentukan format data hasil konversi ADCbit ADLAR. Lihat formatnya pada register
ADCH & ADCL
3. Memilih tegangan referensi ADC
bit REFS0 dan REFS1 (lihat tabel 2).

Tabel 1. Memilih kanal ADC

Tabel 2. Memilih tegangan referensi ADC


Register ADCH dan ADCL berfungsi untuk menyimpan data hasil konversi ADC dengan format
yang bergantung pada nilai bit ADLAR (0 atau 1) pada register ADMUX (bit ke-5).

Prosedur 2: Pengaturan register ADCSRA

Berfungsi untuk:
1. Menentukan faktor pembagi (prescaler) frekuensi CPU yang digunakan sebagai clock ADC
bit ADPS0, ADPS1, dan ADPS2 (Lihat tabel 3)
2. Memilih mode operasi ADC
bit ADATE = 1 - Mode single conversion/auto trigger Bit ADATE = 0 - Mode free running
conversion.
Mengaktifkan auto trigger ADC (bit ADATE = 1), sehingga proses pengonversian sinyal
analog dimulai. Sumber trigger diatur menggunakan bit ADTS0, ADTS1, dan ADTS2 pada
register SFIOR. Sumber trigger tergantung pada pengaturan bit ADATE pada register
ADCSRA.
3. Mengaktifkan ADC (bit ADEN = 1)
4. Memulai proses konversi (start conversion) ADC (bit ADSC = 1)
Jika mode single conversion: set ADSC tiap kali akan mengonversi.
Jika mode free running: set ADSC untuk memulai awal konversi. Jika ADC beroperasi
dengan mode single conversion dan menggunakan interupsi, maka:
1. Aktifkan interupsi ADC (bit ADIE = 1)
2. Aktifkan interupsi global mikrokontroler (bit-I pada register SREG = 1) atau dengan
perintah - sei ();
3. Buat fungsi layanan interupsi:
ISR(ADC_vect)
{
   ……program yang akan dikerjakan…
 }

Gambar 2. Prescaler ADC

Tabel 3. Pengaturan prescaler frekuensi clock untuk ADC


Register SFIOR berfungsi untuk menentukan sumber auto trigger konversi ADC, yaitu dengan
menentukan nilai dari bit ADTS0, ADTS1, dan ADTS2

Tabel 4. Pengaturan nilai bit-bit pemilih sumber auto trigger ADC

Catatan untuk register SFIOR:


Efek pengaturan ADTS0, ADTS1, dan ADTS2 bergantung pada pengaturan bit ADATE pada
register ADCSRA (bit ke-5).

Jika ADATE = 1, maka sumber auto trigger akan menjadi pemicu otomatis proses konversi
ADC.
Jika ADATE = 0, maka pengaturan bit ADTS0 – ADTS2 tidak akan berdampak apa-apa pada
sistem.

E. Mode Operasi ADC

1. Mode Operasi ADC - Single Conversion

 Konversi dilakukan untuk sekali pembacaan sampel sinyal input.


 Jika ingin membaca lagi harus melakukan sampel sinyal input lagi, sehingga kita dapat
mengonversi sinyal tegangan input ketika dibutuhkan saja.
 Konversi tunggal akan dimulai ketika bit-ADSC pada register ADCSRA di-set. Bit
tersebut akan tetap set sampai satu kali konversi selesai (complete). Setelah konversi selesai,
maka secara otomatis bit-ADSC akan clear.
Gambar 3. Timing diagram ADC, first conversion (single conversion mode)

Gambar 4. Timing diagram ADC single conversion mode

2. Mode Operasi ADC - Single Conversion (Auto triggered)

 Single conversion dengan auto trigger adalah alternatif cara aktivasi konversi ADC.
 Pada mode auto trigger, proses konversi ADC dapat dipicu secara otomatis oleh beberapa
variasi sumber pemicunya (trigger).
 Mode ini akan aktif dan proses konversi ADC dimulai ketika:
1) Bit ADATE pada register ADCSRA di-set.
2) Sumber pemicu auto trigger dipilih.
    (mengatur bit ADTS0, ADTS1, dan ADTS2 pada register SFIOR)
3) Ada transisi (edge) sinyal positif (0 ke 1) dari sumber trigger.
4) Faktor pembagi clock (prescaler) pada register ADCSRA di atur (ADSP0/1/2).
5) Bit ADSC pada register ADCSRA di-set.
 Proses konversi baru tidak akan terjadi jika sinyal trigger masih set ketika proses
konversi ADC selesai (complete).
 Jika terjadi transisi (edge) sinyal positif lain saat proses konversi berlangsung, maka edge
sinyal tersebut akan diabaikan.

Gambar 5. Logika auto-trigger ADC

Gambar 6. Timing diagram auto-trigger ADC

3. Mode Operasi ADC - Free Running


 Penggunaan flag interupsi ADC sebagai sumber trigger membuat proses konversi ADC
baru dimulai segera setelah proses konversi yang sedang berjalan selesai (complete).
 Pada kondisi tersebut, ADC bekerja pada mode free running conversion.
 Pada mode free running, konversi dilakukan secara terus-menerus (ADC membaca
sample tegangan input kemudian dikonversi dan hasilnya disimpan ke dalam register ADCH-
ADCL secara terus-menerus).
 Proses konversi ADC harus dimulai dengan men-set bit ADSC pada register ADCSRA.
 Pada mode free running, ADC bekerja secara independen (tidak bergantung) dari flag
interupsi ADC. Apakah ADIF set atau clear, maka tidak akan mempengaruhi operasi ADC.

Gambar 7. Timing diagram ADC free running conversion mode

F. Contoh Program Pengaturan ADC


Gambar 8. Interface antara AVR ATMEGA32 - Vr (8x) - LED (8x)

1. Menggunakan software IDE WinAVR

Contoh:

Dengan menggunakan AVR trainer pada gambar 8, akan dibuat program yang bertujuan untuk
mengatur nyala terang atau redup LED (dihubungkan pada PORTD) dengan menggunakan
sebuah resistor variable (trimpot) yang dihubungkan pada PORTA.0 yang merupakan kanal
ADC0 mikrokontroler AVR ATMEGA32. Program ini menggunakan interupsi ADC.

#include <avr/io.h>
#include <avr/interrupt.h>

// Rutin layanan intrupsi - fungsi interupsi ADC


// Kerjakan rutin ini ketika terjadi interupsi ADC
ISR(ADC_vect)
{
      PORTC = ADCH;           // Output ADCH pada PortC
      ADCSRA |= 1<<ADSC;      // Mulai mengonversi
}

int main(void)
{
      DDRC = 0xFF;        // PortC sebagai output
      DDRA = 0x00;        // PortA sebagai input
                          // PA0 is ADC0 input

      ADCSRA = 0x8F;      // Aktifkan ADC & fitur interupsinya


                          // pre-scale clock = clk/128
      ADMUX = 0xE0;       // Vref internal = 2.56V | format data
                          // rata kiri | ADC0 sebagai kanal ADC

      sei();              // Aktifkan global interupsi


      ADCSRA |= 1<<ADSC;  // Mulai mengonversi

      while(1);           // Tunggu konversi ADC & loop


}

2. Menggunakan software IDE BASCOM-AVR

Contoh:

Dengan menggunakan AVR trainer pada gambar 8, akan dibuat program yang bertujuan untuk
mengatur nyala terang atau redup LED (dihubungkan pada PORTD) dengan menggunakan
resistor variable (trimpot) yang dihubungkan pada PORTA yang merupakan kanal-kanal ADC
mikrokontroler AVR ATMEGA32.

$regfile = "m32def.dat"
$crystal = 12000000
Config Porta = Input
Config Portd = Output

Config Adc = Single , Prescaler = Auto , Reference = Avcc


Start Adc

Dim Data_adc As Word


Do
   Data_adc = Getadc(0)
   Portd.0 = Data_adc

   Data_adc = Getadc(1)
   Portd.1 = Data_adc

   Data_adc = Getadc(2)
   Portd.2 = Data_adc

   Data_adc = Getadc(3)
   Portd.3 = Data_adc

   Data_adc = Getadc(4)
   Portd.4 = Data_adc

   Data_adc = Getadc(5)
   Portd.5 = Data_adc

   Data_adc = Getadc(6)
   Portd.6 = Data_adc

   Data_adc = Getadc(7)
   Portd.7 = Data_adc
Loop

Anda mungkin juga menyukai