Log. 0 i log. 1 jsou sice spínané tranzistory, ale jsou to FET tranzistory, takže by tam měla být 0V nebo napětí hodně blízké. 0,7V je podle datasheetu přípustné maximum - a to při proudu pinem 20mA. Pokud máš pin nezapojený (nebo jenom měřáček) musí tam být mnohem méně, než 0,7V. Sepnutý FET tranzistor nemá nulový odpor, tudíž napětí na něm je dané podle Ohmova zákona U=R*I, kde U je napětí na pinu, R je odpor FETu v sepnutém stavu a I je proud, který teče pinem.
ADMUX &= 0xF0; // vloz cislo kanala, vymaskuj nepouzite bity
ADMUX |= channel & 0x0F;
Tohle platí například pro ATmega8.
U ATmega16 je kanál určet pěti bity a ne jenom čtyřmi, tudíž správně by mělo být buď
ADMUX &= 0xE0; // vloz cislo kanala, vymaskuj nepouzite bity
ADMUX |= channel & 0x1F;
Nebo :
ADMUX &= 0xE0; // vloz cislo kanala, vymaskuj nepouzite bity
ADMUX |= channel & 0x07;
To v případě, že vybíráš jenom nesymetrický vstup.
Pokud bys ale chtěl funkci uložit do nějaké své knihovničky, aby jí příště nemusel psát znova, měl bys ji psát univerzálně.
Úplně správně by bylo použít podmíněný překlad pro různé procesory, ale s tím Ti zatím nemá smysl motat hlavu.
Při vstupu do funkce Read_ADC má (bys měl mít) ADMUX již definovanou hodnotu.
V main na začátku programu toto být nemůže :
ADMUX |= (1 << REFS0); // Reference 5V + pridano ADLAR (pro rozliseni 8 bitu)
Na začátku main by mělo být :
ADMUX = (1 << REFS0); // Reference 5V + pridano ADLAR (pro rozliseni 8 bitu)
Věřím, že přijdeš na to, proč to tak je.