Forum: Mikrocontroller und Digitale Elektronik Display an µC


von Thorsten (Gast)


Lesenswert?

Hallo,

ich bräuchte eine Plattform mit Grafikdisplay (320x240 reicht). 
Angezeigt sollen nur Menüs und Messwerte. Ich habe früher mal was mit µC 
gemacht und kann ein paar Programmiersprachen medium gut (C läuft auf 
jeden Fall). Ich würde gerne meine Energie und Zeit in das Produkt 
stecken und nicht in die Ansteuerung des Displays. Ich würde gerne in C 
programmieren (falls das geht).

Fragen: Kann ich da einfach irgendein Arduino Shield mit Display nehemen 
und auch die Arduino Bib verwenden. Ich kenne mich mit Arduino überhaupt 
nicht aus und will auch eigentlich mit irgendeiner sdt lib 
programmieren. Atmegas habe ich mal vor 10 Jahren programmiert, STM32 
Möhren (solls ja auch arduinos geben) kenne ich die sdt lib auch 
einigermaßen.

Also Idee wäre die Arduino bib fürs Display zu klauen, um damit keinen 
Stress zu haben und Rest "normal" zu schreiben. Geht das? -> kenne 
Arduino überhaupt nicht, habe nur gehört dass die tolle Bibs haben die 
man sich sonst erst mühsam suchen müsste. Oft ist es dann auch so, dass 
man doch wieder ran muss da Fehler im Code sind etc.

Habt Dank für Tips, gerne auch konkrete Kaufvorschläge,
Thorsten.

Achja die Anforderungen an den µC sind relativ bescheiden. Cool wäre 32 
Bit (wegen den Timern) muss aber nicht. Rest ist ziemlich egal solange 
er noch ein paar Portpins hat (Messhardware ist alles extern).

von supergrobi (Gast)


Lesenswert?

Was ordentliches um ein derartiges Display softwaeremaessig
zu treiben, waere EMWIN.

Gibts auch fuer ST(M32) von ST.

Die Libs die du da im Auge hast, haben immer ein C++-Beiwerk.
Das wuerde z.B. ich nicht wollen.
Warum wuerdest du selber auch bald feststellen.

Ein LPC1768 kann ein ILI9341-Display bei kuerzer Leitungsfuehrung
mit 50 MHz SPI-Clock betreiben. Das ist dann auch fuer
kommerzielles Zeug, was nur Menues und Ergebnisse darstellen soll,
schnell genug.

von Joachim B. (jar)


Lesenswert?

https://www.adafruit.com/product/1651

arduino m2560 + shield und du kannst in c und c++ loslegen

evtl alternativ einen 32bitter mit Ardu Shield Buchsen
https://www.ebay.de/itm/Klon-Due-SAM3X8E-32-bit-ARM-Cortex-M-Board-kompatibel-Arduino-Clone-/222837754329

von Stefan F. (Gast)


Lesenswert?

Es gibt für Arduino viele Displays und Libraries mit sehr 
unterschiedlicher Qualität. Deswegen empfehle ich diese ausdrücklich 
nicht.

Hier werden immer wieder die Displays von Nextion empfohlen. Sie 
enthalten einen eingebauten Grafik Controller und werden durch Befehle 
über eine serielle Schnittstelle gesteuert.

Die bei Arduino üblichen Displays stellen hingegen nur Pixel dar. Da 
muss der arme kleine Mikrocontroller das ganze Bild selbst berechnen, 
bevor es an das Display übertragen wird. Das kostet eine Menge Speicher, 
mit 8bit AVR Mikrocontrollern machen diese Displays keinen Spaß.

Um eine vernünftige Wahl treffen zu können, solltest Du mal beschrieben, 
was deine Plattform denn alles so können soll. Nur ein Display 
anzusteuern kann nicht der finale Sinn der Aktion sein.

von Bastler (Gast)


Lesenswert?

>Ein LPC1768 kann ein ILI9341-Display bei kuerzer Leitungsfuehrung
>mit 50 MHz SPI-Clock betreiben

