Download HereADC Reading With Internal Adc Of AVR - Atemga 32 And Displaying On LCD
According to data sheet there are 3 registers are used to works the ADC in AVR atmega 32 
ie , 
1) ADMUX
2)ADSCR
3)ADC
1) ADMUX :-
 It is an 8 bit Register ,each bit has some functions as follows 
REFS1 & REFS0 :- is used for the reference Voltage  with respect to our analog input (for resolution)  to know more search this blog.
I am giving 5volt as reference so selected REFS1 = 0 & REFS0 = 1
ADMUX=(1<<REFS0); // AVcc with external capacitor at AREF  ,giving a high to REFS0.
MUX0-MUX4  :- it is used to select the input channel ,ie 8  analog input channel can be given so desired one selection by giving appropriate value .
  ADLAR : - used to shift the resulted data (ADC Value) left or right .I am using right shift so makes as low.
.....................................................................................................................................
2) ADSCR :-  ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
It is also an 8 bit register .
Bit 7 used to ADC ON (ADC Turn ONing by applying a high bit )
Bit6 ADSC is used to start the conversion .and still maintain it value as high  up to the conversion . after conversion it becomes low (Zero)
ADATE and ADIF is not used by me now .(not by using Intruppet
Bit 0 to bit2  is used for select ADC frequency . 
2) ADC: It is a 16 bit to 8 bit register ADCL & ADCH. By applying right shift value it is autmatically set as normal value so we can take simple value from it
 eg :  return (ADC);
 adc_value = read_adc(ch_sec); 
The program as follows . The full program can be download below including Proteus simulation file.



