Hallo!
Ich habe mein erstes Programm mit dem Internen ADC Wandler des mega8 geschrieben, aber es funktioniert noch nicht ganz.

Code:
#include <avr/io.h>
#include <stdint.h>

#define F_CPU 3686400UL
#include <util/delay.h>


// LEDs:
// - Grün: PORT C 0
// - Gelb: PORT C 3
// - Rot: PORT C 5
// POTI an PORT B 0

//===========================================================================================================

int adc (uint8_t mux)

{	uint8_t i;
	uint16_t ergebnis=0;
	
	ADCSRA=(1<<ADEN);					// ADC ein
	ADCSRA=(1<<ADPS2)|(1<<ADPS0);		// Frequenzteiler 32
		
	ADMUX|=(1<<REFS1)|(1<<REFS0);		// Interne Refrerenzspg ein
	ADMUX=mux;							// ADC an Pin mux
	
	ADCSRA|=(1<<ADSC);					// Dummy Load
	while(ADCSRA&(1<<ADSC)) {}			// Warten bis Messung fertig
	
	for(i=0;i<5;i++)					// 5 Mal messen
	{	ADCSRA|=(1<<ADSC);
		while(ADCSRA&(1<<ADSC)) {}		// Warten bis messung fertig		
		ergebnis=ergebnis+ADC;			// Mittelwert bestimmen	
	}
	
	ADCSRA&=~(1<<ADEN);					// ADC ausschalten
	
	ergebnis=ergebnis/5;
	return ergebnis;					// Ergebnis zurückgeben
}

//=========================================================================================================

int main (void)

{	DDRD=0x00;
	DDRB=0x00;
	DDRC=0xff;
	PORTC=0x00;

	uint16_t wandlung;
	while(1)
	{	wandlung=adc(0);
		
		if(wandlung<21845)
		{	PORTC|=(1<<0);
			PORTC&=~(1<<3);
			PORTC&=~(1<<5);
		}
		
		if(wandlung>21845 && wandlung<43690)
		{	PORTC|=(1<<3);
			PORTC&=~(1<<0);
			PORTC&=~(1<<5);
		}
	
		if(wandlung>43690 && wandlung<65535)
		{	PORTC|=(1<<5);
			PORTC&=~(1<<0);
			PORTC&=~(1<<3);	
		}
		
		else{}

	}
}

//==========================================================================================================

Wenn ich das Programm in den Controller brenne, leuchtet nur die Rote Led, d.h. es wird immer der else-Zweig im Hauptprogramm ausgeführt.

Ich glaube es liegt daran, dass ich nicht weiß, wie man dem uC sagt, dass das Poti auf PORT B ist, mit ADMUX=0 sagt man ihm ja nur, dass der ADC Pin der Pin 0 ist.

Außerdem kenn ich mich mit der Referenzspg. nicht so gut aus. Man kann also nur Spannungen von 0-2,54 Volt in den Controller schicken, das halte ich auch ein, aber ich weiß nicht, ob die Einstellungen ADMUX|=(1<<REFS1)|(1<<REFS0); stimmen.

Grüße,
Christoph