um mich in die Funktionen eines Grafik-Displays "einzuarbeiten" habe ich bei Pollin das preisgünstige (billige?) Display Solomon LM6270SYL gekauft (mit T6963). Ich programmiere seit Jahren mit Bascom8051 und habe deswegen, um keine Überraschungen zu erleben, das Musterprogramm genommen. Es passiert aber nichts. Dann habe ich das Programm noch um ein 10 ms langes Reset ergänzt mit dem Erfolg, dass dann ein dünner Strich quer über das Display kurz zu sehen ist. Die Spannungen sind + und - 5V wie angegeben. Verdrahtung ist auch ok (111mal geprüft). Hat jemand Erfahrung mit diesem Display?
Ich nutze das Display in mehreren Projekten. Die LCD-Spannung liegt meist um -9 V. Die Programme erstelle ich mit dem "normalen" Bascom. Die Lib musste ich manuell anpassen, da die Timings zu schnell waren, so dass teilweise murks angezeigt wurde. Das mit den 10ms Reset habe ich nicht verstanden. Evtl ein Verdrahtungsfehler? Die Leitungen dürfen nicht zu lang sein. Hat Bascom8051 eine fertige Lib für diese Displays?
vielen Dank. Also werde ich als erstes die negative Spannung erhöhen, obwohl das Datenblatt ja nicht unbedingt höhere Spannung verlangt. Ich habe ein Reset des Displays eingefügt, weil ich so eindeutige Startbedingungen habe. Die Leitungen sind 15 cm lang, was ja sicher nichts beeinträchtigt. Bascom8051 hat keine lib. Es sind mit dem Befehl "config graphlcd" ja nur Displays 240*64 mit T6963C möglich. Deswegen bin ich auch ratlos, wie da das Timing zu ändern wäre. Ich nehme an, das "normale" Bascom ist BascomAVR? Irgendwann werde ich sicher auch umsteigen müssen.
Jetzt habe ich die negative Spannung auf > 8V erhöht. Da wird das gesamte Display dunkel (bis auf den Rand), aber es tut sich weiterhin nichts. Getestet habe ich noch: mit und ohne Reset, /WR im Programm auf L gesetzt oder wie im Beispiel "unbeachtet". Ich bleibe dran.
Da ich das Display gerade verbaut habe und mir ähnliches passiert ist, kann ich folgendes dazu sagen. Eigentlich ein sehr gutmütiges Display, bis auf die negative Spannung. Im Datenblatt steht wenn ich mich recht entsinne was von typisch -4,5 Volt. Bei dieser Spannung passiert garnix, ab ca -5.5 Volt konnte man erahnen was es werden sollte. Bei -8 Volt war es duster. Also, baue das im Datenblatt gezeichnete Poti ein und stelle es so ein das es gerade noch grau ist, wenn dann die Routinen stimmen mit denen Du das Display beschreibst, sollte sich (wenn auch schemenhaft) die Daten darstellen. Dann einfach nachregulieren und schon passt das. Da ich das Display mit AVRco-PAscal ansteuere wird Dir der Source nicht unbedingt helfen, aber ich stell das mal mit hintendran. Wobei anzumerken ist, die Sourcen waren aus einem Demo des AVRco zum T6963. LCD_WR[@PortC, 5] : bit; LCD_RD[@portC, 4] : bit; LCD_CE[@portC, 3] : bit; LCD_CD[@portC, 6] : bit; LCD_RES[@portC,7] : bit; LCD_DATA_Out[@PortA] : byte; LCD_DATA_In[@PinA] : byte; LCD_DATA_DIR[@DDRA] : byte; function ReadStatus : Byte; var v : byte; begin LCD_Data_Dir:= 0; incl(LCD_CD); NOP; excl(LCD_CE); NOP; excl(LCD_RD); NOP; NOP; NOP; NOP; NOP; NOP; v:= LCD_Data_In; NOP; incl(LCD_RD); NOP; incl(LCD_CE); return(v); end; function ReadData : Byte; var v : byte; begin LCD_Data_Dir:= 0; excl(LCD_CD); NOP; excl(LCD_CE); NOP; excl(LCD_RD); NOP; NOP; NOP; NOP; NOP; NOP; v:= LCD_Data_In; NOP; incl(LCD_RD); NOP; incl(LCD_CE); NOP; incl(LCD_CD); return(v); end; procedure WriteData(v : Byte); begin LCD_Data_Dir:= 255; LCD_Data_Out:= v; NOP; excl(LCD_CD); NOP; excl(LCD_CE); NOP; excl(LCD_WR); NOP; NOP; NOP; NOP; incl(LCD_WR); NOP; incl(LCD_CE); NOP; incl(LCD_CD); NOP; LCD_Data_Out:= 255; NOP; LCD_Data_Dir:= 0; end; procedure WriteCom(v : Byte); begin LCD_Data_Dir := 255; LCD_Data_Out := v; NOP; Incl(LCD_CD); NOP; excl(LCD_CE); NOP; excl(LCD_WR); NOP; NOP; NOP; NOP; incl(LCD_WR); NOP; incl(LCD_CE); NOP; incl(LCD_CD); NOP; LCD_Data_Out := 255; LCD_Data_Dir := 0; end; procedure Status; begin {$X-} // don't simulate, don't execute in simulator while((ReadStatus AND 2) = 0)do endwhile; while((ReadStatus AND 1) = 0)do endwhile; {$X+} end; procedure ComWR(Command : byte); begin Status; WriteCom(Command); end; procedure ComWR2(Data1, Data2, Command : byte); begin Status; WriteData(Data1); Status; WriteData(Data2); Status; WriteCom(Command); end; procedure Address(Value : word); var l, h : byte; begin h:= HI(Value); l:= LO(Value); ComWR2(l, h, Pointer_Address); end;
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.