Forum: Mikrocontroller und Digitale Elektronik Initialisierung ST7565 LCD Cntroller


von Stefan_KM (Gast)


Lesenswert?

Hallo zusammen.

Ich möchte ein LCD Display 128x64 einsetzen. Dieses wird von dem 
Controller ST7565 gesteuert.

Nun habe ich Schwierigkeiten mit der Initialisierung. Hat jemand schon 
einmal ein Display mit diesem Controller verwendet?

Ich habe schon nach anderen Beiträgen gesucht, jedoch sind diese nicht 
im Infos angefüllt.

Danke euch

von Zwirbeljupp (Gast)


Lesenswert?

Forensuche -> 9 Treffer!!!

von Zwirbeljupp (Gast)


Lesenswert?

>> ...Nun habe ich Schwierigkeiten mit der Initialisierung...
Sorry, aber das klingt wie: ich bin zu Faul selber was zu schreiben und 
der Code, den ich im Internet gefunden habe, läuft nicht ohne Änderungen 
mit meiner Hardware...

Was läuft nicht?
Wie sieht Dein Code aus?

...dann wird Dir auch geholfen!

von Stefan_KM (Gast)


Lesenswert?

Hier kommt mein Code:

void Init_LCD_SW50(void)
{

 RES = 0;
 delay_us(10);
 RES = 1;
 CS1 = 0;                // LCD Enable


 LCD_Command(LCD_Normal);
 LCD_Command(LCD_BIAS9);
 LCD_Command(LCD_Normal);
 LCD_Command(LCD_SetPowerCrtl+7);
 LCD_Command(LCD_BOOSTERRATIO);
 LCD_Command(0);
 LCD_Command(LCD_REGRESISTOR+7);
 LCD_Command(LCD_SetContrast+20);
 LCD_Command(LCD_STATINDMODE+9);
 LCD_Command(9);
 LCD_Command(LCD_ADCNormal);
 LCD_Command(LCD_PageAdr);
 LCD_Command(LCD_ColAdrL);
 LCD_Command(LCD_ON);
 LCD_Command(LCD_START);
}
void LCD_Command (int command)
{
 A0 = 0;
 CS1 = 0;
 RD = 1;
 WR = 0;
 LCD_BUS = command;
 CS1 = 1;
}

Ascnhließend schicke ich Daten an das Display mit:

void LCD_WriteData(int data)
{

 A0 = 1;                                // jetzt kommen Daten
 CS1 = 0;
 RD = 1;
 WR = 0;
 LCD_BUS = data;                        // Daten an PORT
 CS1 = 1;
 return;
}

data ist 65 also ein A.
Leider wird aber nix angezeigt.

Ich bin gerade nochmal dabei, das Datenblatt durch zu lesen, ob ich 
irgend etwas vergessen oder übersehen habe.

von Benedikt K. (benedikt)


Lesenswert?

Stefan_KM wrote:

> data ist 65 also ein A.
> Leider wird aber nix angezeigt.

Dir ist schon klar, dass dies ein Grafikdisplay ist? Es wird daher kein 
A angezeigt sondern nur 2 Pixel gehen an.

von Stefan_KM (Gast)


Lesenswert?

Wäre auch gut, ist aber nicht.

Der Controller hat also keine eigenen Zeichensatz?

von Stefan_KM (Gast)


Lesenswert?

Graphisches Display. Alles klar, muss natürlich byte für byte 
übertragen. Brauche dann ein haufen Tabellen. Hab schon verstanden.
Aber wenn ich 0xFF übergebe, sollte eine senkrechte Linie aus 8 Pixeln 
entstehen. Es passietrt aber nix.

von Benedikt K. (benedikt)


Lesenswert?

Stefan_KM wrote:
> Aber wenn ich 0xFF übergebe, sollte eine senkrechte Linie aus 8 Pixeln
> entstehen. Es passietrt aber nix.

Wenn alles passt, sollte das so sein.
Da sind aber noch einige Fehler im Code:

>  LCD_Command(LCD_STATINDMODE+9);
>  LCD_Command(9);

Wie kommst du auf 9 (bei beiden Befehlen)?
0 wäre besser.


