Hallo zusammen, ich soll die Firmware für ein Projekt mit einem STM32 und einem 320x240 Display schreiben. Das Display hat einen ILI9341-Controller, der per RGB-Interface seine Pixeldaten bekommt. Das funktioniert auch einwandfrei, wenn ich das Display hochkant (also 240x320) konfiguriere. Aber im Projekt soll es Querformat (also 320x240) haben. Jetzt kann ich zwar über MADCTL die Anzeige um 90° drehen, aber ich bekomm es nicht hin, dass der ILI9431 mehr als 240 Pixel pro Zeile annimmt. Ich sehe mit dem Oszi, dass ich 320 Pixel pro HSYNC sende, aber egal, was ich anstelle, der ILI9431 zeigt nur 240 davon an. Die restlichen 80 Pixel sind leer (weiß). Wenn ich die Bildaten per SPI ins RAM des ILI9341 schreibe, kann ich das ganze Bild korrekt ausfüllen, nur per RGB-Interface geht es nicht. Es scheint fast, als würde der ILI9341 im RGB-Interface pro HSYNC nur 240 Pixel akzeptieren und die restlichen einfach ignorieren. Hat jemand Rat? Danke und bleibt gesund Mod: Titel korrigiert.
:
Bearbeitet durch Moderator
Ich habe mal den Titel korrigiert, Du hattest 3 und 4 in ILI9341 vertauscht. Zum Thema: Soviel ich weiß, geht das mit dem Rotate so nicht. Du musst das tatsächlich in Software machen. Das Problem: Du kannst die Schreibrichtung nicht ändern, die bleibt immer gleich. Genau Deine Problembeschreibung hatte ich zufällig vor ein paar Tagen hier in einem älteren Forumsthread gelesen. Ich glaube, es war dieser hier: Beitrag "STM32F407 Black und No-Arduino" Hier konnte "grundschueler" im Landscape-Format auch nur 240x240 beschreiben. Kann aber auch sein, dass sein Problem gelöst wurde. So richtig klar geht das aus dem Thread nicht hervor. Allerdings wurden ihm ein paar wichtige Tipps gegeben, was zu beachten ist.
:
Bearbeitet durch Moderator
Bei mir hat damals das hier funktionert:
1 | // define width and height (depends on rotation)
|
2 | #if ( ILI9341_ROTATE == 0) || ( ILI9341_ROTATE == 180)
|
3 | #define ILI9341_WIDTH 240
|
4 | #define ILI9341_HEIGHT 320
|
5 | #endif
|
6 | #if ( ILI9341_ROTATE == 90) || ( ILI9341_ROTATE == 270)
|
7 | #define ILI9341_WIDTH 320
|
8 | #define ILI9341_HEIGHT 240
|
9 | #endif
|
10 | |
11 | ...
|
12 | |
13 | // change orientation
|
14 | // and set color order
|
15 | ili9341_command( MEMORY_ACCESS_CONTROL); |
16 | #if ILI9341_ROTATE == 0
|
17 | ili9341_data( MEMORY_ACCESS_CONTROL_BGR | MEMORY_ACCESS_CONTROL_MX); |
18 | #endif
|
19 | #if ILI9341_ROTATE == 90
|
20 | ili9341_data( MEMORY_ACCESS_CONTROL_BGR | MEMORY_ACCESS_CONTROL_MV); |
21 | #endif
|
22 | #if ILI9341_ROTATE == 180
|
23 | ili9341_data( MEMORY_ACCESS_CONTROL_BGR | MEMORY_ACCESS_CONTROL_MY); |
24 | #endif
|
25 | #if ILI9341_ROTATE == 270
|
26 | ili9341_data( MEMORY_ACCESS_CONTROL_BGR | MEMORY_ACCESS_CONTROL_MY | MEMORY_ACCESS_CONTROL_MX | MEMORY_ACCESS_CONTROL_MV); |
27 | #endif
|
Frank M. schrieb: > Hier konnte "grundschueler" im Landscape-Format auch nur 240x240 > beschreiben. Prinzipell geht das schon (mit SPI), aber der TO spricht ja vom RGB Interface wo es nicht funktionieren soll. Ich vermute jedoch dass seine SPI- und RGB- Implementierung nicht ganz die gleiche ist.
Frank M. schrieb: > Ich habe mal den Titel korrigiert, Du hattest 3 und 4 in ILI9341 > vertauscht. Oh, danke! > > Zum Thema: Soviel ich weiß, geht das mit dem Rotate so nicht. Du musst > das tatsächlich in Software machen. Hab ich jetzt auch gemacht, war einfacher als ich zuerst befürchtet hatte. Ich habe noch das hier gefunden: https://forum.littlevgl.com/t/littlevgl-stm32f429-ili9341-rotate-landscape-solved/1606 Hab's aber noch nicht näher angeschaut.
Hallo, wenn das Thema auch schon älter ist, im Web taucht ständig die Frage auf, ob man den Display mit dem ILI9341 von Portrait (240x320) auf Landscape (320x240) umstellen kann. Es bezieht sich allerdings auf das RGB Interface, welches mit Pixelclock, HSync, VSync und DE (data enable) arbeitet. Die Antwort ist nein. Bei der Seite, durch obigen Link, wird eine Auflösung von 320x320 gefahren. Gut dann sind genügend Zeilen in der Ausgabe vorhanden und der Display ignoriert vermutlich die weiteren Pixel in der Zeile. Nur ist das halt unnötiger Speicher im Framebuffer. Habe das alles ausprobiert um für mein eigens Projekt den besten Weg zu finden. SPI ist viel zu langsam und beim 8080 16 Bit BUS Interface muss auf den Tearing Effekt geachtet werden. Die Lösung über einen Video Controller zu gehen ist meines Erachtens die beste. Gerade mit den STM32xxx Controller sollte das kein Problem sein. Dann kann man doch das Bild um 90 Grad drehen per Software oder Video DMA. Gruß Sascha
Sascha P. schrieb: > Hallo, wenn das Thema auch schon älter ist, im Web taucht ständig die > Frage auf, ob man den Display mit dem ILI9341 von Portrait (240x320) auf > Landscape (320x240) umstellen kann. Beim ILI9341 mit FSMC-Bus geht das, siehe https://www.mikrocontroller.net/articles/STECCY#Display bzw. https://www.mikrocontroller.net/wikifiles/8/88/Steccy-ili9341.png
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.