jak vyřešit ovlivňování ADC kanálů ? (Atmega32)

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");

Zde je program pro 4x vstup voltmetr s ATmega8, ale po úpravě by to mělo fungovat i pro jiné typy.
Voltmetr.zip (51.2 KB)

jj díky, už to chodí, přišel sem na to, problém není v kodu, ani ten cos mi sem dal mi nefungoval, ale je to asi prostě konstrukční problém tohohle pouzdra, když mam zaplí 4 kanály a 3 mam ve vzduchu, a na jednom mam potenciometr, tak z toho jednoho se to přenese na ty ostatní, a proto to potom všechno blblo :smiley: