Mam problem z którym walczę już chwilę i nie mogę sobie poradzić. Chciałbym to skończyć i zająć się innym projektem ale coś mnie tu wodzi za nos. Zerknijcie proszę na poniższy kod i niech mi ktoś wyjaśni co jest nie tak.
Chciałbym dokonywać pomiaru przetwornikiem ADC na czterech kanałach po kolei. Usiłuję owe kanały przełączać cyklicznie, ale cały czas wynik dostaję tylko z jednego kanału (ostatniego 3). W momencie gdy na stałe wpiszę np:
Kod:
pomiar(2);
to jest ok czyli mam pomiar z kanału 3. Niestety gdy chcę to zmieniać w "trakcie" trwania programu to coś jest nie tak. Fragment kodu poniżej.
Kod:
/
int main (void)
{
ADMUX |= (1<<REFS0);//napięcie odniesienia jako Vcc
ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS2); //ADEN: ADC Enable (uruchomienie przetwornika)
ADMUX |= (1<<ADLAR);//przesunięcie wyniku do lewej odczyt czyli 8 bitów
while(1)
{
uint8_t kanal;
pomiar(kanal);
Wartosc_zmierzona = ADCH;// max 256 bitów
USART_Transmit(Wartosc_zmierzona);
_delay_ms(1000);
kanal ++;
if (kanal>3) kanal = 0;
}
}
uint8_t pomiar (uint8_t kanal)
{
ADMUX |= (ADMUX & 0xF8) | kanal;
ADCSRA |= (1<<ADSC);//start konwersja
while (ADCSRA & (1<<ADSC));
return ADCH;
}
Co znowu spitoliłem?