Forum: Mikrocontroller und Digitale Elektronik ILI9341 auf RGB umstellen


von Toni N. (toni_n)


Lesenswert?

Hallo,

ich habe ein fertiges Display mit einem ILI9341 Display Controller. 
Eigentlich nichts besonderes. Ich will diesen in den RGB-16-bit Mode 
setzen. Laut Hersteller des Displays ist IM[3:0] auf 0b1110 fest 
verdrahtet.

Laut Datenblatt geht dies unter anderen über:
1
write_command(0x3A);
2
write_data(0x55);

Wenn ich jedoch die Werte mit "Read Display Pixel Format (0x0C)" zurück 
lese, erhalte ich 0x05 anstatt 0x55.

Wenn ich z.B. 0x66 schreibe, erhalte ich 0x06.

Hat jemand eine Idee, was das Problem sein könnte?

Das Datenblatt findet ihr hier: 
https://cdn-shop.adafruit.com/datasheets/ILI9341.pdf

: Bearbeitet durch User
von Forist (Gast)


Lesenswert?

Toni N. schrieb:
> Hat jemand eine Idee, was das Problem sein könnte?

Vielleicht verlinkst du mal das Datenblatt, um den Carbon-Footprint 
deines Threads nicht durch überflüssige Internetrecherche nach dem 
Datenblatt hochzureißen.

von Toni N. (toni_n)


Lesenswert?

Danke! Habe ich hinzugefügt.

von Franz M. (elmo64)


Lesenswert?

Toni N. schrieb:
> Laut Datenblatt geht dies unter anderen über:
> write_command(0x3A);
> write_data(0x55);
>
> Wenn ich jedoch die Werte mit "Read Display Pixel Format (0x0C)" zurück
> lese, erhalte ich 0x05 anstatt 0x55.
>
> Wenn ich z.B. 0x66 schreibe, erhalte ich 0x06.

Zeige uns deinen Schaltplan, das Datenblatt deines Panels (falls 
vorhanden) und deinen Quellcode, inbesondere die Funktionen:
1
Write_command(), write_data(), Read Display Pixel Format ()
("Read Display Pixel Format()" ist definitiv kein Funktionsname)

Toni N. schrieb:
> Laut Hersteller des Displays ist IM[3:0] auf 0b1110 fest
> verdrahtet.

Bedeutet, dass du dein Display im "4-wire 8-bit data serial interface 
II" Modus betreibst (ähnlich SPI).

Toni N. schrieb:
> RGB-16-bit Mode

Was meinst du damit genau? Möchtest du dein Display mithilfe eines 
16-Bit breiten, parallelen Interfaces ansteuern? Möchtest du das RGB 
Interface benutzen und benötigst Hilfe zum DE- und SYNC-Modus? (Dort 
taucht im von Dir verlinkten Datenblatt nämlich das Einzige mal der 
Begriff "RGB Mode" auf) oder möchtest du die Farbtiefe oder Anordnung 
der Bits des Datenstromes verändern?

: Bearbeitet durch User
von Walter T. (nicolas)


Lesenswert?

Toni N. schrieb:
> Wenn ich jedoch die Werte mit "Read Display Pixel Format (0x0C)" zurück
> lese, erhalte ich 0x05 anstatt 0x55.
>
> Wenn ich z.B. 0x66 schreibe, erhalte ich 0x06.
>
> Hat jemand eine Idee, was das Problem sein könnte?

Das passt nicht. 0x0C muss mindestens 16 Bit zurücklesen. 0x06 ist also 
ein unmöglicher Rückgabewert.

Nebenbei: Stell mal einen Link zu Deinem Adafruit-Modul ein. Es gibt 
eins, aus dem man gar nicht auslesen kann.

: Bearbeitet durch User
von Toni N. (toni_n)


Lesenswert?

Hallo,

erst einmal vielen Dank für die schnellen Antworten!

Das Display-Panel ist ein von Datamodul ausgeliefertes Display mit 
Display-Controller, Touch und Backlight.

Franz M. schrieb:
> Zeige uns deinen Schaltplan, das Datenblatt deines Panels (falls
> vorhanden) und deinen Quellcode, inbesondere die Funktionen:

Das Datenblatt dazu kann ich euch leider nicht zur Verfügung stellen. 
Ich werde aber alle wichtigen, möglichen Informationen an euch heran 
tragen.

Quellcode habe ich heute nicht zur Hand. Reiche ich ggf. morgen nach als 
Pseudocode nach.

Franz M. schrieb:
> Toni N. schrieb:
>> RGB-16-bit Mode
>
> Was meinst du damit genau?

Ich möchte das Display über den 16-Bit breiten, parallelen Interface 
(STM32H7 LTDC) ansteuern. Per SPI kann ich zwar Pixel beschreiben und 
sehe diese auch auf dem Display, jedoch funktioniert die Anbindung mit 
LTDC nicht. Ich bin also gerade am suchen ob es am falsch Konfigurierten 
Display-Controller liegt oder wo anders.

Im Datenblatt steht:
> The 16-bit RGB interface is selected by setting the DPI [2:0] bits to “101”.

