Initialisierung LCD-Kontrast in U-Boot

Diskussionen um Bootloader, Kernel, Busybox
Peri_meter
Interessierter
Interessierter
Beiträge: 54
Registriert: Sonntag 28. Oktober 2001, 00:00

Initialisierung LCD-Kontrast in U-Boot

Beitrag von Peri_meter »

Hi,

Bei meiner NokiaAvia600Sat ist wird vom U-Boot die Kontrasteinstellung des LCD nicht richtig initialisiert. (Display zeigt etwas hellere Flecke im Hintergrund) Ich habe das Problem bei mir folgendermaßen gelöst:

in board/dbox2/lcd.c, in lcd_reset_init() gibt es den Aufruf:

Code: Alles auswählen

lcd_send_cmd (LCD_CMD_SRV, 1);
Nach Änderung in:

Code: Alles auswählen

lcd_send_cmd (LCD_CMD_SRV, 0);
lcd_send_cmd (LCD_CMD_SRV, 1);
ist das einwandfrei. Vielleicht ist jemand so nett und nimmt das ins CVS auf.

Gruß Peri_meter
DieMade
Oberlamer, Administrator & Supernanny
Beiträge: 10532
Registriert: Samstag 13. Juli 2002, 10:49

Beitrag von DieMade »

Checking in boot/u-boot/board/dbox2/lcd.c;
/cvs/tuxbox/boot/u-boot/board/dbox2/lcd.c,v <-- lcd.c
new revision: 1.5; previous revision: 1.4
done
:D
There are 10 types of people in the world: those who know binary and those who don't
Voldemort
Interessierter
Interessierter
Beiträge: 62
Registriert: Mittwoch 7. November 2001, 00:00

Re: Initialisierung LCD-Kontrast in U-Boot

Beitrag von Voldemort »

Peri_meter hat geschrieben:Nach Änderung in:

Code: Alles auswählen

lcd_send_cmd (LCD_CMD_SRV, 0);
lcd_send_cmd (LCD_CMD_SRV, 1);
ist das einwandfrei.
Es freut mich dass Dir mit dieser Änderung geholfen ist.

Leider reagiert eine meiner drei Philips Boxen auf diese Änderung sehr allergisch, das LCD-Display bleibt da schwarz.
Anderen mit älteren Philips Boxen wird es sicher ähnlich gehen.
Das hatten wir schon mal vor 1 bis 2 Jahren.

In der Dbox2 wurden von den 3 Boxen-Herstellern LCD-Displays von mindestens 5 verschiedenen Display-Herstellern verwendet die wiederum Kontroller von mindestens 3 verschiedenen Chip-Herstellern verwendet haben.
Ein Blick in die Datei "lcd.conf" der BN2.01 zeigt mir dass es 6 verschiedene, stark von einander abweichende Grundeinstellungen für den Kontrast gibt.
Die Werte schwanken zwischen 8 und 47 und sind wohl abhängig vom jeweiligen Kontroller und der äußeren Beschaltung des Kontrollerchips.

Wer so was

Code: Alles auswählen

lcd_send_cmd (LCD_CMD_SRV, 0);
lcd_send_cmd (LCD_CMD_SRV, 1);
lcd_send_cmd (0x00, 15);
programmiert, hat im übrigen kein Datenblatt des KS0713 oder der beiden anderen Chips zur Hand gehabt, sondern hat nur was Ausprobiert das dann zufällig das gewünschte Ergebnis gebracht hat.


Mit

Code: Alles auswählen

lcd_send_cmd (LCD_CMD_SRV, 0);
wird genauso wie mit

Code: Alles auswählen

lcd_send_cmd (LCD_CMD_SRV, 1);
wird der Instruktionscode 0x81 an den LCD-Kontroller geschickt.
Dieses ist ein 2-Byte Befehl bei dem der LCD-Kontroller erst das nachfolgende Byte, das mit

Code: Alles auswählen

lcd_send_cmd (0x00, 15);
an den LCD-Kontroller gesendet wird, als Parameter nimmt.
Mit dieser Änderung jedoch wird 0x81 als Parameter an den Kontroller geschickt.
Die obersten zwei Bits werden ignoriert und somit wird 1 als Konrast gesetzt.
Danach wird noch der eigentliche Kontrastparameter an den Kontroller gesendet.
Dieser wird jetzt wieder als Instruktion betrachtet und bei meiner alten Philips wird dadurch das Display völlig abgeschaltet.

