how to use avr adc
i hope this will help U..
i use atmega32 ..adc 8 bits... and make sampling 8 times ... for display result of adc conversion i use lcd 16
#include <mega32.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
#include <delay.h>
#include <math.h>
#include <stdio.h>
// Declare your global variables here
char Str[16];
unsigned char adc_input;
unsigned int i;
unsigned char data_adc;
unsigned char data_tampung[8];
unsigned int jumlah;
unsigned int rata2;
unsigned char data_final;
// 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;
for(i=0 ; i<8; i++)
{
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
//return ADCH;
data_adc = ADCH;
data_tampung= data_adc;
}
jumlah = 0;
for(i =0 ;i<8;i++)
{
jumlah += data_tampung;
}
rata2 = ceil(jumlah/8);
data_final =(unsigned char)rata2;
return data_final;
}
void main(void)
{
// Declare your local variables here
unsigned int a= 0;
unsigned char data_kiri;
unsigned char data_serong1;
// Input/Output Ports initialization
// Port A initialization
PORTA=0x00;
DDRA=0x00;
// Port B initialization
PORTB=0x00;
DDRB=0xFF;//port output OKKK
// Port C initialization
PORTC=0x00;
DDRC=0xFF;
// Port D initialization
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 16000,000 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x01;
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
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: 500,000 kHz
// ADC Voltage Reference: AREF pin
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x85;
// LCD module initialization
lcd_init(16);
lcd_clear();
lcd_gotoxy(0,0);
sprintf(Str," start ");
lcd_puts(Str);
while(1)
{
read_adc(3);
data_conversion = data_final;
lcd_clear();
lcd_gotoxy(0,0);
sprintf(Str,"data conversion= %u",data_conversion);
lcd_puts(Str);
};