Hallo Marc
Ich habe gerade eben ein WaveShare Open407V-D mit einem STM32F4DISCOVERY
bekommen. Auf der CD befinden sich auch ausführbare Beispiele
(D:\data\program\Open407V-D) wie "LCD" oder "TouchPanel", sogar mit
"Keil MDK-ARM Projekt-Datei". Man muss gar nicht denken sondern nur
kompilieren und flashen.
Was ich feststellen musste, ist das gleiche Verhalten wie du es
beschrieben hast: die meisten Koordinaten sind X=153 und Y=0, obwohl auf
dem LCD beim loslassen des Stiftes/der Hand die richtigen Koordinaten
stehen (also die vorletzten Werte)
Ich konnte den Fehler in der Funktion "Coordinate *Read_Ads7846(void)"
lokalisieren (Rückgabewerte ist meist X=1768 und Y=8192. Kann bei jedem
anders sein [1]). Ich habe (noch) keine Ahnung, warum gerade diese
Werte. Der "Treiber" ist auch anderswo benutzt, nicht nur für die
Waveshare Boards [2]. Ev. fragt der "Treiber" zu aggresiv die Position
ab, was dem Touchscreen Controller [3] nicht gefällt und diese
statischen Werte zurückgibt.
In meinem Beispiel habe ich diese zwei Werte ausgeschlossen:
int main(void)
{
char temp[30]= {0};
Coordinate user = { 0, 0 };
Coordinate *xy;
Coordinate xyPrev = { 0, 0 };
TP_Init();
LCD_Initializtion();
LCD_Clear(Black);
TouchPanel_Calibrate();
/* Infinite loop */
while (1) {
xy = Read_Ads7846();
if (xy->x != 1768 && xy->y != 8192) {
getDisplayPoint(&display, xy, &matrix );
TP_DrawPoint(display.x,display.y);
if(user.x != display.x || user.y != display.y) {
sprintf(temp,"User X:%5u,Y:%5u",user.x,user.y);
GUI_Text(10,10,(uint8_t*)temp,Red,Black);
sprintf(temp,"Prev X:%5u,Y:%5u",xyPrev.x,xyPrev.y);
GUI_Text(10,25,(uint8_t*)temp,Green,Black);
sprintf(temp,"Current X:%5u,Y:%5u",xy->x,xy->y);
GUI_Text(10,40,(uint8_t*)temp,Blue,Black);
user.x = display.x;
user.y = display.y;
xyPrev.x = xy->x;
xyPrev.y = xy->y;
}
}
}
}
Ist aber nicht die feine Art... werde mich mal tiefer hineinlesen!
[1]
http://www.embedded.com/design/configurable-systems/4023968/How-To-Calibrate-Touch-Screens
[2]
http://mbed.org/users/frankvnk/code/Mini-DK/file/6816fa47b39e/TouchADS7843/Touch.cpp
[3]
http://www.ti.com/lit/ds/symlink/ads7846.pdf