Wenn schon was am Kontrast geändert werden muss, dann bitte richtig im Parameterteil, und bitte abhängig vom verwendeten LCD-Display!
Oder ein Mittelwert mit dem jeder Leben kann.

Das LCD-Display wird doch eigentlich schon vom Bootlader vollständig initialisiert.
Welchen Vorteil bringt es eigentlich dass das Display noch mal von U-Boot und danach noch mal vom Kernel vollständig neu initialisiert wird?
Bzw. welchen Nachteil bringt es dieses nicht zu tun?
Der Bootlader der jeweiligen Box initialisiert sein Display doch mit Sicherheit richtig so dass jede nachfolgende neu Initialisierung die nicht die verwendete Hardware berücksichtigt doch nur schlechter sein kann.

Gruß Voldemort
DieMade
Oberlamer, Administrator & Supernanny
Beiträge: 10532
Registriert: Samstag 13. Juli 2002, 10:49

Beitrag von DieMade »

Dann mach ich's halt wieder rückgängig - ist doch kein Beinbruch :D
There are 10 types of people in the world: those who know binary and those who don't
Voldemort
Interessierter
Interessierter
Beiträge: 62
Registriert: Mittwoch 7. November 2001, 00:00

Beitrag von Voldemort »

@ DieMade
Ich verstehe Peri_meter's Problem vollkommen.
Sein Display sieht besch..... aus bis Neutrino gestartet ist.
Es kann aber nicht sein dass andere dann solange nichts sehen

@Peri_meter
Versuche doch mal im Datenteil

Code: Alles auswählen

lcd_send_cmd (0x00, 15);
den Parameter zu ändern.
Der Wert den Du auch in neutrino.conf (lcd_contrast=) findest dürfte der Richtige sein.

Genial wäre es natürlich die neutrino.conf auszulesen und die gefundenen werte zu benutzen.
Zumindest kann man Parameter in ppcboot.conf unterbringen.
Dann kann jeder die Einstellungen nach seinem eigenen Gusto machen.
Mein Display ist mir beim Booten auch etwas zu hell.
Ich werde mal versuchen ob ich das hinkriege.
Wenn's was taugt kann man das dann ja ins CVS übernehmen.

Cu Voldemort
DieMade
Oberlamer, Administrator & Supernanny
Beiträge: 10532
Registriert: Samstag 13. Juli 2002, 10:49

Beitrag von DieMade »

Es kann aber nicht sein dass andere dann solange nichts sehen
Und deshalb ist es auch wieder raus ;)
There are 10 types of people in the world: those who know binary and those who don't
Peri_meter
Interessierter
Interessierter
Beiträge: 54
Registriert: Sonntag 28. Oktober 2001, 00:00

Beitrag von Peri_meter »

Ende gut, alles gut, mit der Änderung des Wertes im Datenteil hat es geklappt. Sorry, dass es Unannehmlichkeiten gegeben hat. Ich dachte, der 2. wert von lcd_send_cmd() wäre der Datenteil. Naja, so kann man sich irren.
Voldemort
Interessierter
Interessierter
Beiträge: 62
Registriert: Mittwoch 7. November 2001, 00:00

Beitrag von Voldemort »

So hier ist mein Versuch den Lcd-Kontrast konfigurierbar zu machen.
Vielleicht kann jemand damit was anfangen.

Leider ist es im derzeitigen u-boot ohne größere Änderungen nicht möglich ppcboot.conf über das Netz zu laden weil zum Zeitpunkt wo die Environment Variablen geladen werden das Netz noch nicht zur verfügung steht, aber aus dem Flash funktioniert es.

Code: Alles auswählen

