emWin oder LVGL für ePaper?

Gast #7263793
Lesenswert?

Ich hatte vor einiger Zeit hier schon einmal gefragt, finde aber den 
Thread nicht mehr.

Ich habe ein 3-farbiges ePaper-Display mit 400x300 Auflösung, für das 
ich eine Grafikbibliothek suche. Angetrieben wird das von einem 
STM32F411.
Nach einigen Versuchen mit der HAGL 
https://www.appelsiini.net/2020/embedded-graphics-library/ bin ich von 
dieser wieder abgekommen, da die Fontunterstützung doch zu primitiv ist. 
Die HAGL erlaubt nur monospaced-Fonts und die sehen auf dem Display 
alles andere als schön aus. Proportionalschrift und Kerning sollten 
schon sein, idealerweise auch nichtlateinische Schriften 
(Kyrillisch/Arabisch). Was ich nicht brauche, sind dynamische 
GUI-Funktionen, denn die machen auf einem ePaper mit >10s Refreshzeit 
schlicht keinen Sinn.

Nun habe ich mir die Alternativen LVGL und emWin (von ST als STEmWin 
vertrieben) angeschaut. LVGL scheint ziemlich Speicherhungrig zu sein 
und unterstützt anscheinend auch keine 2bpp. 8bpp würden bei meinem 
Display bereits 120kB, also nahezu das gesamte RAM belegen.

emWin scheint da besser zu sein, allerdings scheint es sehr an die 
eigenen Treiber gebunden, die meinen Controller leider nicht 
unterstützen. Allerdings gibt es die Möglichkeit, einen eigenen Treiber 
zu schreiben. Der würde einfach nur einen Puffer im RAM beschreiben, der 
erst dann, wenn ales fertig ist, via SPI zum Display geschickt wird.
Vielleicht hat dies jemand hier im Forum schon mal getan und weiß, wie 
groß der Auwand ist?
#7263817
Lesenswert?

Du könntest dir wenn du bei ST Controllern bleibst auch TouchGFX 
ansehen.
Die folgenden Infos könntest du dir mal zu Gemüte führen.

https://support.touchgfx.com/4.20/docs/development/scenarios/lowering-memory-usage-with-partial-framebuffer

https://support.touchgfx.com/4.20/docs/development/scenarios/touchgfx-on-lowcost-hardware

Fontmäßig werden Sachen wie Kerning unterstützt(ob es da Einschränkungen 
gibt kann ich nicht sagen)
#7263868
Lesenswert?

Mike schrieb:
> LVGL scheint ziemlich Speicherhungrig zu sein
> und unterstützt anscheinend auch keine 2bpp.

RAM brauchst du einen Buffer der min. 10 Zeilen mit kompletter Breite * 
Pixel groß ist. lvgl kann auch 1bb, es gibt ein Beispiel mit dem 
berühmen SSD1306 OLED. Der Trick sind da spezielle Ausgaberoutinen, z.B. 
hier:
https://github.com/lvgl/lvgl_esp32_drivers/blob/master/lvgl_tft/ssd1306.c

lvgl auf OLED hat auch schon jemand gebaut, das war wohl sehr aufwändig 
weil man den partitiellen Refresh nutzen muss. Dazu gibt es einen langen 
Thread im lvgl Forum.
Gast #7263870
Lesenswert?

A. B. schrieb:
> Du könntest dir wenn du bei ST Controllern bleibst auch TouchGFX
> ansehen.
> Die folgenden Infos könntest du dir mal zu Gemüte führen.
>
> 
https://support.touchgfx.com/4.20/docs/development/scenarios/lowering-memory-usage-with-partial-framebuffer
>
> 
https://support.touchgfx.com/4.20/docs/development/scenarios/touchgfx-on-lowcost-hardware
>
> Fontmäßig werden Sachen wie Kerning unterstützt(ob es da Einschränkungen
> gibt kann ich nicht sagen)

