Subscribe For Free Updates!

We'll not spam mate! We promise.

Thursday 5 February 2015

ADC (Analog to Digital Conventer)

ADC (Analog to Digital Conventer) merupakan sebuah system yang berupa rangkaian elektronik dengan fungsi untuk mengubah sinyal/tegangan analog menjadi sinyal atau tanda-tanda digital. Pengubahan ini bertujuan untuk mendapatkan data-data digital berupa hexa atau biner, sehingga microprosesor dapat mengolah data tersebut. Data-data digital yang hasil perubahan ADC merupakan representasi dari masukan yang berupa data tegangan analog.

ADC dalam pembahasan kali ini focus pada ADC yang dimiliki mikrokontroller keluarga AVR. ADC mikrokontroller keluarga AVR yang dimiliki merupakan ADC 8bit. Dengan tegangan referensi yang dapat diatur oleh keinginan programmer. Setiap tipe mikrokontroller AVR dengan seri ATMega xxxx memiliki fasilitas ADC yang dapat programmer digunakan. Setiap tipe memiliki jumlah ADC yang berbeda (lihat pada data sheet), akan tetapi memiliki resolusi yang sama yaitu 8bit. Berikut ilustrasi dari ADC micro yang dalam IC menjadi satu dengan system.
 

Gb.1 fasilitas konfirgurasi ADC pada microkotroller ATMega16

Untitled-2

Gb.2 blog konfigurasi internal ADC microkontroller

Berdasarkan gambar terdapat terminal yang penting dan harus diperhatikan dalam menggunakan fasilitas ADC. Terminal/PIN/Kaki IC tersebut diberikan nama AVCC dan ARef. AVCC merupakan tegangan yang digunakan untuk kerja rangkaian yang ada didalam mikrokontroler. Pin tersebut agar dapat bekerja secara maksimal diberikan tegangan +5VDC. Sedangkan pin ARef merupakan tegangan referensi yang digunakan sebagai tegangan pembanding dan acuan ADC micro dengan mengkonversikan tegangan analog menjadi digital. Tegangan Aref dapat disesuaikan dengan kebutuhan akan kerapatan data dalam pengkorvensiannya. Semakin kecil tegangan referensi maka resolusi pembacaan ADC semakin rapat. Berikut ilustrasi pengubahan Analog ke Digital:
Gb.3 Grafik ilustrasi pengubahan tegangan analog menjadi data digital

Penjelasan gambar diatas terdiri dari dua bentuk sinyal, yaitu sinyal analog dengan sinyal discreet yang nanti dijadikan data hasil konversi digital. Pengubahan  tegangan masukan analog menjadi digital memperhatikan beberapa variabel, seperti V/Aref yang menentukan kerapatan resolusi (tinggi step discreet) dan tipe kemampuan pengolahanADC yang digunakan. Tipe ADC pada keluarga AVR mikrokontroler seperti diatas telah dijelaskan yaitu ADC 8 bit. Guna menghitung kerapatan pengubahan sinyal discrit perlu memperhatikan dua factor tersebut, misalkan terdapat beberapa contoh sebagai berikut
  • ADC 8bit ATMega 16 menggunakan tegangan referensi (Aref) sebesar +5VDC, berapa resolusinya?
Jawaban dari pertanyaan seperti itu adalah:
Resolusi Discreet =Aref(28)-1
Resolusi Discreet=5V255
Resolusi Discreet= 20mV

Sehingga besarnya step discreet terjadi perubahan pembacaan data digital setiap kelipatan 20mV, seperti pada gambar diatas. Setiap kenaikan tegangan masukan 20mV akan mengubah data digital satu tingkat lebih tinggi.
  • Apabila terdapat tegangan masukan ADC sebesar 3,4V maka berapa pembacaan data ADC mikrokontroler?
Jawaban dari Pertanyaannya adalah:

Data ADC =VinResolusi Discreet
Data ADC =3,4V20mV
Data ADC=170
Data ADC sebesar 170 merupakan pembacaan mikrokontroler terhadap masukan tegangan analog sebesar 3,4V.

