EVE FT800 Touch Funktion

Gast #4205058
Hallo zusammen,
habe das TFT modul ConnectEVE mit dem FT800 chip an meinem PIC32 ans 
laufen bekommen (nur Display Funktionen).

Auch die Funktion zum Kalibrieren des Touch kann ich aktivieren, soweit 
OK.

Aber irgendwie finde ich kein C-Beispiel, wie man die Koordianten des 
Touch auslesen kann?
Bitte um Hilfe.  Danke.
Gruß Dirk
Gast
Da Grafig geht, geh ich mal davon aus, das du irgendeine lib benutzt?
Das heißt du hast auch sowas wie eine ...read32... Funktion?
Jetzt schaust im Datenblatt welche Adresse die Touchregister haben und 
liest sie dir einfach auch. An gleicher Stelle im DB steht auch wie die 
Daten zu interpretieren sind.
Oder geht's dir darum zu schauen, ob ein Objekt welchem einTouchTag 
zugewiesen wurde, getouched wurde?
In diesem Fall siehe oben, nur anderes Register.

Hans
Gast
Hallo Hans,
danke für Deine Antwort!
Ja ich habe bei Microchip eine LIB heruntergeladen und etwas angepasst.

Werde gleich mal die Read32 unktion suchen.

>>>Oder geht's dir darum zu schauen, ob ein Objekt welchem einTouchTag
zugewiesen wurde, getouched wurde?

Was is das denn ? Hat der FT800 etwa eine Funktion, in dem er 
selbstständig erkennt, ob z.B. ein Button gedrückt oder getoggelt wurde 
?

LG Dirk
Gast
Toggeln musst selber machen ( die Slider funktionieren auch so), aber Du 
kannst Objekten eine Tag_ID zuweisen und wenn da wer drauf fingert, 
steht das im REG_TOUCH_TAG (pollen). Alternative kannst dir auch einen 
Interrupt auslösen lassen.

Hans
Gast
Hallo zusammen (oder Hans M.),
das Anwählen von 6 verschiedenen Pages über Buttons habe ich nun 
hinbekommen.
Der FT800 entlastet die MCU schon sehr gut !!

Wie geht das denn jetzt mit den Slidern ?
Muss man dafür die Funktion "Track" verwenden ?
Gruß Dirk
Angehängte Dateien:
Gast
Hallo Dirk,

kannst du mir vielleicht noch eine Hilfestellung geben und zwar wenn ich 
ein Register lesen will so
1
(unsigned int z = rd16(REG_CMD_WRITE);

dann  bleibt bei mir alles bei dem Pfeil unten hängen.

1
    ft_uint16_t rd16(unsigned short long addr){
2
    FT800_StartTransmission();
3
    tr8(addr >> 16);
4
    tr8(addr >> 8);
5
    tr8(addr);
6
    tr8(0); // dummy byte
7
    tr8(0);
8
    ft_uint8_t temp = SSPBUF;
9
    tr8(0);   <----
10
    FT800_StopTransmission();
11
    return ((ft_uint16_t)SSPBUF << 8) | temp;

Hast du oder jemand anders noch eine Idee?

Gruß Franz
Gast
Hallo Franz,
also für einen 32 Bit Zugriff benutze ich direkt die entsprechende 
32-Bit Funktion der o.g. lib.

if (rd8(REG_ID) != 0x7c) state = 0; // Read ID Register, should be 0x7c

if ((calibrated == 0) && (rd32(REG_TOUCH_RAW_XY) != -190))

Mein Display hängt über ein ca. 40 cm langes Flachbandkabel am 
Mainboard.
Vermutlich hierdurch läuft es nur mit bestimmten SPI Frequenzen stabil.
Zur Zeit 500 Khz.
Wesentlich höhere oder kleinere SPI Frequenzen machen nach einigen 
STunden Probleme.....

Gruß Dirk
Gast
Nachtrag:
Nach jedem SPI Transfer unbedingt den Puffer auslesen !!!!

int _dummy;
#define tr8(value)   SPI4BUF = value;while(!SPI4STATbits.SPITBE); _dummy 
= SPI4BUF;
Gast
Hi also kann jetzt per SPI auslesen hat geklappt!!!!  Danke

Wenn ich fragen darf wie geht es mit der TAG_ID Zuweisung bei mir klappt 
das irgendwie gar nicht.

Gruß Franz
Gast
Hallo Franz,
doch das mit den Tags klappt recht gut.

Hier ein Beispiel:

  case 901: if (page == 1) {
    cmd_fgcolor(255, 127, 63);
      } else cmd_fgcolor(55, 127, 63);
      cmd(TAG(1));
      cmd_button(0, 231, 69, 36, 27, 0, "Page 1");
      break;

  case 902: if (page == 2) {
    cmd_fgcolor(255, 127, 63);
      } else cmd_fgcolor(55, 127, 63);
      cmd(TAG(2));
      cmd_button(1 * 80, 231, 69, 36, 27, 0, "Page 2");
      break;



      //----------Touch buttons abfragen. 
Seitenumschaltung-----------------------
  case 2: data = rd8(REG_TOUCH_TAG); // Read Touch Register
      if ((data >= 1) && (data <= 6)) page = data; // Wenn Taste 1...6 
gedrkt wurde
      break;
Gast
Nachtrag:
Wenn Objekte gezeichnet werden, die nicht angeklickt werden sollen, 
verpasse den allen TAG 0 !


      //--------------------Bild1--------------------------------------------
  case 100: cmd(TAG(0));
      cmd_gradient(239, 248, 21, 255, 36, 239, 31, 64, 17, 255);

      break;
Gast
Ich habe es so gemacht nur leider steht im REG_TOUCH_TAG immer nur 0 
drin.
1
    cmd(CMD_DLSTART);
2
    cmd(CLEAR(1, 1, 1));
3
    cmd(TAG(1));
4
    cmd_button(159, 112, 152, 47, 27, 0, "True");
5
    cmd(DISPLAY()); 
6
    cmd(CMD_SWAP);
7
    cmd_exec();

Verstehe es nicht!

Gruß Franz
Gast
Also die Funktion  cmd_track()  benutze ich nicht.
Habe es aber bisher auch nur geschafft, einige Touch buttons zu machen.
Die Slider Funktion geht bei mir auch noch nicht.

Als Anlage mein kompletter Code für das Display, für PIC32 mit XC32 
compiler.
Angehängte Dateien:
Gast
Hallo, ich möchte diesen Beitrag nochmal aufwärmen.

Kann mir jemand einen Tipp geben, wie man die Slider Funktioin nutzen 
kann ?

Also einen Schieberegler, den man per Touch verschieben und dann den 
Wert auslesen kann ?

Danke und Gruß  Dirk

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.