ADC w AVR - problem

Loading thread data ...

Krzysztof napisał/a:

jak dla mnie w obydwu wypadkach odczyt jest dokonywany z GND w przypadku ATMEGA8

tu powinny być raczej

ADMUX &= ~(1 << MUX3) & ~(1 << MUX2) & ~(1 << MUX1) & ~(1 << MUX0); // ustawianie wejścia, ADC0

lub

ADMUX &= ~((1 << MUX3) | (1 << MUX2) | (1 << MUX1) | (1 << MUX0)); // ustawianie wejścia, ADC0

a ogólnie to wydaje mi sie ze lepiej zdefiniować sobie #define MY_ADCMASK 0xf0 #define MY_ADC0 0x00 #define MY_ADC1 0x01

i uzywac

ADMUX = (ADMUX & MY_ADCMASK) | MY_ADC0;

ADMUX = (ADMUX & MY_ADCMASK) | MY_ADC1;

ewentualnie rozpisac w definach wszystkie bity i skladac za kazdym razem potrzebna wartosc

pozdrawiam czerstwy

Reply to
czerstwy

Krzysztof napisał/a:

~((1 << MUX3) | (1 << MUX2) | (1 << MUX1) | (1 << MUX0)) = 0xF0

~(1 << MUX3) | ~(1 << MUX2) | ~(1 << MUX1) | ~(1 << MUX0) = 0xFF

to dwie zupełnie inne liczby wychodzą, nie wiem jak AVRStudio mogło to interpretować tak samo

pozdrawiam czerstwy

Reply to
czerstwy

Krzysztof snipped-for-privacy@wp.pl napisał(a):

..

Ten zapis powinien wyglądać tak:

ADMUX &= ~((1 << MUX3) | (1 << MUX2) | (1 << MUX1) | (1 << MUX0));

Twój zapis dał taki efekt:

ADMUX &= 0xf7 | 0xfb | 0xfd | 0xfe ;

co w sumie dało :

ADMUX &= 0xff;

czyli psinco ;) i nie podobra co by sie AVRStudio na taki nume nabrało :(

Piotrek

Reply to
Piotrek Sz.

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.