> void LCD_Command (int command)
> {
>  A0 = 0;
>  CS1 = 0;
>  RD = 1;
>  WR = 0;
>  LCD_BUS = command;
>  CS1 = 1;
> }

WR musst auch wieder auf high setzen also in etwa so:

void LCD_Command (int command)
{
 A0 = 0;
 LCD_BUS = command;
 RD = 1;
 CS1 = 0;
 WR = 0;
 asm("nop");
 asm("nop");
 WR = 1;
 CS1 = 1;
}

von Stefan_KM (Gast)


Lesenswert?

Ok, habe ich bereits alles gemacht. Klappt trotzdem nicht.

Sollte vielleicht die Versorgungsspannung für das LCD später 
zugeschaltet werden als für den Reset der Elektronik?

von Benedikt K. (benedikt)


Lesenswert?

Stefan_KM wrote:

> Sollte vielleicht die Versorgungsspannung für das LCD später
> zugeschaltet werden als für den Reset der Elektronik?

In deinem Code verwendest du die interne Spannung (Booster circuit: ON).
Falls du eine externe verwendest, muss der abgeschaltet werden. Die 
Spannung sollte dann später eingeschaltet werden, es funktioniert meist 
aber auch bei gleichzeitigem Einschalten.

von Stefan_KM (Gast)


Lesenswert?

Ok, ich werde mal versuchen die externe Versorgung später zuzuschalten.

von Stefan_KM (Gast)


Lesenswert?

Ist die Reihenfolge der Befehle für die Initialsierung egal? Natürlich 
muss der Reset am Anfang kommen. Und der Rest?

von Benedikt K. (benedikt)


Lesenswert?

Mehr oder weniger.
Der 7565 ist ein recht einfacher Controller, dem ist das meiner 
Erfahrung nach egal.
Wenn du ganz sicher gehen willst, im Datenblatt unterhalb der 
Befehlsübersicht steht die empfohlene Reihenfolge.

von Stefan_KM (Gast)


Lesenswert?

SO habe jetzt die Spannung mal später zugeschaltet als den Rest der 
Elektronik.
Geht immer noch nicht.
Habe ich vielleicht den Startpunkt falsch gewählt außerhalb des 
Sichtbereichs? Dislpay 128x64. Es geht ja bis 136 (wenn ich das 
Datenblatt richtig verstanden habe).

Stimmt vielleicht die Kontrasteinstellung nicht?

von Stefan_KM (Gast)


Lesenswert?

So langsam glaube ich ist das Display im Eimer.

von Stefan_KM (Gast)


Lesenswert?

Also ich glaube das es kaputt ist.

von Stefan_KM (Gast)


Lesenswert?

Wie sieht es aus. Kannst du mir noch weiter helfen Benedikt?

von Stefan_KM (Gast)


Lesenswert?

Eine weitere Frage.

Müßte die Kontrasteinstellung nicht auch ohne Initialiserung 
funktionieren?

von Benedikt K. (benedikt)


Lesenswert?

Stefan_KM wrote:

> Müßte die Kontrasteinstellung nicht auch ohne Initialiserung
> funktionieren?

Nein.
Da das Display intern einen Regler eingebaut hat, bekommt das Display 
erst Spannung wenn man diesen einschaltet.

Falls du an die Kondensatoren (es sollten so etwa 5 Kondensatoren gegen 
Vcc sein) rankommst, dann kannst du messen ob da eine Spannung anliegt. 
Falls ja, dann ist die Spannung eingeschaltet. Falls nein gibt es noch 
ein Problem mit der Ansteuerung.
Die Spannungen sollten je nach Kondensator irgendwo bei 0-10V liegen.

von Stefan_KM (Gast)


Lesenswert?

Ich habe hier ein COG Display. Ich habe die Kodensatoren selber 
bestückt.
Und dort ist ein Spannung zu messen.

von Stefan_KM (Gast)


Lesenswert?

Jedoch fast überall nur 0,5V !?

von Benedikt K. (benedikt)


Lesenswert?

Das heißt dann, dass das Display den LCD_SetPowerCrtl Befehl nicht 
erhält oder die Spannung von extern fehlt, (falls der interne DCDC nicht 
verwendet wird).

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.