diff -ru 20030904/boot/u-boot/board/dbox2/lcd.c 20030908/boot/u-boot/board/dbox2/lcd.c
--- 20030904/boot/u-boot/board/dbox2/lcd.c	Wed Apr 23 18:41:43 2003
+++ 20030908/boot/u-boot/board/dbox2/lcd.c	Tue Sep  9 15:21:06 2003
@@ -288,6 +288,13 @@
 {
 	unsigned char *hwi = (unsigned char *) (CFG_FLASH_BASE + CFG_HWINFO_OFFSET);
 
+	char *s; 
+	int lcd_contrast = 15;
+	int lcd_inverse = 0;
+	
+	if ((s = getenv("lcd_contrast")) != NULL){ lcd_contrast = (int)simple_strtoul(s,NULL,8);} 
+	if ((s = getenv("lcd_inverse")) != NULL){ lcd_inverse = (int)simple_strtoul(s,NULL,8);} 
+	
 	lcd_send_cmd (LCD_CMD_RESET, 0);
 
 	udelay (1000*100);
@@ -295,7 +302,7 @@
 	lcd_send_cmd (LCD_CMD_ON, 1);
 	lcd_send_cmd (LCD_CMD_RES, 7);
 	lcd_send_cmd (LCD_CMD_SRV, 1);
-	lcd_send_cmd (0x00, 15);
+	lcd_send_cmd (0x00, lcd_contrast);
 
 	switch (hwi[0])
 	{
@@ -312,7 +319,7 @@
 	lcd_send_cmd (LCD_CMD_ADC, 0);
 	lcd_send_cmd (LCD_CMD_SHL, 0);
 	lcd_send_cmd (LCD_CMD_EON, 0);
-	lcd_send_cmd (LCD_CMD_REVERSE, 0);
+	lcd_send_cmd (LCD_CMD_REVERSE, lcd_inverse);
 	lcd_send_cmd (LCD_CMD_IDL, 0);
 }
 
diff -ru 20030904/boot/u-boot/board/dbox2/dbox2.c 20030908/boot/u-boot/board/dbox2/dbox2.c
--- 20030904/boot/u-boot/board/dbox2/dbox2.c	Thu Mar  6 19:03:03 2003
+++ 20030908/boot/u-boot/board/dbox2/dbox2.c	Mon Sep  8 23:18:24 2003
@@ -132,6 +132,12 @@
 
 	size = fs_fsload ((unsigned long) s, CONFIG_DBOX2_ENV_READ_FS);
 
+	if (size <= 0)
+	{
+		printf ("ready - can't find env in flash\n");
+		return;
+	}
+	
 	while (1)
 	{
 		if (i >= size)
@@ -153,6 +159,10 @@
 			setenv ("bootcmd", &s[valuestart]);
 		else if (!strcmp (&s[namestart], "console"))
 			setenv ("console", &s[valuestart]);
+		else if (!strcmp (&s[namestart], "lcd_contrast"))
+			setenv ("lcd_contrast", &s[valuestart]);
+		else if (!strcmp (&s[namestart], "lcd_inverse"))
+			setenv ("lcd_inverse", &s[valuestart]);
 		else
 			printf ("env: can't set \"%s\"\n", &s[namestart]);
 	}
"ppcboot.conf" könnte dann z.B. so

Code: Alles auswählen

console=ttyS0
lcd_inverse=1
lcd_contrast=8
aussehen.

In "boot/u-boot/include/configs/dbox.h" muß noch die Zeile 96 abgeändert werden damit die ppcboot.conf auch gefunden wird.
und zwar so

Code: Alles auswählen

#define CONFIG_DBOX2_ENV_READ_FS                "1:tuxbox/boot/ppcboot.conf"
für ein Cramfs-Image
oder so

Code: Alles auswählen

#define CONFIG_DBOX2_ENV_READ_FS               "0:boot/ppcboot.conf"
für ein Jffs2Only-Image
zexma
Tuxboxer
Tuxboxer
Beiträge: 2067
Registriert: Mittwoch 6. März 2002, 15:29

Beitrag von zexma »

@Voldemort:
ich hab mal den alten thread
LCD bei Dunkelheit automatisch dimmen wieder ausgegraben.
Könnte man diese Funktion dann denn nicht gleich miteinbauen? *duck* :)
Voldemort
Interessierter
Interessierter
Beiträge: 62
Registriert: Mittwoch 7. November 2001, 00:00

Beitrag von Voldemort »

Im Prinzip ja, aber das Dimmen, also die Regelung der Helligkeit der Led's, wird nicht mit dem LCD-Kontroller gemacht sondern mit dem Frontprozessor.
Ich habe im derzeitigen U-Boot Code nichts gefunden was den Frontprozessor anspricht.
Man müsste also da komplett neue Routinen einfügen.
Den Schuh wollte ich mir eigentlich nicht anziehen.
Die Regelung des Kontrast ist für den kurzen Bootvorgang ausreichend, die meisten brauchen es sowieso nicht.

Und das was Du meinst, die Automatische Helligkeitsregelung ist sowieso erst nach dem booten interessant.
Das muss dann aber in den Linuxtreiber und in die Gui's eingebaut werden.

