T5xx (T500-550 ohne "p") T6x LTN154CT04 WUXGA-Display mit RGB-LED-Backlight aus DELL Precision M4400 einbauen

el-sahef

Active member
Registriert
4 Aug. 2008
Beiträge
1.666
Im DELL Precision M4400 gab es seinerzeit ein WUXGA-Display LTN154CT04 von Samsung mit RGB-LED-Backlight (soweit ich weiß das einzige in 15,4" 16:10), wodurch es laut Kalibriergerät 96 % sRGB und 92% Adobe RGB abdecken kann. Dieses Display im T60/T61/T500 zum Laufen zu bekommen hat mich schon länger gereizt. Seit Anfang diesen Jahres habe ich das Display nun drin. Da ich noch wem einen Post zu diesem Thema schulde hier nun der entsprechende Thread.

Das Hautpproblem bei dem Umbau ist die Tatsache, dass das RGB-Backlight des Displays im M4400 über einen I²C-Bus geregelt wird. In den Thinkpads wird das Backlight jedoch ausschließlich via Backlight_on-Signal und PWM-Signal kontrolliert. Daher war die erste Aufgabe, die I²C-Kommandos, die das M4400 zur Kontrolle des Displays sendet, möglichst vollständig auszulesen. Danach musste eine Firmware geschrieben werden, die die beiden Kontrollsignale vom Thinkpad ausliest und dazu entsprechende I²C-Kommandos an das Display (bzw. dessen RGB-Backlight-Controller) schickt.

Ich habe dafür einen Atmel ATtiny 13 genommen. Im Nachhinein betrachtet hätte ich einen etwas mächtigeren µC mit mehr Flash und I²C in Hardware nehmen sollen. So habe ich dann nämlich ziemlich lange rumprobieren müssen, um die Firmware klein genug zu bekommen, so dass sie noch in den Flash vom ATtiny 13 passte. Die Firmware benutzt die I²C-Library von hier. Die Fuses müssen auf 4,8 MHz eingestellt und die Delay-Funktion in i2cmaster.S entsprechend angepasst werden:
Code:
    .func i2c_delay_T2    ; delay 10.0 us with 2.4 MHz clock  (50 kHz target I2C frequency)
i2c_delay_T2:        ; 3 cycles
      rjmp 1f      ; 2   "
1:    rjmp 2f      ; 2   "
2:    rjmp 3f      ; 2   "
3:    rjmp 4f      ; 2   "
4:    rjmp 5f      ; 2   "  
5:    rjmp 6f      ; 2   "
6:    rjmp 7f      ; 2   "
7:    rjmp 8f      ; 2   "
8:    nop          ; 1   "
      ret          ; 4   "  total 24 cyles = 10.0 us with 2.4 MHz clock
Der I²C-Bus wird im DELL M4400 mit 50 kHz betrieben. Die Delay-Funktion muss eine halbe Periode Delay (in dem Fall also 10 µs) erzeugen. In der main.c wird der Teiler für den Takt auf 1:2 gesetzt, so dass der Takt am Ende 2,4 MHz beträgt. Bei diesem µC-Takt muss die Funktion also 24 Taktzyklen dauern. Mit anderen µCs kann/muss man das natürlich alles entsprechend anpassen.

Das zweite Problem war, dass das Display einen speziellen Stecker mit spezieller Belegung hat. Eigentlich wäre es daher nötig gewesen, die Signale vom Displaystecker am Mainboard des DELL M4400, für den ich den Schaltplan und daher auch die Pinbelegung des Steckers für das Displaykabel habe bis zu ebendiesem Stecker zu verfolgen und so die Pinbelegung des Steckers am Display rauszufinden. Glücklicherweise fand sich aber das Datenblatt eines anderen Displays LP154WP2-TLC2 mit dem gleichen Stecker, welches ebenfalls von DELL in der Precision-M4400-Reihe verbaut war. Mit den Infos daraus konnte dann direkt ein Adapterkabel gelötet werden.

Für die LVDS-Signale und die Stromversorgung gibt es beim Displaystecker Testpunkte auf der Platine, an die sich die Kabel bequem anlöten lassen. Für die Stromversorgung der Hintergrundbeleuchtung und die beiden I²C-Signale findet man dagegen bessere Punkte zum Anlöten in der Gegend des RGB-Backlight-Controllers (Platinenaufdruck beachten). Dies ist ein Mikrocontroller STM32F101T6, der über I²C den angeschlossenen Farbsensor ausliest (auf dem ersten Bild links unten) und je nach Messwert die LED-Treiber für Rot, Grün und Blau entsprechend ansteuert, ebenfalls über I²C.

Interessanterweise ist auf dem Displaystecker auch ein Pin für PWM, allerdings habe ich nicht rausgefunden, wie sich das Backlight über diesen steuern ließe.

Hier die entsprechenden Bilder dazu (zeigen die gesamte Display-Platine):



Die umgebaute Inverterplatine mit dem Mikrocontroller:

cimg2406vexnv.jpg


Pinbelegung des Inverter-Steckers. Für den µC braucht man GND, VCC3M, BL_ON und BL_PWM. Die USB-Leitungen gibt es nicht bei allen Geräten. Wenn man dem Schaltplan vom T61 15,4" Wide Glauben schenke darf dann sollen die USB-Signale bei diesen Geräten am Inverter anliegen. Ich habe aber nicht ausprobiert, ob die wirklich gehen.

invertersteckere2a5m.jpg


Das Display mit Displaykabel. Der Bereich für das Thinklight muss verlängert werden. Außerdem wurde der Webcam-Stecker entfernt und das Kabel wie benötigt geknickt.

cimg2407v5zzy.jpg


So kann man das nun einbauen. Beim Einbau in ein T61 müsste rechts noch was vom Structure-Frame und dem Scharnier im Displaydeckel weggesägt werden, damit es reinpasst. Im T500 reicht der Platz auch so gerade noch.

Hier kann man erahnen, wie überzogen die Farben (besonders Rot) bei nicht farbkorrigierter Darstellung sind, besonders bei dem Hintergrundbild im sRGB-Farbraum. Im Gimp-Fenster wird das gleiche Bild mit aktivem Farbmanagement dargestellt (leider ist auch die Spiegelung einer Leuchtstoffröhre mit drauf).



Hier das Bild mit aktivem Farbmanagement in Gimp auf einem T61 mit LG WUXGA-Display und nachgerüstetem Dual-LED-Backlight (Post dazu) links sowie rechts daneben auf dem T500 mit dem Samsung WUXGA mit RGB-LED-Backlight. Die Unterschiede in der Darstellung kommen auch durch die unterschiedliche Farbtemperatur des Backlight und die unterschiedliche Helligkeit zustande.



Das gleiche Bild ohne Farbmanagement:



Gemessene Farbraumabdeckung (ICC-Profil):

screenshot_iccusblm.jpg


Das, was bei Rot zu viel ist, fehlt bei Blau und Grün, um 100% AdobeRGB abzudecken. Trotzdem dürfte das neben dem Sharp WUXGA eines der besten verfügbaren Displays für diesen Formfaktor sein. Die beiden Hauptnachteile im Vergleich zum LG im T61, was ich vorher im T500 drin hatte, sind die deutlich höhere Minimalhelligkeit und die Glossy-Oberfläche.


EDIT August 2019:

Seit Erstellung des Posts habe ich mittlerweile noch drei weitere Displaydeckel mit dem Display ausgerüstet. Bei allen Displaydeckeln benutze ich mittlerweile den ATtiny85 und einen Step-Up/Step/Down-Converter, damit die Spannung für das RGB-Backlight auch im Akkubetrieb hoch genug ist. Im Folgenden Infos aus PMs von mir zu dem Thema an jemanden, der das nachbauen will:

Firmware für ATtiny85: Download

Pinbelegung:


30 pin CCFL WUXGA50 pin RGB LED WUXGA
1, 10, 13, 16, 19, 22, 25, 28 - GND3, 6, 9, 12, 15, 18, 21, 24, 27 - VSS
2, 3 - VCC32, 33 - VDD
4 - V_EEDID2 - VEEDID
6 - Clk EEDID4 - CLK EEDID
7 - DATA EDDID5 - DATA EEDID
8 - odd Rin0-7 - odd Rin0-
9 - odd Rin0+8 - odd Rin0+
11 - odd Rin1-10 - odd Rin1-
12 - odd Rin1+11 - odd Rin1+
14 - odd Rin2-13 - odd Rin2-
15 - odd Rin2+14 - odd Rin2+
17 - odd CLKIN-16 - odd ClkIN-
18 - odd CLKIN+17 - odd ClkIN+
20 - even Rin0-19 - even Rin0-
21 - even Rin0+20 - even Rin0+
23 - even Rin1-22 - even Rin1-
24 - even Rin1+23 - even Rin1+
26 - even Rin2-25 - even Rin2-
27 - even Rin2+26 - even Rin2+
29 - even CLKIN-28 - even ClkIN-
30 - even CLKIN+29 - even ClkIN+
GND on inverter PCB39, 40, 41, 42 VBL_ (LED power GND)
+20V on inverter PCB44, 45, 46, 47 VBL+ (LED power VCC)
Atmel ATtiny85 pin PB048 SMB_DATA
Atmel ATtiny85 pin PB149 SMB_CLK



SDA from the display to MCU pin PB0 (see datasheet of ATtiny85)
SCL from the display to MCU pin PB1 (not PB2 even if it says SCL in the datasheet for this pin !)
BACKLIGHT_ON from the thinkpad to MCU pin PB3
PWM from the thinkpad to MCU pin PB2
GND to MCU pin 4
VCC3M from pin 11 of the inverter connector (see this image) to MCU pin 8
20V from pins 2, 4, 6 of the inverter connector to VBL+ on the display (pins 44, 45, 46, 47)
GND from pins 8, 10, 12 of the inverter connector to VBL- on the display (pins 39, 40, 41, 42)



The batteries used in the Dell Precision M4400 have 14.4V and the thinkpad batteries only have 10.8V which is not enough for the display. So if you want to use the thinkpad without AC adapter you will also need this voltage converter. At the motherboard display cable connector cut the trace that has the 20V for the display backlight (carries only 10.8V if no AC adapter is attached and the thinkpad runs on battery) and connect the output + of the module to the pins for 20V on the display cable connector and the input + of the module to the trace end. Connect input - and output - to GND on the motherboard. Set the module to 14.4V output voltage. This will ensure you have always 14.4V for the display RGB-LED backlight regardless of the voltage from AC adapter or the battery.
 
Zuletzt bearbeitet:
Tolle Arbeit und vielen Dank fuer die ausfuehrliche Beschreibung!

Wie setzt der ATtiny PWM (vom T500) auf i2c um? Linear? Kannst Du da nicht noch dran drehen, um die Minimal-Helligkeit des Panels abzusenken?
Was steuert man mit i2c bei diesem Panel noch, ausser der Helligkeit? Die Farbtemperatur?
 
Beim W701 konnte man den Farbraum verändern, dazu gab es in Windows einem Treiber-Tab für das Display. Ob das dann über I²C oder die Grafikkarte lief weiß ich aber nicht. Ich habe auch für das M4400 nach sowas gesucht, aber speziell dafür scheint es das nicht gegeben zu haben. Bei den 17"-Geräten und späteren Precisions dann aber schon. Vielleicht liegt es auch daran, dass die 17"-RGB-LED-Displays (wie eben das im W701) 8 Bit für die Farben am LVDS haben und dieses 15,4"-Display wie üblich nur 6 Bit (darum geht das ja überhaupt im T500 usw.).

Ich habe nur Kommandos für Einschalten, Ausschalten und Helligkeit verändern ausgelesen, mehr scheinen im DELL M4400 nicht benutzt zu werden. Vielleicht gibt es noch mehr Einstellmöglichkeiten, aber ich habe ja keine Dokumentation dazu finden können und wie soll ich da drankommen, wenn sie im DELL nicht benutzt werden... Das einzige was ich gefunden habe war das Datenblatt von einem anderen LED-Treiber für normale weiße LEDs, den man via I²C steuern konnte. Der hat teilweise anscheinend die gleichen Register für die selben Optionen (z. B. das Register, in dem die Helligkeit steht, ist bei dem an der gleichen Stelle). Da könnte man jetzt auf gut Glück probieren, aber da war auch nichts interessantes dabei was ich hätte gebrauchen können.

Die PWM lese ich normal mit einem Timer aus. Niedriger als 0x00 kann ich als Helligkeit nicht einstellen. Momentan geht das aber nur beim T61, weil da bei der niedrigsten Stufe die PWM-Periode verdoppelt wird und ich das dadurch erkenne, dass der Timer überläuft, wenn er die Low-Dauer von der PWM misst. Leider ist auch die Timer-Auflösung beim ATtiny13 nicht besonders hoch und man kann die Timer-Periode nur in groben Schritten im Verhältnis zum µC-Takt verändern, weshalb ich auch mit dem µC-Takt selbst rumgemacht habe, um beides so einzustellen, dass das Timerfenster so gut wie möglich die PWM-Periode in den Thinkpads abdeckt.

Beim T500 haben die das aber nicht gemacht mit der doppelten Periodendauer bei niedrigster Stufe, dadurch ist der niedrigste Wert der gesetzt wird glaube ich irgendwas mit 0x2? Der Unterschied ist aber nicht besonders groß, das würde den Bock auch nicht fett machen. An Spezialfällen erkenne ich nur beim T61 die niedrigste Stufe und bei T61 und T500 die höchste (beides durch Timerüberlauf). Ansonsten rechne ich linear um was ich einlese, weil die PWM-Kennlinie von Gerät zu Gerät anders und nicht linear ist, so dass es mit dem sehr begrenzten Flash nicht möglich ist, da zig gerätespezifische Spezialfälle abzufangen.

Vielleicht könnte man noch etwas Platz schinden, wenn ich das alles in Assembler statt C schreiben würde (die I²C-Library von dem Schweizer ist es ja schon), aber das mache ich nicht. Da lohnt es sich eher, wenn ich nochmal einen ATtiny45 oder so kaufen und den tauschen würde. Wie schon geschrieben, es war ein Fehler, keinen größeren ATtiny mit Hardware-I²C und größerem Flash zu nehmen. Dann könnte man auch den Timer mehrfach überlaufen lassen, in Software addieren und so die Auflösung erhöhen.
 
Zuletzt bearbeitet:
Wahnsinn! Glückwunsch dass du es doch noch hinbekommen hast!

Damit sind 16:10 und AdobeRGB endlich zur Realität geworden. Weißt du zufällig ob die ganze Konstruktion auch in einen T60 Deckel passt? Damit würde man die problematischen Scharniere des T61/T500 umgehen und zentriert wäre das Display dann auch noch.
 
Habe gerade mal nachgeschaut. Glücklicherweise habe ich gerade tatsächlich einen (etwas gammeligen) 15,4"-T60-Deckel da. Ja, sollte gehen. An den Scharnieren muss man eventuell die Nasen unten im Bild abfeilen, weil das Display nach unten hin etwas mehr Platz im Displaydeckel braucht. Aber das dürfte ein Kinderspiel sein.

Bei den chinesischen Nachbauscharnieren fürs T61 und T500 soll es aber auch welche geben die so gebaut sind wie die T60-Scharniere, die man ja mit etwas Loctite reparieren kann falls sie ausleiern. Das wäre eventuell auch noch eine Option. Habe mich bisher aber nicht durchringen können, dafür Geld auszugeben. An meinen 15"-4:3-Geräten funktioniert das aber bisher mit den Lenovo-T60-Scharnieren einwandfrei, das Wackeln ist nicht wiedergekommen, seit ich den Stift von betroffenen Scharnieren mit Loctite eingeklebt habe (weiß die Nummer leider nicht auswendig, hieß glaube ich Metallkonstruktionskleber und ist so grünes dünnflüssiges Zeug). EDIT: Loctite 648

 
Zuletzt bearbeitet:
  • ok1.de
  • ok2.de
  • thinkstore24.de
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben