Witam. Mam zrobioną obsługę pomiaru napięć na 4 wejściach układu.
Inicjuję w taki sposób:
Następnie odczytuję napięcie z 4 wejść (adc0-3) w przerwaniu:
Problem jest w tym, że mam poprawny odczyt napięć z ADC 0-2 ale ADC3 pokazuje mi ciągle maksymalny stan - tu 5V niezależnie co podam na wejście.
Co może być źle?
Inicjuję w taki sposób:
void adc_init(void)
{
ADCSRA=_BV(ADEN) | _BV(ADIE) | _BV(5) | _BV(ADSC) | _BV(ADPS0) | _BV(ADPS1) | _BV(ADPS2); //bit 5 - ADFR FreeRunning
ADMUX = _BV(MUX0);
}
Następnie odczytuję napięcie z 4 wejść (adc0-3) w przerwaniu:
ISR(ADC_vect) // przerwanie z przetwornika ADC
{
uint8_t uiLoByte;
uiLoByte=ADCL;
//fConvResult = (double) (uiLoByte | (ADCH << 8 )) / 1024 * VREF;
uiConvCounter++;
if(uiConvCounter == 50 )
{
if (ADMUX & _BV(MUX0))
{
fMeasSensor[0]=(double) (uiLoByte | (ADCH << 8 )) / 1024 * VREF5;
ADMUX = _BV(MUX1);
}
else if (ADMUX & _BV(MUX1))
{
fMeasSensor[1]=(double) (uiLoByte | (ADCH << 8 )) / 1024 * VREF12;
ADMUX = _BV(MUX2);
}
else if (ADMUX & _BV(MUX2))
{
fMeasSensor[2]=(double) (uiLoByte | (ADCH << 8 )) / 1024 * VREF12;
ADMUX = _BV(MUX3);
}
else if (ADMUX & _BV(MUX3))
{
fMeasSensor[3]=(double) (uiLoByte | (ADCH << 8 )) / 1024 * VREF5;
ADMUX = _BV(MUX0);
}
uiConvCounter=0;
}
}Problem jest w tym, że mam poprawny odczyt napięć z ADC 0-2 ale ADC3 pokazuje mi ciągle maksymalny stan - tu 5V niezależnie co podam na wejście.
Co może być źle?