Wie auch immer "Dein Wunsch war mir Befehl" und ich habe mal mein altes "lcdcmd" ausgraben und um das automatische Dimmen erweitert.
Das automatische Dimmen wollte ich da ja schon vor langer Zeit mal einbauen habe das aber irgendwie aus den Augen verloren.
Eine neue Version von lcdcmd zum Testen inklusive Sourcecode findest Du hier. http://dbox2.wizardnet.de/lcdcmd.zip
Beim Aufruf von lcdcmd ohne Parameter kommt eine kleine Hilfe.
Damit das funktioniert muss aber der FP-Treiber noch angepasst werden.
Eine fertige Version des FP-Treiber's inklusive der Änderungen als Diff findest Du hier http://dbox2.wizardnet.de/dbox2_fp.zip
Du wirst aber Enttäuscht sein, der Regelbereich des Sensors ist nicht gerade Berauschend.
Ich hab das mit der BN_2.01 getestet da ist es auch nicht anders.
Zum Testen musst Du das Zimmer ein bisschen abdunkeln, die Helligkeit stellst Du so ein dass Du das Display gerade noch lesen kannst.
Sobald Du mit einer Taschenlampe rechts neben das Display leuchtest kannst Du beobachten wie das Display heller wird.

Ach ja das automatische Dimmen geht nach meinem Kenntnisstand nicht mit der Nokia.
Bei der Sagem weiß ich's nicht.
Falls es bei Nokia mit der BN_2.01 doch geht müsste mir das jemand sagen.
zexma
Tuxboxer
Tuxboxer
Beiträge: 2067
Registriert: Mittwoch 6. März 2002, 15:29

Beitrag von zexma »

:D
Ich liebe diese "kleinen features"; vor allem wenn diese auch noch auf Anhieb umgesetzt werden und funktionieren. Klasse!
Voldemort hat geschrieben: Die Regelung des Kontrast ist für den kurzen Bootvorgang ausreichend, die meisten brauchen es sowieso nicht.
Full ACK
Voldemort hat geschrieben: Und das was Du meinst, die Automatische Helligkeitsregelung ist sowieso erst nach dem booten interessant.
Das muss dann aber in den Linuxtreiber und in die Gui's eingebaut werden.
Genau das meinte ich. Ist beim Booten natürlich uninteressant; wollte es nur "hier" einbringen weil es so schön passte! :wink:
Voldemort hat geschrieben:Wie auch immer "Dein Wunsch war mir Befehl" und ich habe mal mein altes "lcdcmd" ausgraben und um das automatische Dimmen erweitert.
:D -> s.o.
Voldemort hat geschrieben:Du wirst aber Enttäuscht sein, der Regelbereich des Sensors ist nicht gerade Berauschend.
Also ich hab deine binaries (mit head-image 10.09, akt. cdk-yadd klappte nicht) auf philips und nokia getestet.

-> Auf der philips: funktionierte auf Anhieb. Und im Ggs. zu Deiner Befürchtung ist der Regelbereich IMHO sehr wohl mehr als ausreichend und problemlos auch am Tage (durch bloßes Abdecken der Photodiode)sichtbar! Eben genau den Effekt der gewünscht ist: Nachregelung der LCD-Helligkeit bei Veränderung der Umgebungshelligkeit. Klasse!

-> Auf der nokia: erwartungsgemäß keine Regelung mangels HW.
Beim Start des binaries ändert sich/passiert auf der nokia garnix (auch nix negatives ;-)

-> Sagem: mangels HW müsste das dann mal jemand anderes testen.. <- Zaunpfahl
-> BN: hab ich mir nicht angetan.

Ergo: IMHO sofort ins CVS einchecken :) bevor der Quellcode noch wegkommt; wenn jetzt noch einer die GUI(s) anpasst... *doppelduck*
alexW
Developer
Beiträge: 631
Registriert: Donnerstag 24. Januar 2002, 12:21

Beitrag von alexW »

zexma hat geschrieben:-> Sagem: mangels HW müsste das dann mal jemand anderes testen..
Oh hmm.. kann es sein, dass sich das sehr langsam regelt? :)
alexW
zexma
Tuxboxer
Tuxboxer
Beiträge: 2067
Registriert: Mittwoch 6. März 2002, 15:29

Beitrag von zexma »

alexW hat geschrieben:
zexma hat geschrieben:-> Sagem: mangels HW müsste das dann mal jemand anderes testen..
Oh hmm.. kann es sein, dass sich das sehr langsam regelt? :)
Voldemort hat geschrieben:[...]
Mal mit einer Philips folgenden Test machen:
Helligkeit auf 50 einstellen. (LCD wird ziemlich dunkel)
Mit einer Taschenlampe rechts neben dem Display in das Fenster leuchten.
Im Sekundentakt sollte das Display jetzt heller werden. [..]
http://tuxbox-cvs.sourceforge.net/forum ... ght=#45619

