Hallo zusammen,

ich versuche mich seit paar Tagen mit ADC Wandler.
Ich schreibe in C und nutze Atmelstudio 6. Zum testen habe ich mir ein kleines Kästchen mit einem ATmega8 und einem 20x4 Display gebastelt.

Vor ein paar Tagen habe ich einen alten analogen Joystick (boeder P-7 Joystick) auf dem Speicher gefunden und wollte diesen nun mit dem Atmega8 über ADC auslesen und vorerst auf dem LCD die Werte anzeigen lassen.
Allerdings musste ich ersteinmal paar Kabel umlöten, da die beiden 50Kohm Potis keine Masse hatten. 2. hab ich noch beide Tasten mit einem Pull-UP Wiederstand versehen.

Joystick ATmega8
X_Achse -- -- -- -- > PC1
Y_Achse -- -- -- -- > PC2
Taste A -- -- -- -- > PD2 (INT0)
Taste B -- -- -- -- > PD3 (INT1)

Tasten abfragen funktioniert super, nur die ADC_werte spinnen irgendiwe rum, wenn ich beide auslesen will. Einzeln auslesen ist ohne Proplem so wie ich das wünsche.
hier mal meine AT8adc.h Datie, denke mal das ich irgendwo einen Fehler habe oder es doch auf diese Weise nicht funktioniert.
Code:
/*
 * AT8adc.h
 *
 * Created: 18.04.2015 17:29:41
 *  Author: Hendrik
 */ 


#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>	// für dtostrf

// Variablen

unsigned long ADC_result;
double XAchse;	// double wegen return "XAchse" ins Hauptprogramm
double YAchse;
volatile int x;
char xstr[4];
char ystr[4];

void initADC (void)
{
	// ADC Konfigurieren
	
	ADCSRA |= (1<<ADEN); // ADC-Wandler aktivieren
	ADCSRA |= (1<<ADPS1);// Teiler 64 (zw. 50khz und 200khz)
	ADCSRA |= (1<<ADPS2);// Teiler 64 (8000000hz / 64 = 125000hz
	
}
// X-Achse messen am ADC1
double getADC1 (void)
{
	ADMUX = 0x01;	// ADC1 selekt
	ADMUX |= (1<<REFS0); // Referenzspannung = VCC = 5Volt
	ADC_result = 0;
	
	//for (unsigned int i=0; i<8; i++)
	//{	
		ADCSRA |= (1<<ADSC);        // single conversion
		while (ADCSRA & (1<<ADSC)) // warten bis ADC fertig
		ADC_result = ADCW;
		//ADC_result += ADCW;		   // adieren der conversion
	//}
	XAchse = ADC_result;
	//XAchse = ADC_result/8;		 // 8mal messen, addieren und durch 8 teilen für Mittelwert
	dtostrf(XAchse, 4, 0, xstr);
	lcd_setcursor(5,2);
	lcd_string(xstr);
	x = XAchse-512;					// umwandeln  in -512 > 0 < +512
	lcd_setcursor(15,2);
	dtostrf(x,4,0,xstr);
	lcd_string(xstr);
	return XAchse;
}
// Y-Achse messen am ADC2
double getADC2 (void)
{
	ADMUX = 0x02;			// ADC2 selekt
	ADMUX |= (1<<REFS0);    // Referenzspannung = VCC = 5Volt
	ADC_result = 0;			// ADC_result zurücksetzen
	
	//for (unsigned int i=0; i<8; i++)
	//{
		ADCSRA |= (1<<ADSC);        // single conversion
		while (ADCSRA & (1<<ADSC))  // warten bis ADC fertig
		ADC_result = ADCW;		    // adieren der conversion
	//}
	YAchse = ADC_result;		 // 8mal messen, addieren und durch 8 teilen für Mittelwert
	dtostrf(YAchse, 4, 0, ystr);
	lcd_setcursor(5,3);
	lcd_string(ystr);
	return YAchse;
}
Im Main Programm frage ich dann wie folgt ab

Code:
while(1)
    {
		getADC1();
		_delay_ms(300);
		getADC2();
		_delay_ms(300);
    }
Die 300 ms hab ich nur rein genommen um zu sehen was das Proplem sein könnte. Lässt sich jetzt schlecht erklären, aber die beiden werte springen wild hin und her und lassen sich nicht zur jeweiligen Achse zuordnen.

Würde mich freuen wenn jemand mir auf die Sprünge helfen könnte und ne Idee hat.

Vielen Dank Hendrik