Ich setze dies auch auf 101. Wenn ich es aber wieder auslese, ist es 
nicht gesetzt. :(

Walter T. schrieb:
> Das passt nicht. 0x0C muss mindestens 16 Bit zurücklesen. 0x06 ist also
> ein unmöglicher Rückgabewert.

Ja, da bin ich prinzipiell bei dir, so sagt es das Datenblatt. Wenn ich 
aber zum Beispiel den Befehl RDDST 09h auslese (auch unter 
Berücksichtigung des Dummy Clock Cycle S.39) stehen schon in den ersten 
32-Bit die benötigten Informationen, obwohl auch hier der 1st Parameter 
mit xxxxxxxx gekennzeichnet ist. Wenn ich die Einstellungen wie z.B. 
Sleep IN/OUT Display ON/OFF setze, tauchen die dort an den richtigen 
stellen auf. So richtig nachvollziehen kann ich die xxxxxxxxx nicht.

Walter T. schrieb:
> Nebenbei: Stell mal einen Link zu Deinem Adafruit-Modul ein. Es gibt
> eins, aus dem man gar nicht auslesen kann.

Ist ein custom made von Datamodul.

von Stefan (Gast)


Lesenswert?

Hallo,
da die Eingänge IM[3:0] auf 0b1110 fest verdrahtet (4-wire 8-bit data 
seriel interface) sind
spielt die Angabe von DPI[2:0] im Commando Pixel Format Set (3Ah) keine 
Rolle und wird ignoriert.
Das steht auch so im Datenblatt im Commando Pixel Format Set (3Ah).

Verdrahte dein ILI9341 auf ein paralleles Interface und es wird 
funktionieren.

Gruß

von Harry L. (mysth)


Lesenswert?

Mit LTDC geht das bei diesen Displays (mit internen Controllern) 
prinzipiell nicht.
Dafür bietet sich das F(S)MC-Interface an.

Beitrag #6854776 wurde vom Autor gelöscht.
von Franz M. (elmo64)


Lesenswert?

Harry L. schrieb:
> Mit LTDC geht das bei diesen Displays (mit internen Controllern)
> prinzipiell nicht.
> Dafür bietet sich das F(S)MC-Interface an.

Der IlI9341 unterstützt einen klassischen "RGB-Modus", wobei Signale, 
wie VSYNC, PIXCLK, etc. genutzt werden.


Stefan schrieb:
> Verdrahte dein ILI9341 auf ein paralleles Interface und es wird
> funktionieren.

Bin ich mir nicht sicher, es scheint so, als ob, um das RGB interface 
nutzen zu können ein seriell konfiguriertes Display vorliegen müsste 
Zitat! Datenblatt TO S.45: "Using RGB interface must selection serial 
interface".


Toni N. schrieb:
> Ich möchte das Display über den 16-Bit breiten, parallelen Interface
> (STM32H7 LTDC) ansteuern. Per SPI kann ich zwar Pixel beschreiben und
> sehe diese auch auf dem Display, jedoch funktioniert die Anbindung mit
> LTDC nicht. Ich bin also gerade am suchen ob es am falsch Konfigurierten
> Display-Controller liegt oder wo anders.


Schaue dir das Interface Control Register (0xF6) an.

von Stefan (Gast)


Lesenswert?

Hallo,

Franz M. schrieb:
> Zitat! Datenblatt TO S.45: "Using RGB interface must selection serial
> interface".

Jetzt verstehe ich erst, er will ein RGB-Interface, war der Meinung er 
will nur DPI[2:0] im Commando Pixel Format Set (3Ah) nutzen, das 
ansonsten nur bei parallelem Interface etwas nützt.

Die RGB-Interfaces werden genutzt indem man zuerst RCM[1:0] und die 
einzelnen Polaritäten hsync, vsync, dotclk, de ... mit Commando
"RGB Interface Signal Control (B0h)" Seite 154 setzt
Erst dann kann das geeignete RGB Interface mit RIM und DPI[2.0] feiner 
gewählt werden (Seite 45)

Da damit alle parallelen Leitungen mit RGB besetzt sind muss natürlich 
ein serielles Interface genutzt werden um irgendwelche Einstellungen per 
Software zu machen.

Hab das bei mir noch nie gemacht aber nach Datenblatt und Beispiel 
sollte
für LTDC des STM32H7.. wahrscheinlich der DE-Mode der geeignete sein.

Siehe auch Beispiel Seite 5 auf ST.COM:

https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwj52KajqdzzAhXQhv0HHSR8BTkQFnoECAcQAQ&url=https%3A%2F%2Fwww.st.com%2Fcontent%2Fccc%2Fresource%2Ftraining%2Ftechnical%2Fproduct_training%2Fgroup0%2F60%2F91%2F6f%2Fdc%2Fa1%2Fa3%2F4e%2F34%2FSTM32H7-Peripheral-LCD_TFT_Controller_LTDC%2Ffiles%2FSTM32H7-Peripheral-LCD_TFT_Controller_LTDC.pdf%2F_jcr_content%2Ftranslations%2Fen.STM32H7-Peripheral-LCD_TFT_Controller_LTDC.pdf&usg=AOvVaw3ixp_yQI8d28JAMzj0Ql43

Statt 8Bit sind aber nur 6bit (7bit) pro Farbe nutzbar

von Toni N. (toni_n)


Lesenswert?

Hallo,

vielen Dank für eure Hilfe.

Der Fehler wurde gefunden und lag an der Kommunikation zwischen 
Displayhersteller und uns.

Bevor die Hardware ausgeliefert wurde, wurde uns das ILI9340 Datenblatt 
zugeschickt. Ich bin stumpf davon ausgegangen, dass das nicht anders 
sein wird als für den ILI9340X (das tatsächlich verbaut ist). Das 
Datenblatt von ILI9340 und ILI9341 sind ja auch sehr ähnlich. 
Entscheidende Register sind doch sehr unterschiedlich zwischen X und 
nicht X.

Jetzt geht zum Glück alles. Danke euch nochmal!

: Bearbeitet durch User
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.