So soll es sein, so ist's bei mir. :wink:
Reicht Dir das nicht? Das Ding soll ja reeeEEEGGGGEEEEELLLllllllnnn und nicht sChWiNgEn.
Oder was meinst Du?
*EDIT* https://lists.berlios.de/pipermail/tuxb ... 13627.html
:P
*EDIT2*
alexW hat geschrieben: Oh hmm.. kann es sein, dass sich das sehr langsam regelt? :)
ARGH, hat zwar gedauert aber jetzt hab' auch ich's kapiert *gg*
Zuletzt geändert von zexma am Donnerstag 11. September 2003, 14:44, insgesamt 2-mal geändert.
alexW
Developer
Beiträge: 631
Registriert: Donnerstag 24. Januar 2002, 12:21

Beitrag von alexW »

zexma hat geschrieben:Oder was meinst Du?
Naja, jetzt weiss ich auch, wieso Hunz und ich damals das Register nicht gefunden hatten :)
alexW
alexW
Developer
Beiträge: 631
Registriert: Donnerstag 24. Januar 2002, 12:21

Beitrag von alexW »

zexma hat geschrieben:wenn jetzt noch einer die GUI(s) anpasst... *doppelduck*
Ist drin, aber mir stellt sich die Frage, was ich beim Einstellen der Helligkeit/Kontrast machen soll, soll ich da das Autodimm deaktivieren, damit man die richtige Helligkeit/Kontrast einstellen kann? Ich denke so ist es besser.
alexW
zexma
Tuxboxer
Tuxboxer
Beiträge: 2067
Registriert: Mittwoch 6. März 2002, 15:29

Beitrag von zexma »

alexW hat geschrieben:
zexma hat geschrieben:wenn jetzt noch einer die GUI(s) anpasst... *doppelduck*
Ist drin, aber mir stellt sich die Frage, was ich beim Einstellen der Helligkeit/Kontrast machen soll, soll ich da das Autodimm deaktivieren, damit man die richtige Helligkeit/Kontrast einstellen kann? Ich denke so ist es besser.
Also mir war bei diesen Einstellungen noch aufgefallen, dass bei aktiviertem "dim", dunkler Umgebung und mit "Helligkeits-Value"=0
das LCD erwartungsgemäß zunächst ganz "dunkel" (sprich == power-off) war. Wird es wieder heller, so zeigt auch das LCD (trotz value=0) wieder was an. Lange Rede.... . -> zum Einstellen von Kontrast/Helligk. ==->IMHO dim = off
btw: wie wäre es denn noch hiermit ->
http://tuxbox-cvs.sourceforge.net/forum ... hp?t=24452 *gg*
*schnellwegrenn*
Voldemort
Interessierter
Interessierter
Beiträge: 62
Registriert: Mittwoch 7. November 2001, 00:00

Beitrag von Voldemort »

@alexW
Danke für deine prompte Realisierung im Neutrino.:D
Allerdings finde ich persönlich die Idee beim einstellen der Helligkeit Autodimm auszuschalten nicht so gut, weil die Einstellung dann sich durch das einschalten von Autodimm wieder verändert und ich so mehrfach probieren muss bis ich die passende Einstellung gefunden habe.
Wenn jemand die Einstellung ohne Autodimm vornehmen möchte gibt es ja noch die möglichkeit einfach Autodimm vorher abzuschalten.
zexma
Tuxboxer
Tuxboxer
Beiträge: 2067
Registriert: Mittwoch 6. März 2002, 15:29

Beitrag von zexma »

alexW hat geschrieben: Ist drin, aber mir stellt sich die Frage, was ich beim Einstellen der Helligkeit/Kontrast machen soll, soll ich da das Autodimm deaktivieren, damit man die richtige Helligkeit/Kontrast einstellen kann? Ich denke so ist es besser.
Hi alexW, hab's mir gestern mal angesehen. Funktioniert astrein.
Vorschlag: IMHO sollte im Soft-Standby der autodim deaktiviert sein (!) (?) -> (obwohl ich mir da auch nicht so ganz schlüssig bin.)
Vorschäge? Meinungen?
Voldemort hat geschrieben: Wenn jemand die Einstellung ohne Autodimm vornehmen möchte gibt es ja noch die möglichkeit einfach Autodimm vorher abzuschalten.
mhh, vermutl. hast du damit recht.