Tegangan referensi (ARef) sebesar +5V DC digunakan apabila untuk pembacaan tegangan masukan ADC dengan range dan jangkauan yang tinggi. Sedangkan apabila dibutuhkan resolusi pembacaan ADC yang lebih kecil, dapat dilakukan perubahan tegangan referensi yang lebih kecil. Sebagai contoh berikut ini:

  • Jika terdapat sensor suhu LM35 dengan perubahan tegangan 10mV/°C, maka agar suhu dapat dibaca akurat perlu diberikan tegangan referensi sebagai berikut;
ARef= Resolusi Discreet x ((28) - 1)
ARef= 10mV x 255
ARef= 2,5V
Sehingga agar dapat membaca perubahan suhu /°C maka perlu dipasang tegangan referensi sebesar 2,5V. Berikut skematik yang diterapkan agar mendapatkan tegangan referensi 2,5V;
Gb.4 Skematik Aref dengan tegangan 2,5V

Secara rangkaian elektronik dan pengubahan ADC telah dijelaskan diatas, sedangkan dalam pemrograman perlu dilakukan pengaturan pada CodeWizard AVR sebagai berikut;

Gb.5 konfigurasi CodeWizard AVR dalam mengaktifkan penggunaan fasilitas ADC

Setelah pengaturan diatas selesai dan masuk pada area program (Generate, Save and Exit) maka akan muncul sebuah blok fungsi yang sudah dibuah CVAVR sebagai fungsi pembacaan/penkonversian ADC. Beikut program yang dapat dituliskan:
..........
    ..........
    #define ADC_VREF_TYPE 0x20
    // 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  stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
ADCSRAI=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRAI=0x10;
return ADCH;
}
..........
..........

Sedangkan pada CVAVR sendiri sudah terdapat instruksi/statement yang dapat digunakan untuk meng-akses pembacaan tegangan analog, yaitu;
    read_adc(no ADC)
contoh: (misal terdapat tegangan masukan yang akan dibaca pada ADCo)
    adc=read_adc(0);
Keterangan program  diatas adalah “baca tegangan pada ADCo dan hasilnya dimasukan dalam variabel adc”.

Penggunaan fasilitas ADC pada mikrokontroler harus dibarengi dengan penggunaan suatu tampilan yang dipakai sebagai penampil data. Tampilan data tersebut bisa berupa LED, 7Seg, atau sebuah LCD. Khusus untuk penggunaaan LCD yang digunakan menampilkan data pecahan dari hasil pengolahan suhu, serta menggunakan instruksi program sprintf(...), perlu ada pengaturan yang khusus sebelum program itu di build.

Pengaturan itu dapat dilakukan dengan cara: Menu Project → Configure → C Compiler → kemudian pada sprintf Feature dipilih float width, precision.
Gb.5 Pengaturan sprintf feature


Gambar Rangkaian Hardware

Gb. Rangkaian simulasi ADC dengan sensor LM 35

Contoh program

C1. Program menampilkan data pengubahan data analog menjadi data discreet menggunakan sensor lm35 sebagai masukan  dan LCD sebagai tampilan keluaran.
   #include <maga16.h>
   #include<delay.h>
   ……………..
   unsigned char read_adc(unsigned char adc_input)
   {
   …………….
   …………….
    }
   …………….
    unsigned int data_discreet;
    unsigned char lcd_buffer[30];
    void main (void)
    {
   …….
   …….

   while (1)
    {
    data_discreet=read_adc(0);
    sprint(lcd_buffer,”Discreet = %u”, data_discreet);
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer);
delay_ms(500);
};
    }

C.2 Program menampilkan suhu ruangan dengan menggunakan LM35 sebagai  sensornya, dan LCD sebagai keluaran data.(catatan: keluaran suhu kelipatan 2)
#include<mega16.h>
#include<delay.h>
 …………
unsigned char read_adc(unsigned char_input)
{
…………..
…………..
 }
 …………..
unsigned int data_suhu;
unsigned char lcd_buffer[30];
void main (void)
    {
    ……
    ……


    while(1)
    {
    data_suhu=(read_adc(0)*2);
sprint(lcd_buffer,”Suhu = %d”, data_suhu);
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer);
lcd_gotoxy(9,0);
lcd_putchar(223);
lcd_putsf(“C”);
delay_ms(500);
};
    }

Socializer Widget By Blogger Yard
SOCIALIZE IT →
FOLLOW US →
SHARE IT →

0 komentar: