Forum: Mikrocontroller und Digitale Elektronik ILI9341 SPI max FPS performance


von Marco (Gast)


Lesenswert?

Hi Leute,

ich möchte für ein Projekt das ILI9341 Display einsetzen, möchte aber 
ein Videoplayback realisieren, brauche also zumindest mal > 30 fps mit 
dem Teil.

Die Bibliotheken die im Netz rumschwirren sind ja alle nicht so 
performant, weil die relativ oft neu die Frambuffer Adresse neu setzen 
und so.

Meine Idee war jetzt folgende... Ich habe das Datenblatt mal kurz 
überflogen und wollte mal fragen (bevor ich da jetzt viel Zeit 
investiere), ob das so funktioniert:

Ich würde im Ram auf dem uC einen Framebuffer anlegen, also 
320x240x16bpp.

Das Display muss am Anfang einmal initialisiert werden, danach würde ich 
einmalig den Data-Writepointer(für das interne Grafikram) auf den 
Startpunkt 0,0 setzen.
Danach halte ich konstant den D/C Pin auf Data-Mode und SPI-CS auf low 
und würde mittels einer selbst-loopenden DMA die ganze Zeit 
automatisiert den Framebuffer vom uC-RAM ins Display feuern. Anscheinend 
macht der Pointer im LCD-Ram einen auto-wrap, wenn man am Ende 
angekommen ist.

Was meint ihr?
Bei 50 MHz SPI-Clock würde ich da bei ca 40 fps rauskommen, wenn dann 
die SPI dauerhaft läuft.

von Thomas E. (Firma: privat) (iseldur)


Lesenswert?

Marco schrieb:
> Bei 50 MHz SPI-Clock würde ich da bei ca 40 fps rauskommen, wenn dann
> die SPI dauerhaft läuft.

Laut Datenblatt ILI9341 soll ein Clock Cycle im SPI Modus min. 100 ns 
sein. Das entspräche einer Freq. von 10 MHz. Ob der ILI9341 mit 50 MHz 
läuft ist daher fraglich.
Ich würde, wenn es geht, den 8 bit oder 16 bit Mode nehmen.
Im 8 bit Modus würdest du mit deinem Verfahren theoretisch bei max 
zulässiger Freq.(15.15 MHz)auf 98 fps kommen. Im 16 bit Modus 
theoretisch doppelt so viel fps.

Gruß
Thomas

von jo mei (Gast)


Lesenswert?

Marco schrieb:
> Was meint ihr?

Wenn du schnell sein willst und ein weitverbreitetes Display
verwenden willst dann nimm das ILI9341 mit 16-Bit Parallelbus.
Den selben Bus gibt es auch für das ILI9325, beide sind
sich recht ähnlich. Den 16-Bit Bus kann man dann sehr eng
an den Controller anbinden und ist damit deutlich schneller.

320 x 240 schauen schon etwas bescheiden aus, warum nicht
ein Display mit ILI9486 / ILI9488 verwenden, das böte dann
schon 640x480 Bildpunkte? Auch mit 16-Bit-Parallelbus
erhältlich.

von J. S. (jojos)


Lesenswert?

so ein STM32F407 schafft das locker, es gibt ein Chinaboard wo der 
ILI9341 Huckepack draufpasst und mit 16 Bit parallel angebunden ist:
https://de.aliexpress.com/item/4000953664266.html
Ausgabe über das FMC Interface, das braucht dann zum Pixel setzen nur 
einen Write auf eine Speicherzelle.

von jo mei (Gast)


Lesenswert?

Thomas E. schrieb:
> Ob der ILI9341 mit 50 MHz läuft ist daher fraglich.

Üblich sind bei den RaspBerrys auch die ILI9488 Displays
mit SPI, dort geht es wohl etwas schneller zur Sache,
weiss aber gerade nicht wie schnell.

von jo mei (Gast)


Lesenswert?

J. S. schrieb:
> es gibt ein Chinaboard wo der
> ILI9341 Huckepack draufpasst und mit 16 Bit parallel angebunden ist

Bevor es die Huckepack-Version gab hatte ich es schon mit
eigenverantwortlicher Verdrahtung für das ILI9325 und ILI9341
geübt:

Beitrag "Re: STM32F407 Black und Arduino"

von Oliver S. (phetty)


Lesenswert?

Was ist denn die Quelle für dein Video?
Evtl ist ein kleiner HDMI Monitor da einfacher.

von Bernd (Gast)


Lesenswert?

ILI9341 via SPI (10 MHz) und Video?
Nimm was anderes.

Einmal den Bildschirm komplett vollschreiben (320x240) dauerte bei mir 
mit Optimierungen ca. 150 ms.
Das reicht nur für Daumenkino...

von jo mei (Gast)


Lesenswert?

Bernd schrieb:
> Das reicht nur für Daumenkino...

Es ist auch ganz schnell ganz still geworden seitens des TO.
Ein oft beobachtetes Phänomen hier: schnell mal eine "Idee"
gepostet und schnell mal gemerkt dass man auf dem falschen
Dampfer ist. Dann ganz leise werden, gar nichts mehr von
sich geben und bloss nichts zugeben, antworten.

Andere Version ist noch "geschickte(re)s Trollen". Hinweis
dafür wäre "für ein Projekt". Das ist schon ein bisschen
bedeutungslosschwanger.

Marco schrieb:
> ich möchte für ein Projekt .....

Wenn man Grosses vorhat und dafür das Nächstbeste nimmt was
so herumliegt oder angeboten wird dann wird das halt nix. Die
ganze Zeit mit DMA auf SPI ballern bringt wohl doch auch eine
gewisse Performance-Einbusse des Gesamtsystems mit sich,
abhängig natürlich vom verwendeten Controller (der geheim ist
und den wir daher nicht kennen). Nicht jeder Controller hat
soviel interne Busse dass alles gleichzeitig geht.

von olaf (Gast)


Lesenswert?

> Das entspräche einer Freq. von 10 MHz. Ob der ILI9341 mit 50 MHz
> läuft ist daher fraglich.

Das ist korrekt. Die Teile koennen laut Datenblatt wirklich nur
10Mhz und sind damit unbrauchbar. Ich hab hier aber eins mit
40Mhz laufen und das funktioniert. Erstaunlich, aber geht.

Also nix das man produktiv einsetzen kann, fuer eine kleine
private bastelaktion aber vermutlich einen Versuch wert.

Man ist damit uebrigen in Bereichen wo man ueber einen vernuenftig
verlegten Bus und ordentliche Terminierung nachdenken sollte. .-)

Olaf

von 123 (Gast)


Lesenswert?

jo mei schrieb:
> 320 x 240 schauen schon etwas bescheiden aus, warum nicht
> ein Display mit ILI9486 / ILI9488 verwenden, das böte dann
> schon 640x480 Bildpunkte?

ähm, nein, die unterstützen maximal 480x320 und werdenen üblicherweise 
in größeren Displays verbaut. Ob sich das soo deutlich auf die 
Pixelgröße auswirkt, wage ich zu bezweifeln.

von Bernd N (Gast)


Lesenswert?

ILI9341 SPI max FPS performance liegt bei ca. 40 MHz und damit kommst du 
in etwa auf 23 Bilder pro Sekunde.

von jo mei (Gast)


Lesenswert?

123 schrieb:
> ähm, nein, die unterstützen maximal 480x320

Ja, sorry, natürlich 480x320, .... da war ich gerade in
adventlicher Glühwein-Umnachtung ....

Dabei hatte ich ja die Displays selbst schon bis zur
Erschöpfung ausgetestet.

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.