Hallo Zusammen,

ich habe folgendes Problem mit dem ATMega16 und der AD-Wandlung.
Als Referenzspannung liegen AREF und AVCC mit 5 Volt und einer LOW-Pass
enstörung an. Es soll ein (über ein Poti erzeugter Wert) von 0-5V
ausgewertet werden und je nach Wert z.B. ein Lüfter oder eine Heizung
an/abschalten.

Code:
int main ()

{



	volatile int x,y,grad, resultat;	// Merker für ADC			

	

	MCUCSR = (1<<JTD);		//JTAG disabel 

	ADCSRA = ((1<<ADPS1)|(1<<ADPS2)|(1<<ADEN)|(1<<ADSC)|(1<<ADATE)); 
	//Teilfaktor auf 64, Freilaufender Modus, AD-Wandler enablen

	
	ADMUX =  ((1<<REFS0)|(0<<REFS1)|(0<<MUX0));
	//Referenzspannung definieren (liegt bei uns mit 5V an), PortA Pin0 als Eingang ausgewählt


	SFIOR= (0<<ADTS2)|(0<<ADTS1)|(0<<ADTS0);	
	//Einstellung für den Freilauf-Modus


	

	//Ausgänge

	DDRA = (1<<DDA3)|(1<<DDA4)|(1<<DDA5)|(1<<DDA6)|;			
	//PortA Pin 3,4,5,6 als Ausgang



	do

	{



		x = ADCL;       // ADCL-Register in Variable x speichern

		y= ADCH; 	// ADCL-Register in Variable x speichern

		y= (y<<5); 	//linksshift 5 Stellen



		resultat=x+y;	//beide Register addieren um 10bit Auflösung zu nutzen
		resultat=resultat*10;	
		//dieser Schritt wird gemacht um eine bessere Gradeinteilung zum REalwert 			zuerreichen

		
		switch (resultat)

		{

			case 	0:	grad=1	; break;

			case 	205:	grad=2	; break;

			case	410:	grad=3	; break;

			case	615:	grad=4	; break;

			case	820:	grad=5	; break;

			case	1025:	grad=6	; break;

			case	1230:	grad=7	; break;

			case	1435:	grad=8	; break;

			case	1640:	grad=9	; break;

			case	1845:	grad=10	; break;

			case	2050:	grad=11	; break;

			case	2255:	grad=12	; break;

			case	2460:	grad=13	; break;

			case	2665:	grad=14	; break;

			case	2870:	grad=15	; break;

			case	3075:	grad=16	; break;

			case	3280:	grad=17	; break;

			case	3485:	grad=18	; break;

			case	3690:	grad=19	; break;

			case	3895:	grad=20	; break;

			case	4100:	grad=21	; break;

			case	4305:	grad=22	; break;

			case	4510:	grad=23	; break;

			case	4715:	grad=24	; break;

			case	4920:	grad=25	; break;

			case	5125:	grad=26	; break;

			case	5330:	grad=27	; break;

			case	5535:	grad=28	; break;

			case	5740:	grad=29	; break;

			case	5945:	grad=30	; break;

			case	6150:	grad=31	; break;

			case	6355:	grad=32	; break;

			case	6560:	grad=33	; break;

			case	6765:	grad=34	; break;

			case	6970:	grad=35	; break;

			case	7175:	grad=36	; break;

			case	7380:	grad=37	; break;

			case	7585:	grad=38	; break;

			case	7790:	grad=39	; break;

			case	7995:	grad=40	; break;

			case	8200:	grad=41	; break;

			case	8405:	grad=42	; break;

			case	8610:	grad=43	; break;

			case	8815:	grad=44	; break;

			case	9020:	grad=45	; break;

			case	9225:	grad=46	; break;

			case	9430:	grad=47	; break;

			case	9635:	grad=48	; break;

			case	9840:	grad=49	; break;

			case	10045:	grad=50	; break;

			case	10250:	grad=50	; break;

		}
		//genaue Definition der Gradwerte (geht mit Sicherheit auch einfacher)

	if (grad<=10)		//Temperatur unter 10° Heizung an
	{
	PORTA=(1<<PA3);
	}
	if (grad<=12)		//Temperatur über 12° Heizung aus
	{
	PORTA=(0<<PA3);
	}
	if (grad>=40)		//Temperatur über 40° Lüfter an
	{
	PORTA=(1<<PA4);
	}
	if (grad<=30)		//Temperatur unter 30° Lüfter an
	{
	PORTA=(0<<PA4);
	}
	 

	
	} while (1);	

	return(0);



}

Bei Nutzung des Programms erhalte ich am Ausgang PortA Pin 3/4 komische
Werte. Der Ausgang liegt bei 3,x Volt und die LEDs flackern. Wenn man
Testweise den Wert der AD-Wandlung auf LEDs gibt, die am PortC testweise
angeschlossen waren, flackern diese auch. Allerdings sieht es für mich
dann aus, als ob eine AD-Wandlung stattfindet (Überprüfung durch drehen
am Poti - bei Maximalstellung alle Lampen an). So langsam bin ich
ratlos. Kann mir hier jemand von Euch helfen?

Liegt es vielleicht an den restlichen Eingängen von Port A, die nicht
genutzt werden und quasi offen liegen?

Besten Dank und Gruß Roland