Ahoj, píšu program na STM32F0, kde obsluhuji dva senzory (konkrétně na plyny CO a CO2), tudíž potřebuji dva kanály ADC. Vybral jsem si kanál 1 a 4. V mainu mám pouze volání dvou funkcí v nekonečné smyčce:
while(1){
ZmerCO();
ZmerCO2();
}
void ZmerCO()
{double ADC1ConvertedValue;
ADC1->CHSELR |= ADC_CHSELR_CHSEL1;
//AD převod a posílání hodnoty na usart
}
void ZmerCO2()
{double ADC1ConvertedValue;
ADC1->CHSELR |= ADC_CHSELR_CHSEL4;
//AD převod a posílání hodnoty na usart
}
Vždy na začátku funkce změním kanál pomocí ADC1->CHSELR |= ADC_CHSELR_CHSELx; a pak hodnotu z ADC1 pošlu na USART a na hyperterminal.
Když zakomentuju jednu z těchto dvou funkcí, program normálně běží (v pokojových podmínkách CO hází hodnotu okolo 800 a CO2 okolo 1000 a tyto hodnoty jsou konstatní pokud do senzoru nefouknu nebo něco…).
Ovšem když nechám obě funkce nezakomentované a měřím oba plyny najednou, hyperterminal začne vypisovat nejpodivnější čísla. Například hodnota CO je v jednom měření 700 a hned v dalším 2500 a pak zase třeba 1400. To samé platí pro CO2.
Vím, že toto řešení je primitivní, že bych to měl dělat přes přerušení nebo DMA, ale když už to mám takle, nevíte někdo v čem by mohl být problém? Podle mě procesor nějak nezvládá přepínat kanály, ale proč?