Forum: Mikrocontroller und Digitale Elektronik Grafik Display von Pollin


von Dieter S. (dolivo)


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?

von Peter R. (peterfido)


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?

von Dieter S. (dolivo)


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.

von Dieter S. (dolivo)


Lesenswert?

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.

von rage (Gast)


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;

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
Noch kein Account? Hier anmelden.