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
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.
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:
("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?
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.
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.
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ß
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.
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!