Zitat Zitat von robocat
als referenzspannung der wandlung wird die spannung an Aref genommen, als eingang C0. deshalb muss man ADMUX hier nicht setzen.
Hi, möchte hier gern näher drauf eingehn:
Habe -zugegeben- die fertige Funktion aus dem Forum kopiert, möchte allerdings 5V als Referenzspannung verwenden. Hab also den Code etwas verändert und bei ADMUX |= (1<<REFS1) | (1<<REFS0); das 1<<REFS1) rausgenommen. Schaut dann so aus:

Code:
uint16_t ReadChannel(uint8_t channel) 
{
		uint8_t i;
		uint16_t result = 0;

		ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADFR);	// enable converter | prescaler bit2 | prescaler bit1 | kontinuierliche wandlungen
		ADMUX = channel;											// Kanal des Multiplexers waehlen
		ADMUX |= (1<<REFS0);										// Referenzspannung 5 V
		ADCSRA |= (1<<ADSC);										// Dummyreadout
		while(ADCSRA & (1<<ADSC));
		result = ADCW;										
		result = 0; 												
		for(i=0; i<3; i++) 											// 3x auslesen
		{
			ADCSRA |= (1<<ADSC);							
			while(ADCSRA & (1<<ADSC));						
			result += ADCW;
		}
		ADCSRA &= ~(1<<ADEN);										// ADC wieder deaktivieren
		result /= 3;												// Durchschnittswert ausrechnen.									
		return result;
}
Ist das denn so weit richtig??


Zweite Frage:
Im Funktionsaufruf habe ich als Parameter lediglich eine 0 übergeben. Reicht das aus um den AD Pin PC0 dafür auszuwählen?

danke schon mal im Voraus,

Franz