Forum: Mikrocontroller und Digitale Elektronik STM32 EmWin + Touch: Wie realisieren?


von timertick_t (Gast)


Lesenswert?

Bekannterweise fehlen in der STEmWin Library absichtlich die Treiber für 
zB. ein SSD1963 (womit man leben kann) und es existieren nur Fragmente. 
Was aber ist mit der Touch-Unterstützung? Ich habe an der Stelle noch 
keine Infos gefunden. Ohne Touch-Unterstützung sind die Widgets auf 
einem 407 mit 480x272 witzlos. Oder hab' ich nur noch nicht tief genug 
geschürft? Auf dem 429 Discovery laufen die Demos - aber das muß nicht 
zwingend für mich heißen, daß dies auch in der kostenlosen Version von 
emwin der Fall ist...

von Uwe N. (ex-aetzer)


Lesenswert?

timertick_t schrieb:
> Was aber ist mit der Touch-Unterstützung? Ich habe an der Stelle noch
> keine Infos gefunden.

Hm, hattest Du nicht unlängst nach einem Tip für emWIN mit dem STM32F429 
gefragt? Da hast Du doch einen Link auf die Seite von Uwe B erhalten.

Auf dieser Seite ist ALLES erklärt - auch die Sache mit Deinem Touch.
Es gibt sofort lauffähige Demos mit dem STMPE811 und eine gute 
Projektvorlage für das DISCO Board + STemWIN.

Touch-Treiber:
http://mikrocontroller.bplaced.net/wordpress/?page_id=2736

Projektvorlage STemWIN:
http://mikrocontroller.bplaced.net/wordpress/?page_id=3158

Ich rate Dir dringend, die Doku zur emWIN mal zu lesen - die ist recht 
gut.

von timertick_t (Gast)


Lesenswert?

>Auf dieser Seite ist ALLES erklärt
Für einen SSD1963 + XPT2046 ist NICHTS erklärt sondern nur der 
Standard-Kram für das 429er Board. Wobei die Treiber für die Controller 
nicht das Problem ist, das bekommt man über kurz oder lang hin. Als 
problematisch sehe ich das nahtlose Einflechten in Emwin an, das ist mir 
im Moment noch zu fremd.

Das Hallo-Welt hab ich getestet und auf dem 429 hat's ja auch 
funktioniert, auch eine Grafik-Demo, ein YT-Schreiber ging sofort - 
wobei das Umschalten von Portrait auf Landscape die Compile-Zeit durch 
den Code für das ext. RAM  von 3 Sekunden auf 1 Minute erhöht...
Aber das 429er Board kannste mit dem nackigen 407 nicht vergleichen. 
Emwin verwendet die LIN Anbindung für den 429, da ist schon alles drin - 
beim 407 "ohne Alles" mit drr leeren LCDConf_FlexColor_Template sieht 
die Sache aber ganz anders aus. Ich hab den ganzen Sonntag damit 
verbracht Examples zu sondieren.
Das Web ist voller Emwin Demos, aber eigentlich sind das nur geladene 
Bitmaps; Demos die Widgets benutzen hab ich so gut wie keine gesehen. 
Gut möglich, dass das nen Grund hat...

Werd' mal weiter graben.

von Uwe N. (ex-aetzer)


Lesenswert?

Was die Toucheinbindung angeht kann ich vielleicht helfen. Hatte ich die
Tage erst für das F7 Discovery Board gemacht - auch zum ersten Mal :)

emWIN nutzt eine Datenstruktur namens (Typ) GUI_PID_STATE für die
Touchparameter x,y, Zustand (gedrückt/ nicht gedrückt). Diese wird
vom WM_Manager ausgewertet.

Diese musst du zuerst erzeugen:
1
 
2
GUI_PID_STATE Touch_param;
Diese Struktur musst du dann mit deinen Werten vom Touchtreiber füllen, 
so etwa:
1
Touch_param.x = meine_Touchposition_X;
2
Touch_param.y = meine_Touchposition_Y;
Dann die eigentliche Übergabe an emWIN:
1
GUI_MOUSE_StoreState(&Touch_param);
Das wars ;)
Im groben...

