ADC neglects input voltage (ATMega32)
I think previous poster is right about not clearing the channel bits in ADMUX.
Here's my well tested code:

unsigned short read_proc_ad(byte adchan){
  //start a new conversion, wait for a result, and return it
  //unsigned short retval;
  ADMUX &amp;= ~0X1F;
  ADMUX |= adchan;
  ADCSRA |= _BV(ADSC);
  while(bit_is_set(ADCSRA,ADSC))wdt_reset();
  return ADC;
}


Note also I don't look for ADIF to rise, instead I look for ADSC to fall.
Also you might want to clear the ADIF flag just before the conversion rather than after.