Forum: Mikrocontroller und Digitale Elektronik Frage an Anwender von Waveshare STM32 Boards und Touch HY32C


von Marc R. (Firma: ich AG) (mrupprath)


Lesenswert?

Hallo;


ich suche Anwender welche zur Programmierung von STM32 Microcontrollern
CooCox IDE und Waveshare Boards verwenden.


Ich habe ein Open 407Z Board und habe mir das mitgelieferte Touch 
Beispiel
angesehen, auf der CD zu finden unter:

"CD":\data\program\Open407Z\TouchPanel\User
hier nochmal die Main routine

int main(void)
{
  TP_Init();
  LCD_Initializtion();
  LCD_Clear(Black);
    TouchPanel_Calibrate();
  /* Infinite loop */
  while (1)
  {
    getDisplayPoint(&display, Read_Ads7846(), &matrix );
      TP_DrawPoint(display.x,display.y);
  }
}


Ich habe die Routine "getdisplaypoint" in meinem eigenen Programm 
verwendet.
Nach Erkennung des Touchevents werden die Koordinaten auf dem Display 
ausgegeben.


Leider scheint es so zu sein, das oft für die Y Koordinate der Wert 0
ermittelt wird.

Ich muß oft mehrfach auf die betreffende Stelle drücken damit für Y ein 
"richtiger Wert" ermittelt wird.

Das Display gehöhte zu Lieferumfang von Waveshare und ist das Modell 
HY32C

Welcher Anwender von STM32 Waveshare Boards kann mir hier Tips geben wie 
man die Touchpunkterkennung verbessern kann.

Gruß


Marc

von Andreas B. (te-bachi)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.