Danke für den Tipp. TouchGFX werde ich mir mal anschauen. Partial update 
unterstützt mein Display leider nicht, allein schon wegen der 
Geschwingkeit (< 0.1 fps) muss ich den kompletten Bildinhalt puffern. 
Bei 2bpp sind das 30kB, was kein Problem ist. Dummerweise braucht LVGL 
aber pro pixel ein byte, belegt also das Vierfache.

Alle Grafikbibliotheken scheinen eher auf LCD oder OLED ausgerichtet zu 
sein und wollen mit schnellen Animationen glänzen. Für ePaper ist das 
aber nur unnötiger Ballast
#7263883
Lesenswert?

Mike schrieb:
> Dummerweise braucht LVGL
> aber pro pixel ein byte,

Aber nicht für den gesamten Bildschirminhalt, sondern nur für einen oder 
zwei Buffer, die jeweils nur einige Zeilen enthalten.

J. S. schrieb:
> RAM brauchst du einen Buffer der min. 10 Zeilen mit kompletter Breite *
> Pixel groß ist.

Mit zwei Buffern ist die Idee, dass der eine gerade per DMA 
rausgeschoben wird, während die CPU den anderen vorbereitet.
#7263887
Lesenswert?

Ich weiß ja nicht was du da anzeigen willst. Wenn es zu lahm ist kommt 
es wahrscheinlich zu Tearing. Aber sowas sollte ja nur auffallen wenn 
man da schnell viele Pixel ändert was ja eh nicht geht. Aber es klingt 
jetzt eher so als ob es da bei den Displays noch paar Besonderheiten 
gibt und da kenne ich mich nicht aus

Touchgfx unterstützt 1bpp, 2bpp & 4bpp und im 1bpp Mode wird auch intern 
nur 1bit pro Pixel gespeichert...das hatte ich mal angeschaut
Gast #7265455
Lesenswert?

Ich habe gerade mal STemWin heruntergeladen. Für mein Display wäre der 
GUIDRV_BitPlains - Treiber mit 2bits per pixel geeignet, da er die Bits 
auf zwei verschiedene Framebuffer aufteilt. Leider scheint der in der 
STemWin-Library nicht drin zu sein. Weiß jemand, ob und wie man den 
nachinstallieren kann?
Gast #7266535
Lesenswert?

Harry L. schrieb:
> In der ST-Doku ist auch das PNG-API beschrieben - fehlt aber auch in den
> von ST bereitgestellten Librarys.
Ich hoffe, das zumindest Bitmaps funktionieren, habe das aber noch nicht 
ausprobiert.

> Source gibts prinzipiell von Segger, aber natürlich nicht für lau.
> https://www.segger.com/products/user-interface/emwin/

Zum Glück ist ein Treiber-Template dabei, so dass ich recht einfach 
einen Treiber selbst programmieren konnte.
Dieser schreibt nur in einen Framebuffer, die Übertragung ins Display 
und dessen Refresh mache ich dann von Hand, wenn alles fertig gezeichnet 
ist. Wenig effizient, aber bei einer Framerate von maximal 1-3fpd 
(frames per day) spielt das keine Rolle
#7266539
Lesenswert?

Mike schrieb:
> Ich hoffe, das zumindest Bitmaps funktionieren, habe das aber noch nicht
> ausprobiert.

BMP geht, ebenso wie JPG.

Daß PNG fehlt ist deshalb problematisch, da das das einzige unterstützte 
Format mit Alpha-Kanal ist. (Transparenz)

Mike schrieb:
> Dieser schreibt nur in einen Framebuffer, die Übertragung ins Display
> und dessen Refresh mache ich dann von Hand, wenn alles fertig gezeichnet
> ist. Wenig effizient, aber bei einer Framerate von maximal 1-3fpd
> (frames per day) spielt das keine Rolle

Naja....kann man natürlich machen.
Ich hab auch einige Klimmzüge machen müssen um ein SSD1306 zu 
adaptieren, da die Bitorder von dem Ding bei der ST-Version so nicht 
vorgesehen ist.

Aus all den o.g Gründen arbeite ich mich gerade in LVGL ein.

Das scheint mir ein min. ebenbürtiger Ersatz zu sein, und das ist 
vollst. OpenSource.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren