- posted
17 years ago
ADC w AVR - problem
- Vote on answer
- posted
17 years ago
- Vote on answer
- posted
17 years ago
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
- Vote on answer
- posted
17 years ago
- Vote on answer
- posted
17 years ago
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
- Vote on answer
- posted
17 years ago
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
- Vote on answer
- posted
17 years ago