ADC pada Mikrokontroler ATMEGA16

 

Dalam Mikrokontroler ATMEGA16 terdapat 8 buah ADC yang berada pada PORTA (ADC0-ADC7), ADC (Analog to Digital Converter) merupakan proses perubahan tegangan DC kedalam data bilangan digital, bisa berupa biner, heksa, ataupun desimal tergantung pemrograman yang dilakukan.

Dalam percobaan kali ini akan dilakukan uji coba pembacaan nilai ADC pada PORTA.0(ADC 0) dan PORTA.1(ADC 1) pembacaan data dalam bentuk digital 8bit dan dirubah kedalam bentuk desimal dan ditampilkan dalam LCD 16x2. berikut merupakan skema rangkaian uji cobanya :

ADC_LCDADC pada mikrokontroler ATMEGA16 dapat diberi referensi tegangan eksternal, yang dalam uji coba ini referensi tegangan eksternal di inputkan pada PIN 30 (AVCC).POT_ADC  Dua buah potensio meter di inputkan pada port ADC yang dipergunakan sebagai simulasi perubahan tegangan yang terjadi ketika potensio ini diputar, dalam kenyataan perubahan nilai tegangan ini dapat di aplikasikan berupa pembacaan sensor, misalkan sensor suhu LM35, sensor jarak GP2D12, dll tergantung aplikasi yang akan digunakan.

Berikut merupakan program percobaan beserta penjelasannya yang saya tulis dalam CodeVision AVR :

#include <mega16.h>

#include <delay.h>

// Alphanumeric LCD functions
#include <alcd.h>
#include <stdlib.h>

#define ADC_VREF_TYPE 0x60  //Tegangan referensi yang digunakan pin AVCC

// Nilai konversi adc 8bit
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;
}

int adc0,adc1; 
char buf0[8];
char buf1[8];

void main(void)
{
PORTA=0xFF;  //Pull up interal port A diaktifkan
DDRA=0x00; 
//Seluruh PIN Port A sebagai Input

// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: ADC Stopped
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;

// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 16

lcd_init(16);

while (1)
      {
       lcd_gotoxy(0,0);lcd_putsf("ADC 0 =");
      lcd_gotoxy(0,1);lcd_putsf("ADC 1 =");
      adc0=read_adc(0); // Baca nilai ADC0 dan simpan dalam variabel adc0
      itoa(adc0,buf0);
// Konversi nilai integer adc0 ke dalam bentuk karakter

      lcd_gotoxy(8,0);lcd_puts(buf0); // Tampilkan nilai adc0
      adc1=read_adc(1);  // Baca nilai ADC1 dan simpan dalam variabel adc1
      itoa(adc1,buf1);
//Konversi nilai integer adc1 ke dalam bentuk karakter

      lcd_gotoxy(8,1);lcd_puts(buf1); //tampilkan nilai adc1
      }
}

Hasil Pembacaan ADC akan ditampilkan dalam bentuk desimal 0-255 berdasarkan hasil pembacaan.LCD_adcSemoga membantu, Terima Kasih.

0 komentar: