Hallo,

ich habe an meinem ATMega169 der mit 5V betrieben wird ein
Analogeingang der zwischen 3 und 5 Volt schwankt. Diesen will
ich messen. Mit meinem Code unten schwanken die 16bit Werte
aber immer nur sehr wenig im gesamten Messbereich, so dass
die Auswertung nur sehr ungenau wird. Außerdem werden die
16bit Werte größer, wenn die Spannung kleiner wird, das verstehe
ich auch nicht.

Wenn ich den Teiler von 64 auf 32 stelle ändert das komischwerweise
auch nichts...

Code:
uint16_t readADC(uint8_t channel) {
	uint16_t result = 0;
	
	// init ADC, set to 64
	ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);

	// channel of the multiplexer
	ADMUX = channel;
	
	// external referencevoltage  (AVCC 5.0 V)
	ADMUX &= ~(1<<REFS1);	
	ADMUX |= (1<<REFS0);
	
	// open ADC
	ADCSRA |= (1<<ADSC);
	
	// dummy readout
	while(ADCSRA & (1<<ADSC));
	
	// convert analog value
	ADCSRA |= (1<<ADSC);
		
	// wait for result
	while(ADCSRA & (1<<ADSC));
	
	// read value
	result = ADCW;
		
	// ADC close
	ADCSRA &= ~(1<<ADEN);
	
	return result;
}
DANKE für Hilfe!

Gruß
RICOLA