Ich habe noch im Kopf dass der ILI9341 max. 10 MHz SPI mitmacht.
Bei mir gab es einzelne Pixelfehler ab 12,x MHz.
Über Temperatur habe ich nie gemessen, nur unter Laborbedingungen.

von Bastler (Gast)


Angehängte Dateien:

Lesenswert?

Hab`s gefunden...

Alles Andere ist außerhalb der Spec. Kann gehen, muss aber nicht!

von supergrobi (Gast)


Lesenswert?

> Ich habe noch im Kopf dass der ILI9341 max. 10 MHz SPI mitmacht.
> Bei mir gab es einzelne Pixelfehler ab 12,x MHz.

Ich schrub ja auch dazu, dass es einer:
> kurzen Leitungsfuehrung
bedarf. Dazu muss das Display so nah wie moeglich am
Controller sitzen.
Pixelfehler wuerde ich sehen, wenn es denn welche geben wuerde.

Ich mache aber auch nur Schreibzugriffe auf das Display.

von Bosk (Gast)


Lesenswert?

supergrobi schrieb:
>> Ich habe noch im Kopf dass der ILI9341 max. 10 MHz SPI mitmacht.
>> Bei mir gab es einzelne Pixelfehler ab 12,x MHz.
>
> Ich schrub ja auch dazu, dass es einer:
>> kurzen Leitungsfuehrung
> bedarf. Dazu muss das Display so nah wie moeglich am
> Controller sitzen.
> Pixelfehler wuerde ich sehen, wenn es denn welche geben wuerde.
>
> Ich mache aber auch nur Schreibzugriffe auf das Display.

Paul Baumann, bist du es? ;-)

von Michael U. (amiga)


Lesenswert?

Hallo,

interessanter Hinweis, ich hatte danach beim ILI9341 mal nicht ins 
Datenblatt geschaut. Am ESP32 bei 40MHz und Zimmertemperatur nach 2-3 
Stunden Darstellungsfehler, mit 27MHz stabil. Da hat der Hersteller aber 
mal recht pessimistische Angaben gemacht.

Gruß aus Berlin
Michael

von W.S. (Gast)


Lesenswert?

Thorsten schrieb:
> ich bräuchte eine Plattform mit Grafikdisplay (320x240 reicht).
> Angezeigt sollen nur Menüs und Messwerte. Ich habe früher mal was mit µC
> gemacht und kann ein paar Programmiersprachen medium gut (C läuft auf
> jeden Fall). Ich würde gerne meine Energie und Zeit in das Produkt
> stecken und nicht in die Ansteuerung des Displays. Ich würde gerne in C
> programmieren (falls das geht).

Fangen wir mal hinten an:

- in C programmieren: sollte OK sein, sofern du es kannst

- Zeit ins Produkt und nicht ins Display: Das siehst du viel zu grob. 
Teile mal das Problem in 3 Teile:
a) die eigentliche Display-Ansteuerung: entweder Port und 
Lowlevel-treiber oder RGB und nur mit dickeren µC nebst ausreichend RAM 
(vorher prüfen)
b) die Gestaltung der grafischen Anzeigefläche, also Kringel malen, 
Flächen füllen, Fonts verwalten und Text zeichnen
c) Menü-System und Menüelemente ausdenken.

- Grafikdisplay 320x240: monochrom oder bunt? Wenn bunt, dann lieber 
480x272 in 4.3", ist verbreiteter. Dafür brauchst du aber nen dickeren 
µC wie LPC178? oder LPC4088 oder so und du brauchst dafür einiges an 
externem RAM, weil der interne dafür nicht ausreicht.

W.S.

von m.n. (Gast)


Lesenswert?

W.S. schrieb:
> Dafür brauchst du aber nen dickeren
> µC wie LPC178? oder LPC4088 oder so und du brauchst dafür einiges an
> externem RAM, weil der interne dafür nicht ausreicht.

Ein STM32F407 reicht völlig aus, um QVGA oder WQVGA mit 256 Farben 
anzusteuern. Externes RAM ist nicht erforderlich!

von Johannes S. (Gast)


Lesenswert?

m.n. schrieb:
> Ein STM32F407 reicht völlig aus,

was in etwa die gleiche M4 Klasse ist wie der LPC4088, nur billiger zu 
bekommen. Beim Chinesen gleich mit Display zum anstecken.
Aber so wie die Frage vom TO gestellt wurde empfehle ich erstmal Alexa 
zu fragen.

Thorsten schrieb:
> Also Idee wäre die Arduino bib fürs Display zu klauen, um damit keinen
> Stress zu haben und Rest "normal" zu schreiben. Geht das? -> kenne
> Arduino überhaupt nicht, habe nur gehört dass die tolle Bibs haben die
> man sich sonst erst mühsam suchen müsste.

Dann wäre der erste Rat sich mal damit zu beschäftigen, klein anzufangen 
und wenn es klappt die weiteren Schritte zu machen und konkret zu 
fragen. Oder bei einer Arduino Bastelgruppe im nächsten Makerspace 
vorbeizuschauen.

von A. S. (Gast)


Lesenswert?

supergrobi schrieb:
> EMWIN

von Segger? Das wären 4-stellige Euros ...

von Michael B. (laberkopp)


Lesenswert?

Thorsten schrieb:
> Fragen: Kann ich da einfach irgendein Arduino Shield mit Display nehemen
> und auch die Arduino Bib verwenden

Der Arduino reicht nicht für 320x240 Graphik.
Das war die Domäne der ARM Prozessoren in früheren Windows-CE Computern.
Wenn du nur Text und Rechtecke und Linien zeichnen lassen willst, kann 
es ein Graphikprozessor machen, aber so bald der uC zeichnen soll, 
brauchst du mehr Rechenleistung und RAM.

supergrobi schrieb:
> Ein LPC1768 kann ein ILI9341-Display bei kuerzer Leitungsfuehrung
> mit 50 MHz SPI-Clock betreiben.

Schau wie lahmarschig das geht: 
https://www.youtube.com/watch?v=z_P5L-dz23Y


Besser: https://www.youtube.com/watch?v=DGmumTezHAs

von supergrobi (Gast)


Lesenswert?

Wer statt mit Argumenten mit utube kommt, braucht sich
hier nicht weiter beteiligen.

"Lahmarschig" ist zudem ein subjektiver Begriff.

Fuer Textausgaben und vektorielle Ausgaben ist es mir schnell
genug und laesst auch noch IOs fuer andere Zwecke als die
Displayansteurung uebrig.

von Philipp K. (philipp_k59)


Lesenswert?

Michael B. schrieb:
> Schau wie lahmarschig das geht:

man kann auch einen Stm32F103/407 nehmen der via DMA SPI Daten wie 
Bilder und Colorfonts zwischen Spi-Flash und ILI-LCD schaufelt.

das ist meine bevorzugte Methode.. wieso hat hier noch keiner Nextion 
erwähnt? (ich nicht)

von Johannes S. (Gast)


Lesenswert?

Philipp K. schrieb:
> wieso hat hier noch keiner Nextion
> erwähnt? (ich nicht)

da hast du den 4. Beitrag von Stefan überlesen

von Harry L. (mysth)


Lesenswert?


von Peter D. (peda)


Lesenswert?

Thorsten schrieb:
> Angezeigt sollen nur Menüs und Messwerte.

Ich würde erstmal ein Text-LCD benutzen. Dann kann man sich voll auf die 
Implementierung der Funktion konzentrieren.
Und wenn man danach noch Lust hat, kann man sich ja immer noch mit einem 
GLCD abplagen. Die Funktion steht ja bereits, man muß also "nur noch" 
die Ausgaben umleiten.

von Thorsten (Gast)


Lesenswert?

Stefanus F. schrieb:
> Um eine vernünftige Wahl treffen zu können, solltest Du mal beschrieben,
> was deine Plattform denn alles so können soll. Nur ein Display
> anzusteuern kann nicht der finale Sinn der Aktion sein.

Im Prinzip nur das Display und Menüsteuern. Einen Drehencoder kann jeder 
µC und Daten empfangen per SPI auch. Mehr brauche ich nicht.

W.S. schrieb:
> - Zeit ins Produkt und nicht ins Display: Das siehst du viel zu grob.
> Teile mal das Problem in 3 Teile:

Damit war gemeint, ich will mich auf meine Kernkompetenzen nutzen und 
wenn es was fertiges gibt gerne nutzen.

m.n. schrieb:
> Ein STM32F407 reicht völlig aus, um QVGA oder WQVGA mit 256 Farben
> anzusteuern. Externes RAM ist nicht erforderlich

Hast du da ein Beispiel?

W.S. schrieb:
> - Grafikdisplay 320x240: monochrom oder bunt? Wenn bunt, dann lieber
> 480x272 in 4.3", ist verbreiteter. Dafür brauchst du aber nen dickeren
> µC wie LPC178? oder LPC4088 oder so und du brauchst dafür einiges an
> externem RAM, weil der interne dafür nicht ausreic

Sorry. Bunt wäre toll, 256 Farben reichen aber aus, wenn das den 
externen Speicher verhindern kann.

Johannes S. schrieb:
> Dann wäre der erste Rat sich mal damit zu beschäftigen, klein anzufangen
> und wenn es klappt die weiteren Schritte zu machen und konkret zu
> fragen.

Dafür suche ich einen Start. Ich habe mir schon ein paar Sachen zu 
Displays durchgelesen und rausgeschrieben. Leider hat mich das etwas 
überfordert. Wenn mir jemand sagt, nimm einen STM32F407 und das Display 
mit paraller Ansteuerung könnte ich damit was anfangen.

Johannes S. schrieb:
> was in etwa die gleiche M4 Klasse ist wie der LPC4088, nur billiger zu
> bekommen. Beim Chinesen gleich mit Display zum anstecken.

Hast du hier mal ein Link. Ich habe gerade ebay durchsucht, konnte aber 
nichts finden. nur einen STM32F103 mit Display der dürft aber etwas 
klein sein. 
https://www.ebay.de/itm/3-2-TFT-Touch-LCD-board-Display-Screen-Panel-STM32-STM32F103VCT6-Dev-Boar/173078599180?hash=item284c49d60c:g:7wEAAOSwaB5XrU2i:rk:51:pf:0


Also stockeln soll es nicht. Anzeigen, Menüs und Messwerte. Ein paar 
Farben reichen aus (von mir aus auch 16), 256 wären aber schöner.
Bevorzuge etwas was es in 5 Jahren auch noch gibt. Also vielleicht kein 
hochintegriertes Display mit speziellem Controller, sondern lieber einen 
µC mit Grafikcontroller und paralleler Ansteuerung. Doofe Frage, die 
ILI9341 kann man nicht parallel ansteuern? Muss man da das Interface 
nutzen?

von Johannes S. (Gast)


Lesenswert?

Thorsten schrieb:
> Hast du hier mal ein Link.

ich benutze das gleiche board wie Harry L., 
https://de.aliexpress.com/item/Free-shipping-STM32F407VET6-development-board-Cortex-M4-STM32-minimum-system-learning-board-ARM-core-board/32618222721.html

Software dazu wäre sein Beispiel oder selber etwas mit STM QubeMX 
generieren.  Dann wird genau dieses Board auch von einigen Arduino cores 
unterstützt. Ich bevorzuge das mbed-os und habe die Adafruit GFX Lib 
dafür angepasst. Ein Menusystem oder GUI Elemente können dann darauf 
aufsetzen, da findet man sicher auch einiges (halb)fertig.

von Wolfgang (Gast)


Lesenswert?

Peter D. schrieb:
> Thorsten schrieb:
>> Angezeigt sollen nur Menüs und Messwerte.
>
> Ich würde erstmal ein Text-LCD benutzen.

Das kommt drauf an, ob die Messwerte in Zahlen- oder Kurvenform 
dargestellt werden sollen.

https://www.ebay.com/itm/401087406846

von Rudolph R. (rudolph)


Lesenswert?

Michael B. schrieb:
> Der Arduino reicht nicht für 320x240 Graphik.

Schau Dir mal an was ein Gameduino 3 ist.

von Timmo H. (masterfx)


Lesenswert?

Michael B. schrieb:
> Schau wie lahmarschig das geht:
> Youtube-Video "LCD driver ILI9341 2.2inch spi 320x240 65k 262k"
Also mit ESP32 und 40 MHz SPI-Clock läuft trotz Freiluftverdrahtung 
super bei mir:
https://drive.google.com/file/d/1z7eFo_Sp65fTyKtbV9RrXaBzKUksBabe/view?usp=sharing

von 8051er (Gast)


Lesenswert?

Thorsten schrieb:
> m.n. schrieb:
>> Ein STM32F407 reicht völlig aus, um QVGA oder WQVGA mit 256 Farben
>> anzusteuern. Externes RAM ist nicht erforderlich
>
> Hast du da ein Beispiel?

Die Rechnung ist doch einfach.
Wenn Du keinen Framebuffer nutzt, dann ist der Speicher fast Wurst und 
es geht auch mit ein paar Kilobyte RAM.
Ein Framebuffer hat aber viele Vorteile. Vor allem kann man dann schön 
DMA nutzen und im Extremfall den kompletten Framebuffer per DMA ins 
DisplayRam übertragen.
320x240x8Bit -> 75kB
320x240x16Bit-> 150kB

Ein grosser STM32F103 (RF/RG) reicht also schon für die 8Bit-Variante.
Ansonsten halt ein F4.
Bei spezifikationsgemäßen 10MHz am ILI9341 kommst Du mit Framebuffer und 
DMA immerhin noch auf 12Hz. Sollte für Deine Zwecke reichen.

> Dafür suche ich einen Start. Ich habe mir schon ein paar Sachen zu
> Displays durchgelesen und rausgeschrieben. Leider hat mich das etwas
> überfordert. Wenn mir jemand sagt, nimm einen STM32F407 und das Display
> mit paraller Ansteuerung könnte ich damit was anfangen.

Parallel geht auch, ist aber etwas aufwendiger. SPI beim ILI9341 ist 
trivial.

> Hast du hier mal ein Link. Ich habe gerade ebay durchsucht, konnte aber
> nichts finden. nur einen STM32F103 mit Display der dürft aber etwas
> klein sein.
> 
https://www.ebay.de/itm/3-2-TFT-Touch-LCD-board-Display-Screen-Panel-STM32-STM32F103VCT6-Dev-Boar/173078599180?hash=item284c49d60c:g:7wEAAOSwaB5XrU2i:rk:51:pf:0

Der hat nur 64kB RAM. Für einen Framebuffer ist das zu wenig. Mit 
trickreicher Porgrammierung kann man auch nur einen rechteckigen 
Ausschnitt ans Display schicken. Du könntest das Bild also in "Etappen" 
aufbauen. Ist halt aufwendig von der Software her. Würde ich mir nicht 
antun.

> Also stockeln soll es nicht. Anzeigen, Menüs und Messwerte. Ein paar
> Farben reichen aus (von mir aus auch 16), 256 wären aber schöner.
> Bevorzuge etwas was es in 5 Jahren auch noch gibt. Also vielleicht kein
> hochintegriertes Display mit speziellem Controller, sondern lieber einen
> µC mit Grafikcontroller und paralleler Ansteuerung. Doofe Frage, die
> ILI9341 kann man nicht parallel ansteuern? Muss man da das Interface
> nutzen?

Der ILI9341 kann sowohl parallel als auch SPI. Parallel ist halt etwas 
aufwendiger (mehr Leiterbahnen bzw. Kabel, aufwendigere 
Initialisierung).

von Stefan F. (Gast)


Lesenswert?

Stefanus F. schrieb:
>> Um eine vernünftige Wahl treffen zu können, solltest Du mal beschrieben,
>> was deine Plattform denn alles so können soll. Nur ein Display
>> anzusteuern kann nicht der finale Sinn der Aktion sein.

Thorsten schrieb:
> Im Prinzip nur das Display und Menüsteuern.
> Einen Drehencoder kann jeder µC und Daten empfangen per SPI auch.

Ja aber das ganze Menü muss ja auch irgendeinen Sinn haben. Was willst 
du denn mit SPI machen? Einen Ethernet Controller ansteuern? Oder ein 
MP3 File von SD Karte abspielen? Oder Messwerte von Sensoren erfassen 
und darstellen?

Irgend einen tieferen Sinn muss das ganze ja haben und davon hängt unter 
Umständen ab, welche Controller geeignet ist. SPI kann nämlich eben 
nicht jeder. Und die es können, haben vielleicht nicht genug Speicher 
oder sind zu langsam.

Auch einen Drehencoder kann man nicht so ohne weiteres an jedes Board 
anschließen. Beim Raspberry Pi dürfte das zum Beispiel schwierig werden 
(wegen Interrupt Handling und fehlender Echtzeit-Fähigkeit). Dann wäre 
auch die Frage nach der Anzahl der Drehencoder.

von m.n. (Gast)


Lesenswert?

Thorsten schrieb:
> m.n. schrieb:
>> Ein STM32F407 reicht völlig aus, um QVGA oder WQVGA mit 256 Farben
>> anzusteuern. Externes RAM ist nicht erforderlich
>
> Hast du da ein Beispiel?

Beitrag "TFT-direct-drive, WQVGA-TFT an STM32F4"
Um es auf den Punkt zu bringen: Der Bildaufbau ist affenschnell!

Thorsten schrieb:
> Also stockeln soll es nicht. Anzeigen, Menüs und Messwerte. Ein paar
> Farben reichen aus (von mir aus auch 16), 256 wären aber schöner.

Viele Farben sind in meinen Augen etwas für verspielte Menschen. In der 
Praxis zeigt sich, daß wenige, prägnante Farben völlig ausreichen. Wer 
mag denn zum Beispiel dunkelblaue Schrift auf schwarzem Hintergrund oder 
gelbe Schrift auf weisser Fläche?
Die üblichen TFTs sind so blickwinkelabhängig, daß feine Farbnuancen 
schon bei kleinen Ablesewinkeln deutlich anders abgebildet werden. Im 
technischen Umfeld stört diese Spielerei eher.
Für meine Anwendungen wichtiger finde ich das Attribut Blinken, das per 
Hardware ausgeführt wird.

> Bevorzuge etwas was es in 5 Jahren auch noch gibt.

Selber verwende ich 5,7" QVGA TFTs von EDT (Glyn), die langfristige 
Lieferbarkeit bei gleicher Steckerbelegung bieten. An anderer Stelle 
hatte ich hier gebrauchte Anzeigen ohne Touch-Folie für einen 10er 
angeboten, dazu auch Leerplatinen. Aber einem fernostorientierten 
Bastler sind selbst diese zu teuer.
Bei 4,3" TFTs gibt es auch eine Vielzahl an Angeboten, die die gleiche 
40-pol. Steckerbelegung aufweisen und damit austauschbar sind.

Wenn Dir kleine Anzeigen <4,3" reichen, dann gibt es billige Angebote, 
deren Leistungsfähigkeit ich aber nicht beurteilen kann und deren 
Verfügbarkeit wohl gewissen Modeerscheinungen unterliegt.
Bessere Hardware wäre ein Discovery-Board (STM32F429 oder STM32F746), 
welche für relativ wenig Geld die komplette Hardware inkl. Display 
bieten.
Nachteilig bei diesen ist allerdings, daß viele IO-Leitungen durch nicht 
benötigte Zusatzhardware blockiert sind. Die Programmierung erfordert 
zudem einigen Aufwand, wenn man nicht gerade eine zusammengeklickte 
Anwendung für den eigenen Bedarf findet.

Ein Beispiel für Verwendung eines STM32F429 Discovery-Boards gibt es 
hier: http://mino-elektronik.de/FM_407/fmeter_407.htm#c1
Direkt danach noch eine Anwendung mit 4,3" und direkter TFT-Ansteuerung: 
http://mino-elektronik.de/FM_407/fmeter_407.htm#c2 Wenn der Winter lang 
und kalt wird, werde ich die Schaltung vielleicht noch einmal richtig 
überarbeiten ;-)

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.