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
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
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
Jup ;-) und bitte schau dir das mal an: http://www.ftdichip.com/Support/Documents/ProgramGuides/FT800%20Programmers%20Guide.pdf Stichworte: Touch und Tag Hans
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
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
Hallo, habe diesen Link im Microchip forum gefunden: https://github.com/guillaumesmo/FT800 Gruß Dirk
Hallo Dirk, danke für den Link. Kannst du mir sagen wie das mit dem lesen der Register funktioniert komme da irgendwie gar nicht klar. Gruß Franz
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
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
Nachtrag: Nach jedem SPI Transfer unbedingt den Puffer auslesen !!!! int _dummy; #define tr8(value) SPI4BUF = value;while(!SPI4STATbits.SPITBE); _dummy = SPI4BUF;
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
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;
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;
Hallo Dirk, die Funktion cmd_track() brauche ich doch auch wenn ich das richtig verstehe. Gruß Franz
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
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.
Nachtrag: Nach dem Einschalten musst Du den Touch erst kalibrieren, sonnst kannst Du auch keine Objekte anklicken......
Hi also hat alles funktioniert der Fehler lag in der SPI Konfiguration. Danke Danke
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
