I'm not sure you understand what you are doing
Normally the ADC result is right justified, this means that the result can be in the range 0-1023 (16bit result)
In this case read ADCW to get the 10 bit result
If you chose to set the result to be left justified, this would give the following 16bit values
which is basically 0 to 65472 , the first value after 0 is 0b0000000001000000 which is decimal 64.
In this case read ADCH to get the 8 bit result
Select one of the two formats and read accordingly
- - - Updated - - -
The first function I gave you (read_adc) is for right shifted result and returns 10bit
The second function I gave you (read_adc8) is for left shifted result and returns 8bit
The left or right shift must be set by your initialization code, my functions don't change that setting