Sany
05.11.2007, 01:31
Hallo,
Ich hab eine Frage bezüglich meines Codes zum auslesen, von den Werten eines Touchpanels.
Eingesetzter Atmel: Atmega16
Genutzt: Interne AREF Spannung. 2.56V
Gesetzt habe ich den Teilungsfaktor 128, da mein Atmel mit 14,3 Mhz läuft.
Mein Touchpanel hat 4 PINs (X+, X-, Y+, Y-)
Die Pins sind mit PA0-PA3 an meinem Atmega verbunden, jedoch mit Vorschaltung von 4x 470 Ohm Widerständen
Ich lege High auf X+ und X- und messe den Wert mit folgendem Code:
void debug()
{
char String[100];
uint16_t xval;
uint16_t yval;
DDRA |= (1<<PA0) | (1<<PA2); // ADC0 und ADC2 auf Output
PORTA |= (1<<PA0); // ADC0 auf HIGH
PORTA &= ~(1<<PA2); // ADC2 auf LOW
DDRA = ~(1<<PA1) | (1<<PA3); // ADC1 und ADC3 auf Eingang
_delay_ms(20); // Warten bis Port Stabil (20ms)
yval = readADC(3);
yval = 1024 - yval;
DDRA |= (1<<PA1) | (1<<PA3); // ADC1 und ADC3 auf Output
PORTA |= (1<<PA1); // ADC0 auf HIGH
PORTA &= ~(1<<PA3); // ADC2 auf LOW
DDRA = ~(1<<PA0) | (1<<PA2); // ADC0 und ADC0 auf Eingang
_delay_ms(20); // Warten bis Port Stabil (20ms)
xval = readADC(2);
xval = 1024 - xval;
lcd_ClearScreen();
lcd_GotoXY(1,1);
lcd_SelectFont(Arial, lcd_ReadFontData, BLACK);
sprintf(String, "Y: %i\nX: %i", yval, xval);
lcd_Puts(String);
}
Nun, wenn ich auf meinem Touchpanel rum drücke, ändert sich Y nicht.
Aber X Ändert sich in kleinen Werten.
Bsp.
Mitte vom Touchpanel: Zeigt den Wert X 1005 an.
Links unten vom Touchpanel: Zeigt den Wert X 1000 an.
Rechts unten vom Touchpanel: Zeigt den Wert X 1007 an.
Links oben vom Touchpanel: Zeigt den Wert X 1005 an.
Rechts oben vom Touchpanel: Zeigt den Wert X 1010 an.
Aber die Werte von Y ändern sich nicht...
Nun meine Frage, Touchscreen falsch angeschlossen oder fehler im Code?
Ich hab eine Frage bezüglich meines Codes zum auslesen, von den Werten eines Touchpanels.
Eingesetzter Atmel: Atmega16
Genutzt: Interne AREF Spannung. 2.56V
Gesetzt habe ich den Teilungsfaktor 128, da mein Atmel mit 14,3 Mhz läuft.
Mein Touchpanel hat 4 PINs (X+, X-, Y+, Y-)
Die Pins sind mit PA0-PA3 an meinem Atmega verbunden, jedoch mit Vorschaltung von 4x 470 Ohm Widerständen
Ich lege High auf X+ und X- und messe den Wert mit folgendem Code:
void debug()
{
char String[100];
uint16_t xval;
uint16_t yval;
DDRA |= (1<<PA0) | (1<<PA2); // ADC0 und ADC2 auf Output
PORTA |= (1<<PA0); // ADC0 auf HIGH
PORTA &= ~(1<<PA2); // ADC2 auf LOW
DDRA = ~(1<<PA1) | (1<<PA3); // ADC1 und ADC3 auf Eingang
_delay_ms(20); // Warten bis Port Stabil (20ms)
yval = readADC(3);
yval = 1024 - yval;
DDRA |= (1<<PA1) | (1<<PA3); // ADC1 und ADC3 auf Output
PORTA |= (1<<PA1); // ADC0 auf HIGH
PORTA &= ~(1<<PA3); // ADC2 auf LOW
DDRA = ~(1<<PA0) | (1<<PA2); // ADC0 und ADC0 auf Eingang
_delay_ms(20); // Warten bis Port Stabil (20ms)
xval = readADC(2);
xval = 1024 - xval;
lcd_ClearScreen();
lcd_GotoXY(1,1);
lcd_SelectFont(Arial, lcd_ReadFontData, BLACK);
sprintf(String, "Y: %i\nX: %i", yval, xval);
lcd_Puts(String);
}
Nun, wenn ich auf meinem Touchpanel rum drücke, ändert sich Y nicht.
Aber X Ändert sich in kleinen Werten.
Bsp.
Mitte vom Touchpanel: Zeigt den Wert X 1005 an.
Links unten vom Touchpanel: Zeigt den Wert X 1000 an.
Rechts unten vom Touchpanel: Zeigt den Wert X 1007 an.
Links oben vom Touchpanel: Zeigt den Wert X 1005 an.
Rechts oben vom Touchpanel: Zeigt den Wert X 1010 an.
Aber die Werte von Y ändern sich nicht...
Nun meine Frage, Touchscreen falsch angeschlossen oder fehler im Code?