Selasa, 14 Februari 2012

Pembacaan ADC dan ditampilkan pada LCD Atmega16

Kali ini, aku ingin sharing ilmu mengenai pemrograman mikrokontroler AVR.
Posting kali ini, bagaimana melakukan pembacaan ADC dari mikrokontroler, yang nantinya akan ditampilkan pada LCD 16x2.Atau dapat dikatakan LCD 16 kolom dan 2 baris. Mikrokontroler yang akan digunakan adalah Atmega 16.

Contoh program yang sudah saya buat seperti dibawah ini:


#include <mega16.h>
#include <stdio.h>
#include <delay.h>
unsigned int Z;   //fungsi untuk mendeklarasikan integer Z

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

#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)
{
char lcd_buffer[20];
float vin;           //deklarasi vin sebagai float
PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0x00;

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

lcd_init(16);
while (1)
      {
      Z=read_adc(0);
      vin=((float)Z*0.00488);  //0.00488 adalah 5volt/1024, dimana 1024 adalah ADC yang digunakan adalah 10bit
      lcd_gotoxy(0,0);
      sprintf(lcd_buffer,"%0.0f C",vin);
      lcd_puts(lcd_buffer);
      }
}

Penjelasan:

Z=read_adc(0); ==>> adalah membaca ADC 0 yang berada pada PORTA.0 yang kemudian dimasukan pada Integer Z.
vin=((float)Z*0.00488); ==>> adalah Integer Z dikalikan dengan 0.00488, yang hasilnya akan berupa float dan ditempatkan pada vin.

lcd_gotoxy(0,0); ==>> menempatkan posisi kursor pada baris 0, kolom 0.
sprintf(lcd_buffer,"%0.0f C",vin); ==>> this function is identical to printf except that the formatted text is placed in the null terminated character string str
lcd_puts(lcd_buffer);

Pengaturan akhir jangan sampai lupa, ubah sprintf Feature pada Configure Project, pilih float width precission, kemudian OK.



Gambar hasil simulasi yang saya dapat seperti pada gambar dibawah ini:
Add caption

Untuk yang mau download program dan simulasinya, silahkan download pada LINK ini.

Selamat mencoba dan semoga bermanfaat.

Tidak ada komentar:

Posting Komentar