Saturday 6 March 2010

ADC (Analog to Digital Converter) ATmega8535


Pendahuluan.

ADC (Analog to Digital Converter) adalah suatu fungsi atau sistem yang merubah besaran analog menjadi data digital. Fasilitas ini ADC ini digunakan pada mikrokontroler untuk mengambil data dari analog dari luar. Salah satu jenis mikrokontroler yang mempunyai fitur ADC ini adalah AVR ATmega8535 buatan Atmel. Fitur ADc yang terdapat pada ATmega8535 ini memiliki 8 input channel ADC dengan resolusi 10bit. Maksudnya adalah mikrokontroler ini mampu untuk diberi masukan tegangan analog sampai 8 saluran secara bersamaan dengan ketelitian sampai 10 bit (1024). Masukan atau input saluran tersebut berupa tegangan yang dihasilkan dari sensor atau rangkaian pendukung lainnya. ADC ini memiliki ketelitian berbanding lurus dengan resolusi yang akan digunakan, semakin tinggi resolusi maka ketelitian akan semakin baik.


 

 
  Gambar 1. Perbandingan Tegangan Ideal ke Data ADC 

ATmega8535 dengan jenis package PDIP, input saluran ADC ini menggunakan single-ended maksudnya adalah tegangan DC yang masuk ke input mempunyai polaritas (+) dan gnd, dimana untuk (+) dihubungkan pada saluran ADC0…ADC7 sedangkan gnd digabungkan dengan gnd dari sistem. Fungsi Defferential untuk input ADC ATmega8535 hanya untuk jenis package TQFP.
Fasilitas ADC ini juga memiliki tegangan referensi (VREF) secara internal maupun eksternal. Internal referece untuk ADC adalah sebesar 2,56 atau sebesar tegangan masukan pada pin AVCC sedangkan external reference adalah referensi tegangan yang dimasukkan pada pin AREF.

Gambar 2. Rangkaian ATmega85353 untuk fungsi ADC
 
2.    Aplikasi pemrograman ADC 8bit dengan referensi internal. 
Pada aplikasi beikut ini pemrograman menggunakan bahasa C Codevision, dimana input 0–5 volt diperoleh dari tegangan yang dihasilkan VR1 sedangkan output akan dikeluarkan pada PORTC (perhatikan hasil keluaran ADC pada Led).
Langkah-langkah pemrogramanya adalah sebagai berikut :

1.      Buka Program CodeVision AVR pada start menu.

2.      Klik File à New pilih project, confirm klik Yes.


3.  Maka akan muncul tampilan seperti dibawah ini dan pastikan bahwa chip yang digunakan ATmega8535 dan Clock kristal 12 Mhz (12,000000 = 12.000000 = 12 Mhz).




           4.      Lalu klik tab ADC, maka muncul dibawah ini, dan klik ADC Enable.


5.   Use 8 Bits: untuk memilih apakah ADC menggunakan resolusi 10 bit atau 8 bit (Biarkan kosong/jangan di centang untuk ADC resolusi 10 bit).
ADC Interrupt: Pembacaan ADC dengan mode Interrupt, apabila dicentang.
High Speed: Mode konversi dengan kecepatan tinggi.
Volt. Ref: referensi tegangan ADC. ubah ke AVCC pin, agar ADC menggunakan referensi teg. 5 volt.
Clock: untuk memilih frekuensi sampling ADC.
Auto Trigger Source: pilih mode Free Running Mode.


6.      Kemudian klik Tab Port à Port C aktifkan mode output semua.


7.   Kemudian klik File à Generate Save and Exit, simpan dengan nama file adc_coba.


 
8.      Hasil generate code akan seperti dibawah ini :
#include
#include
#define ADC_VREF_TYPE 0xE0
// 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 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 ADCH;
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 93.750 kHz
// ADC Voltage Reference: Int., cap. on AREF
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: Free Running
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA7;
SFIOR&=0x0F;
while (1)
      {
      PORTC=read_adc(0); // baca ADC channel 0 dan masukkan ke PORTC
      };
}

No comments:

Post a Comment