Forum: Mikrocontroller und Digitale Elektronik ST32 Grafik Display programmieren


von Roman R. (reiter86)


Lesenswert?

Hallo Miteinander,
Ich arbeite mich mal grob in die ST32 Programmierung ein und versuche 
vorab eine Übersicht über die Techniken und Möglichkeiten der 
Grafikprogrammierung zu bekommen, wo sich einige Fragen aufgetan haben. 
Habe bisher nur mit dem Arduino LCD's und OLED's programmiert.

1: Ist es nur mit speziellen ST32-Boards möglich ein GUI mit Qt und 
TouchGFX zu erstellen?

2: Herkömmliche LCD's und OLED's werden sicher genau so programmiert wie 
mit der Arduino IDE?

von erklehr behr (Gast)


Lesenswert?

Roman R. schrieb:
> 1: Ist es nur mit speziellen ST32-Boards möglich ein GUI mit Qt und
> TouchGFX zu erstellen?

Nein.

Roman R. schrieb:
> 2: Herkömmliche LCD's und OLED's werden sicher genau so programmiert wie
> mit der Arduino IDE?

Wenn du erklärst was du unter "genau so programmiert" verstehst kann
man dir vielleicht eine Antwort geben.

Bitte keine Deppenapostrophen!
http://www.deppenapostroph.info

von Johannes S. (Gast)


Lesenswert?

Für touchGFX ist dokumentiert was man für eigene Hardware braucht:

https://support.touchgfx.com/docs/development/hardware-selection/hardware-selection-introduction

https://support.touchgfx.com/docs/development/touchgfx-hal-development/scenarios/scenarios-fmc

Das ist ein gutes allgemeines YT Video zu STM32 Grafik:
https://youtu.be/khh2-voq3Vo

Und https://lvgl.io/ kann ich als Alternative zu den genannten 
empfehlen.

von Stefan F. (Gast)


Lesenswert?

Rein technisch gibt es zahlreiche unterschiedliche Schnittstellen zu den 
Displays. Da gibt es gefühlt fast so viele Protokolle/Befehlssätze wie 
Modelle.

Ob es dir gelingt, alle gewünschten Displays mittels Bilbiothek zu 
abstrahieren, so dass diese alle das gleiche Interface haben, wage ich 
zu bezweifeln.

Die Adafruit GFX Bibliothek macht vor, wie man so etwas angehen kann. 
Ich finde sie gut. Aber in meinen Anwendungen hatte ich bisher immer 
gute Gründe, sie nicht zu benutzen.

von Johannes S. (Gast)


Lesenswert?

AdafruitGFX oder die U8g Libraries sind aber eine andere Liga, die 
bieten 'nur' Primitive zum Zeichnen von z.B. Linien, Kreisen, Texten. 
Bei touchGFX, Qt, lvgl, emWin gibt es high level Komponenten die dann 
Widget o.ä. heißen und damit ein GUI definieren.
Die Frage ist da nicht
> Ist es nur mit speziellen ST32-Boards möglich
sondern welche Boards sind für die gewünschen Libs geeignet. Die 
schicken Animationen sehen bescheiden aus wenn die Daten nicht schnell 
genug in das Display geschaufelt werden können.
touchGFX verwendet C++, das mag ich, es ist aber durch das MVC aufwändig 
einen Button einfach mit einer Funktion zu belegen. Ich habe das auch 
mal ausprobiert, da gab es den Designer noch nicht und alles war 
Handarbeit. Das war mir einen touch too much und mir gefällt lvgl jetzt 
ganz gut. Ist zwar plain C und deshalb erstmal viel probieren welche 
Objekte (lvgl baut ein bisschen C++ und CSS nach) welche Styles und 
Eigenschaften haben, aber das ist gut durchschaubar. Den Simulator in VS 
unter Windows zu kompilieren sind wenige Klicks, und auch unter Linux 
kann man den Simulator bauen und damit wird das Probieren erträglicher. 
Der Simulator verwendet dabei den gleichen Code und auf dem µC sieht das 
Ergebnis dann gleich aus.
Basis ist aber auch hier ein µC oder Board mit genug Speicher und 
schnellem Displayinterface. Der ESP32 oder RPi Pico sind da auch gute 
Kandidaten, da gibt es auch schon schöne Projekte.

von Olaf (Gast)


Lesenswert?

> Ob es dir gelingt, alle gewünschten Displays mittels Bilbiothek zu
> abstrahieren, so dass diese alle das gleiche Interface haben, wage ich
> zu bezweifeln.

Ich mache das jetzt schon bestimmt seit 20Jahren mit allen Display die 
mir in die Finger gefallen sind. Letztlich laeuft es auf setpixel(x,y) 
hinaus. .-)

Olaf

von Johannes S. (Gast)


Lesenswert?

Olaf schrieb:
> Letztlich laeuft es auf setpixel(x,y)
> hinaus. .-)

was bei ILI & Co aber sehr lahm wird weil da mehr Verwaltung (setze 
Schreibadresse auf x,y) übertragen wird als Daten. Deshalb haben die GUI 
Libs da eine flush_buffer Funktion die nur einmal das Schreibfenster 
setzen und dann die Pixeldaten eines (partitiellen) Framebuffers 
raushauen. Was dann auch gut per DMA geht.

von Stefan F. (Gast)


Lesenswert?

Olaf schrieb:
> Letztlich laeuft es auf setpixel(x,y) hinaus.

Wenn man sich auf den kleinsten gemeinsamen Nenner beschränkt, ist die 
Abstrahierung einfach. Aber auch super lahm. So weit waren wir mal beim 
PC, bevor DirectX und OpenGL eingeführt wurde.

Zum Beispiel lässt sich sanftes Scrolling so nicht auf einem SSD1306 
implementieren, wohl aber mit einem Framebuffer.

von Roman R. (reiter86)


Lesenswert?

D.h. wenn ich schöne GUI's erstellen möchte verwende ich das 
Entwicklungsboard welches von Qt oder TouchGFX unterstützt wird, wo ich 
gezwungen bin den ganzen Kit so zu nehmen wie er ist!?

Wenn ich das nicht mit herkömmlichen Displays mache bleibt die alte 
Laier wie setPixel(x,y,color)...

von Johannes S. (Gast)


Lesenswert?

nein, du sollst nur nicht erwarten das du auf einem Arduino Nano ein 
touchGFX laufen lassen kannst.

von erklehr behr (Gast)


Lesenswert?

Roman R. schrieb:
> wenn ich schöne GUI's erstellen möchte

.... auch dann sollst du keine Deppenapostrophen verwenden.

erklehr behr schrieb:
> Bitte keine Deppenapostrophen!
> http://www.deppenapostroph.info

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.