RSS

ANALOG TO DIGITAL CONVERTER (ADC)

16 Apr

Mikrokontroler ATmega8535 memiliki fasilitas analog yang sudah build in didalam chip. Fitur internal ADC inilah yang menjadi salah satu kelebihan mikrokontroler ini jika dibandingan dengan beberapa jenis mikrokontroler lainnya.

Atmega memiliki resolusi ADC 10bit (dapat juga menggunakan ADC 8 bit) dengan 8 channel (PA0-PA7) inputdan mendukung 16 macam penguat beda. ADC ini bekerja dengan teknik succecive approximation. Rangkaian internal ADC memiliki catu daya tersendiri yaitu pin AVCC.
Data hasil konversi ADC 10 bit (1024) adalah:

ADC=(Vin*1024)/Vref

Jika menggunakan compiler Codevision, kita dapat dengan mudah menggunakan CodeWizardAVR, berikut adalah cara mensetting ADC pada codevision AVR.

Jika ingin menggunakan ADC 8 bit maka tinggal meng-klik saja pada “use 8 bit“. “Volt Ref” merupakan sumber pemilihan tegangan referensi ADC, sedangkan “Clock” adalah banyaknya frekuensi sampling ADC. Dan “Auto Trigger Source” merupakan mode ADC yang akan digunakan.

Berikut adalah contoh program ADC 10 bit, dengan tegangan input berasal dari potensiometer yang difungsikan sebagai pembagi tegangan. Cara kerjanya adalah terdapat tiga buah potensiometer dan nilai ADC dari ketiganya ditampilkan pada LCD. Jika salah satu potensio tersebut mempunyai nilai yang paling besar maka LED akan menyala sesuai dengan potensio tersebut.

Berikut adalah listing program lengkapnya:

#include <mega16.h>
#include <stdlib.h>
#include <lcd.h>
#include <delay.h>

int potensio1, potensio2, potensio3;
char temp[6];
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm

#define ADC_VREF_TYPE 0x00

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

// Declare your global variables here

void main(void)
{
PORTD=0xff;
DDRD=0x07; //BIT PD32-0 SEBAGAI OUTPUT UNTUK MENGHIDUPKAN LED

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;

// LCD module initialization
lcd_init(16);

while (1)
{
potensio1=read_adc(0);
potensio2=read_adc(1);
potensio3=read_adc(2);

if (potensio1>potensio2 && potensio2>potensio3)
{PORTD=0b11111110;}//jika paling besar nilai potensio 1, nyalakan led1

if (potensio1potensio3)
{PORTD=0b11111101;}//jika paling besar nilai potensio 2, nyalakan led2

if (potensio1<potensio2 && potensio2<potensio3)
{PORTD=0b11111011;}//jika paling besar nilai potensio 3, nyalakan led3

lcd_clear( );
lcd_gotoxy(0,0);
lcd_putsf(“ElectrO-cOntrOl”);
itoa(potensio1,temp);//menampilkan nilai ADC potensio1
lcd_gotoxy(0,1) ;
lcd_puts(temp);

itoa(potensio2,temp);//menampilkan nilai ADC potensio2
lcd_gotoxy(5,1) ;
lcd_puts(temp);

itoa(potensio3,temp);//menampilkan nilai ADC potensio3
lcd_gotoxy(10,1) ;
lcd_puts(temp);
delay_ms(300);
};
}

 
8 Comments

Posted by on April 16, 2011 in Tutorial AVR

 

Tags: , , , ,

8 responses to “ANALOG TO DIGITAL CONVERTER (ADC)

  1. rendy.

    June 5, 2011 at 17:34

    apa arti “itoa” pada program ini & perintah apa yg sama dengan itu pada atmega8535..?
    trims

     
    • ElectrO-cOntrOl Team

      June 5, 2011 at 18:43

      Pada dasarnya instruksi bahasa C dgn codevision AVR antara atmega16 dan 8535 adalah sama.
      ITOA adalah integer to array, saya gunakan untuk menampilkan pada LCD sebuah variabel dgn tipe data integer kedalam array. jika menggunakn intruksi ITOA harus menggunakan library stdlib.h dan sebuah deklarasi variabel array yaitu temp[6]

       
  2. 110787

    June 16, 2011 at 15:33

    Masbro…, ane bingung nih konversi ADC di mikrokontroler..,
    Ane punya data :
    Tegangan Refrensi = 5 V.
    adc 10 bit
    Tegangan input = 2,4 V.

    klo dr rumus: ADC = (Vin / Vref) x 1023
    berarti : ADC = (2,4 / 5) x 1023
    ADC = 491

    nah, ane pake mikrokontroler ATmega 128 pake bahasa C
    dengan data seperti diatas
    trus ane tampilin k LCD tp kok hasil’y :467.

    dr nilai diatas berarti ada error pembacaan..??
    nah yg ane bingung error’y itu apa…??
    Mohon pencerahan Masbro….,

     
    • ElectrO-cOntrOl Team

      June 16, 2011 at 18:39

      seharusnya dengan tegangan yg masuk 2.4 V data 10bit ADC yg terbaca adalah 491.

      Apakah Vreferensi anda benar2 mempunyai tegangan 5V?
      Seharusnya tidak ada nilai error pembacaan pada ADC. mungkin untuk menceknya anda dapat membuat aplikasi yg sama dengan menggunakan mikrokontroler yg berbeda, apakah ada perbedaan?

       
  3. azzoarq

    June 16, 2011 at 15:38

    maaf mau tanya mas IC micro yang digunakan atmega8535, lalu kenapa dalam program memakai include …..terimakasih penjelesannya…..

     
    • ElectrO-cOntrOl Team

      June 16, 2011 at 18:35

      pada dasarnya tidak ada perbedaan untuk fitur ADC mega16 degan mega8535. Klo diatas saya menggunakan include mega16.h, tetapi bisa anda ganti dengan mega8535.h

       
      • azzoarq

        June 23, 2011 at 11:18

        makasih penjelasannya mas…..Oh ya aku dah download proteus 7.7 sp 2 di web ini dah di install bisa…tapi saat mo buka simulasi dari proteus yang dbuat mas (project 2 disini) ….langsung program close (exit)….kenapa ya?…(sebelumnya pernah di install proteus versi lama).

        Saran mas, untuk project yang disimulasikan pake proteus, tolong dong biar bisa dibuka di proteus versi lama, file dikonver dulu ke vesi lama……….

        Oh ya…satu lagi protues 7.7 sp program cracknya dideteksi ada virus trojannnya (sy pake McAfee),….apa ya ada virusnya…atau memang normal-normal aja….makasih………..maaf pertanyaanya banyak

         
      • ElectrO-cOntrOl Team

        June 23, 2011 at 16:55

        klo terdeteksi sbgai trojan memang saya sudah tahu, sepertinya itu file bawaan crack, sehingga terdeteksi trojan, tetapi jika file itu dikarantina atau didelete maka proteus tidak akan bisa melakukan simulasi…. ok… mungkin nanti saya akan menggunakan proteus versi lama (7.6)

         

Leave a reply to ElectrO-cOntrOl Team Cancel reply