Grafik Display von Pollin

OP #1592310
Lesenswert?

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?
#1592677
Lesenswert?

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?
OP #1593204
Lesenswert?

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.
Gast #1593794
Lesenswert?

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;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren