Mam takowy problemik. Moj ADC jest tak skonfigurowany :
I ciagle sampluje mi z kanalu 0, zamiast ze wszystkich. Wyswietlam na LCD wszystkie wyniki na raz i jak cos zmieniam na kanale 0 ( napiecie ) to zmienia sie na kazdym innym wejsciu ( ktore sa niepodlaczone jeszcze).
Sprawdzalem zmiane kanalu zarowno recznie ustawiajac bity jak i wpisujac 0 do 7 jak widac i nic. Co robie zle?
Proszę używać znaczników [code] - uzupełniłem.
[zumek]
adcinit
DDRA = 0x00 ; //set ADC PA0 as input
PORTA = 0x00 ; // ~( 1 << 0 ); // no internal pull-up
ADMUX |= (1 << REFS0) | (1 << REFS1) ; // Set ADC reference to 2.56 internal bandgap
ADMUX |= (1 << ADLAR); // Left adjust ADC result to allow easy 8 bit reading
ADCSRA |= (1 << ADEN); // Enable ADC
ADCSRA |= (1 << ADSC); // Start A2D Conversion - 1st one
a tak sobie dziala w przerwaniu co 0.01s
ISR(TIMER1_COMPA_vect){
//unsigned char i;
//channel0
ADMUX &= ~((1 << MUX2)|(1 << MUX1)|(1 << MUX0));
ADCSRA |= (1 << ADSC);
while(!ADIF){} //wait for conversion to be over
aBytes[0] = ADCH;
//channel1
//ADMUX |= (1 << MUX0 );
ADMUX |= 1;
ADCSRA |= (1 << ADSC);
while(!ADIF){}//wait for conversion to be over
aBytes[1] = ADCH;
//channel2
//ADMUX |= (1 << MUX1);
//ADMUX &= ~(1 << MUX0);
ADMUX |= 2;
ADCSRA |= (1 << ADSC);
while(!ADIF){} //wait for conversion to be over
aBytes[2] = ADCH;
//channel3
ADMUX |= (1 << MUX0);
ADCSRA |= (1 << ADSC);
while(!ADIF){}//wait for conversion to be over
aBytes[3] = ADCH;
//channel4
ADMUX |= (1 << MUX2);
ADMUX &= ~((1 << MUX1) | (1 << MUX0));
ADCSRA |= (1 << ADSC);
while(!ADIF){} //wait for conversion to be over
aBytes[4] = ADCH;
//channel5
//ADMUX |= (1 << MUX0);
ADMUX |= 5;
ADCSRA |= (1 << ADSC);
while(!ADIF){} //wait for conversion to be over
aBytes[5] = ADCH;
//channel6
ADMUX ^= ((1 << MUX1) | (1 << MUX0));
ADCSRA |= (1 << ADSC);
while(!ADIF){} //wait for conversion to be over
aBytes[6] = ADCH;
//channel7
ADMUX |= (1 << MUX0);
ADCSRA |= (1 << ADSC);
while(!ADIF){} //wait for conversion to be over
aBytes[7] = ADCH;
}
I ciagle sampluje mi z kanalu 0, zamiast ze wszystkich. Wyswietlam na LCD wszystkie wyniki na raz i jak cos zmieniam na kanale 0 ( napiecie ) to zmienia sie na kazdym innym wejsciu ( ktore sa niepodlaczone jeszcze).
Sprawdzalem zmiane kanalu zarowno recznie ustawiajac bity jak i wpisujac 0 do 7 jak widac i nic. Co robie zle?
Proszę używać znaczników [code] - uzupełniłem.
[zumek]