Hallo miteinander,

ich bin neu hier und habe gleich mal eine Frage zur programmierung einer Touchfeldabfrage:

Ich lasse mir die x und y Koordinaten bei meinem GLCD anzeigen, jedoch stimmen die Werte nicht überein.
Ich bekomme bei bei dieser Programmierung einen x-Wert von 738 raus, ohne das Touchfeld berührt zu haben. Eigentlich sollte es doch null sein, oder?
(Ich hab momentan die y-werte ausgeblendet).
Die Werte müßten doch eigentlich beide null sein, bei nicht gedrückten Touchfeld und 1027/1027 bei rechts oben gedrückten Feld.


Angeschlossen hab ich die vier Touchanschlüsse an die ADC 0-3 ohne irgendwelche zusätzliche Beschaltungen. Ist das überhaupt richtig?
Alle Codebeispiele die ich finden kann sind in Bascom geschrieben aber keines in C.
Code:
uint16_t readADC(uint8_t channel) {

	uint8_t i;
	uint16_t result = 0;
	
	// Den ADC aktivieren und Teilungsfaktor auf 128 stellen
	ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);

	// Kanal des Multiplexers waehlen
	// Interne Referenzspannung verwenden (also 2,56 V)
	ADMUX = channel | (1<<REFS1) | (1<<REFS0);
	
	// Den ADC initialisieren und einen sog. Dummyreadout machen
	ADCSRA |= (1<<ADSC);
	while(ADCSRA & (1<<ADSC));
	
	// Jetzt 4x die analoge Spannung auslesen
	// und dann Durchschnittswert ausrechnen.
	for(i=0; i<3; i++) {
		// Eine Wandlung
		ADCSRA |= (1<<ADSC);
		// Auf Ergebnis warten...
		while(ADCSRA & (1<<ADSC));
		
		result += ADCW;
	}
	
	// ADC wieder deaktivieren
	ADCSRA &= ~(1<<ADEN);
	
	result /= 4;
	
	return result;
}

unsigned int touch_x(void)
{

x=0;
	// Spannung an Y Pins anlegen //
	SET_OUTPUT(TOUCH_Y1);
	SET_OUTPUT(TOUCH_Y2);
	TOUCH_Y1_LOW;
	TOUCH_Y2_HIGH;

	// Potential am X1 Pin messen //
	SET_INPUT(TOUCH_X1);
	SET_INPUT(TOUCH_X2);
_delay_ms (500);		// warte 1 msec.
	uint16_t x = readADC(TOUCH_X2);	

	return (unsigned int) x;
}

unsigned int touch_y(void)
{

y=0;
	// Spannung an X Pins anlegen //
	SET_OUTPUT(TOUCH_X1);
	SET_OUTPUT(TOUCH_X2);
	TOUCH_X1_LOW;
	TOUCH_X2_HIGH;

	// Potential am Y1 Pin messen //
	SET_INPUT(TOUCH_Y1);
	//SET_INPUT(TOUCH_Y2);
_delay_ms (100);		// warte 1 msec.
	uint16_t y = readADC(TOUCH_Y1);	

	return (unsigned int) y;
}
void readtouch()
{
/* Einlesen der Touchkoordinaten */	
		x = touch_x();  // links-recht
	//	x = 1003-x;
	
		_delay_ms (100);		// warte 1 msec.
//		y = touch_y();  // hoch-runter
//		y = 977-y;
		
}
Ich hoffe ihr könnt mir weiterhelfen, ich weiss nicht mehr weiter.

Gruß
Bernd