The ADATE bit starts the auto-trigger, meaning that you have no idea when the conversion will start as it is defined by timers or the comparator. Is that something you'll have?
If you plan to use the auto-trigger with a timer, skip the reading after you changed the channel.
unsigned char skip();
ADC_int(){
if (skip == 1) {
read_adc();
skip = 0;
}
else{
adc_value = read_adc();
}
loop() {
channel++;
skip = 1;
What that is saying is that whenever you change the channel, another conversion is already underway. And so the reading will be from the previous channel. So if you skip that one, the next reading will definitely be the right one.
The other way, would be to use the single conversion mode triggered inside the a timer interrupt. This way you are in control of when the AD conversion is started. Do you understand why it is like this?