In der aktuellen emWIN Doku auf Seite 963 ist das genauer erklärt.


> wobei das Umschalten von Portrait auf Landscape die Compile-Zeit durch
> den Code für das ext. RAM  von 3 Sekunden auf 1 Minute erhöht...

Programmierst Du mit Coocox? Dort ist das ein bekannter Fehler. Du musst 
im Linkerscriptfile "ub_linkerscript_stm32f429i_disco.ld" die Sektion:
1
    .HeapMemSection :
durch
1
    .HeapMemSection(NOLOAD) :
 ersetzen. Das findest Du ganz unten im File.(Projektordner Root).

Dann geht es schneller. Hierzu findest Du auf Uwe B. Seite etwas
genauere Infos irgendwo in seinem Forum.

> Das Web ist voller Emwin Demos, aber eigentlich sind das nur geladene
> Bitmaps; Demos die Widgets benutzen hab ich so gut wie keine gesehen.
> Gut möglich, dass das nen Grund hat...

Auf der Segger Seite findet man im Download Bereich viele Beispiele.

https://www.segger.com/emwin-samples.html

Man kann mit emWIN schon einiges machen.

von timertick_t (Gast)


Lesenswert?

>Touch_param.x = meine_Touchposition_X;
>Touch_param.y = meine_Touchposition_Y;

Ich meine ich hab das heute Mittag bei deinem Namensvetter so ähnlich 
gesehen.

Du hast die neusete Doku, mein
Document: UM03001
Software version: V5.26
ist fast ein Jahr alt. Das hier hab ich in der Doku gefunden:

25.6 Basic buffer access API
GUI_MTOUCH_Enable() Enables use of MT buffer.
GUI_MTOUCH_GetEvent() Polls an event from the MT buffer.
GUI_MTOUCH_GetTouchInput() Returns detailed information about a 
dedicated touchpoint.
GUI_MTOUCH_IsEmpty() Evaluates if the MT buffer is empty.
GUI_MTOUCH_SetOrientation() Can be used to set the touch screen 
orientation.
GUI_MTOUCH_StoreEvent() Puts an event into the MT buffer.

Ich werd' mich morgen mal dransetzen und versuchen das ganze Konstrukt 
zu knacken. Die Widgets sind schön gemacht kein Vergleich zu dem was der 
Schweizer abgeliefert hat - uGRFX(?).

Kann sein, daß ich noch mal Hilfe brauche aber im Mom. sieht's erstmal 
gut aus.

Anyway, Danke für deine Hilfe.

von Uwe N. (ex-aetzer)


Lesenswert?

timertick_t schrieb:
> Du hast die neusete Doku, mein Document: UM03001
> Software version: V5.26 ist fast ein Jahr alt.

Naja, das Prinzip ist ja bei allen Version gleich geblieben...
By the Way - Warum nimmst du nicht die neuere Version v5.28?
Hier drin als Teil der Firmware zu finden:

http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/LN1897/PF261909

Vergiss erstmal GUI_MTOUCH_Enable() und Co, das bezieht sich auf 
Displays mit kapazitivem Touchpanel -> MT = Multi Touch

Nachtrag:
Ach verdammt: bei meinem Beispiel hab ich versehentlich ein Mausbeispiel 
genommen - sollte aber auch gehen - ist nur seltsam :)

Das hier:
GUI_TOUCH_StoreState()
ist besser.

siehe Doku ab Seite 960.

von timertick_t (Gast)


Lesenswert?

Ich hänge im Moment noch an der Hardware fest. Dummes Problem mit dem 
XPT2048, der streut und rauscht wie dolle. Als ob die Folie nicht in 
Ordnung wäre. Wenn ich sie nur leicht betätige und die Pixelposition 
bestimme, springen die Werte häufig nach oben rechts um ca 8..20mm (bei 
nem 480x272 4.3"). Da hilft auch Mittelwertbildung o.ä. nichts wenn von 
zehn Werten neun falsch liegen. Muß erst noch rausfinden was auf der 
dritte Achse mit dem "Pressure Measurement" rauszuholen ist.

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.