I believe the answers you are looking for lie within this page:
http://extremeelectronics.co.in/avr-tutorials/using-the-analog-to-digital-converter/instead of this:
ch=ch&0b00000111;
ADMUX|=ch;
You could do this:
PORT_ON(ADMUX, MYPINNUM); // Select ADC Channel
so it would go something like this (i think):
ADMUX= (1<<REFS1) | (1<<REFS0); // Internal 2.56 Voltage Reference
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); //Prescalar div factor (not sure if this is needed more than once)
PORT_ON(ADMUX, MYPINNUM); // Select ADC Channel
ADCSRA|=(1<<ADSC); // Start single conversion
while(!(ADCSRA & (1<<ADIF))); // wait for conversion to complete
ADCSRA|=(1<<ADIF); //clear ADIF
return(ADC); // return your ADC value
ADMUX = (0<<REFS1) | (0<<REFS0); // Select AREF as voltage reference, vcc as reference would be (0<<REFS1) | (1<<REFS0)
//now take readings as normal