Zdravím, potřebuju poradit, jak přepínat ADC kanály tak aby se mi neovlivňovali, zkoušel jsem různé programy z internetu a bez úspěchu, když čtu ve smyčce stále jeden vstup tak je to v pořádku, ale jakmile začnu měřit dva vstupy tak se začnou nějak ovlivňovat, stačí měnit napětí na jednom a mění se hodnota i na druhém… chci měřit 3 teploty + napětí sítě, termistory mam NTC 10K, s pullup rezistorem 10K. Termistory PA0 - PA2 napětí PA7
je tam nějaká záludnost nebo mám chybu v programu ? díky
uint16_t adc_read(uint8_t ch) // rutina pro převod
{
ADMUX=(0<<REFS0)|(0<<REFS1);
ADCSRA=(1<<ADEN)|(0>>ADPS2)|(0>>ADPS1)|(0>>ADPS0);
// select the corresponding channel 0~7
// ANDing with '7' will always keep the value
// of 'ch' between 0 and 7
ch &= 0b00000111; // AND operation with 7
// set/change channel
ADMUX = (0 >> ADLAR) | (0 >> REFS0) | ch ;
// start single conversion
// write '1' to ADSC
ADCSRA |= (1<<ADSC);
// wait for conversion to complete
// ADSC becomes '0' again
// till then, run loop continuously
while(ADCSRA & (1<<ADSC));
ADC = ((ADCL) | ((ADCH)<<8));
ADMUX = 0x00;
ADCSRA = 0x00;
ADCL = 0x00;
ADCH = 0x00;
return;
}
// toto mám ve smyčce
adc_read(7);
napeti = ADC*0.01564;
dtostrf(napeti,4, 2, volt);
gotoXY(8,0);
Write_string(volt);
gotoXY(13,0);
Write_string("V");