Forum: Mikrocontroller und Digitale Elektronik GLCD Ram auslesen?


von Christian (Gast)


Lesenswert?

Hallo,

ich habe eine kurze Frage zum auslesen des Rams eines Grafik LCDs.
Ich schreibe im Moment in Assembler eine Routine um einzelne Punkte zu 
setzen, dafür muss ich vorher natürlich jeweils das Byte, in welchem der 
Punkt gesetzt werden soll, auslesen, den Punkt setzen, und das Byte 
wieder schreiben, damit die benachbarten Pixel nicht verändert werden.

Nun steht im Datenblatt zwar welche Pins wie gesetzt werden müssen, um 
den Ram auszulesen, allerdings steht dort nicht, wann die Daten dann 
anliegen.
Konkret meine ich: Muss ich Enable auf High setzen, dann lesen, dann 
Enable auf Low setzen oder muss ich erst Enable auf High, dann wieder 
auf Low setzen und erst dann lesen? Oder komplett anders? Ich habe beide 
genannten Varianten ausprobiert und beide funktionieren anscheinend 
nicht...

Oder ist es vielleicht problematisch, den Port D des Microcontroller vor 
der Leseoperation erstmal auf Eingang zu stellen? Eventuell dauert dies 
einen Augenblick, aber ich habe auch schon einige nops eingefügt...

Hoffe ihr wisst Rat.

Grüße,
Christian

von g457 (Gast)


Lesenswert?

Das hängt stark vom Baustein ab. Schau ins Datenblatt, da gibts 
normaleweise(tm) einen Abschnitt zum Timing. Aus jenem kann man auch die 
Reihenfolge ablesen.

von spess53 (Gast)


Lesenswert?

Hi

Von welchem Display/Displaycontroller redest du?

MfG Spess

von Christian (Gast)


Lesenswert?

Oh sorry, vergessen, es ist ein Powertip PG12864A mit 128x64 Pixeln. 
Controller sind 2xKS0108 bzw. kompatible.

von spess53 (Gast)


Lesenswert?

Hi

Sieh dir das Datenblatt S.9. Dort ist das Timing für Lesen. Bei mir 
steht da zwar 'Fig 3. MPU write timing' drunter. Ist aber für Lesen.
Bist du sicher, das du pixelweises Schreiben brauchst?

MfG Spess

MfG Spess

von Christian (Gast)


Lesenswert?

Ja, pixelweises Schreiben macht die Sache mit frei positionierbaren 
Texten und Grafiken doch sehr viel einfacher.

Und habe ich das Timing Diagramm jetzt richtig verstanden?
Ich muss erst den Enable auf High setzen, dann auf Low, dann R/W auf 
High für Lesen, dann Enable auf High, dann kurze Zeit warten und danach 
die Daten vom Datenport auslesen, danach Enable wieder auf Low setzen.
Irgendwie scheint das nicht so ganz zu stimmen. Ich schreibe ja auch 
anders auf Display als das bei dem Timing Diagramm fürs Schreiben 
angegeben ist, z.b. setze ich den Enable nur einmal statt zweimal...

von spess53 (Gast)


Lesenswert?

Hi

>Ja, pixelweises Schreiben macht die Sache mit frei positionierbaren
>Texten und Grafiken doch sehr viel einfacher.

Aber auch sehr viel langsamer. Ich habe das erst einmal gebraucht.

>Ich muss erst den Enable auf High setzen, dann auf Low, dann R/W auf
>High für Lesen, dann Enable auf High, dann kurze Zeit warten und danach
>die Daten vom Datenport auslesen, danach Enable wieder auf Low setzen.

Der Zustand von E sollte, außer bei Lese- oder Schreiboperationen, immer 
L sein.
Also wenn E=L ist, werden CS,RS und RW gesetzt. Dann E auf H, Daten 
Lesen und E wieder auf L. Fertig.

MfG Spess

von holger (Gast)


Lesenswert?

>Also wenn E=L ist, werden CS,RS und RW gesetzt. Dann E auf H, Daten
>Lesen und E wieder auf L. Fertig.

Noch nicht ganz fertig;)
Beim Lesen muss E zweimal rauf und runter. Siehe Datenblatt Seite 11
Output Register.

von spess53 (Gast)


Lesenswert?

Hi

>Noch nicht ganz fertig;)

Da hast du wohl Recht.

MfG Spess

von Christian (Gast)


Lesenswert?

Das erklärt einiges, so wie spess53 gesagt hat, hatte ich die Routine 
auch erst, natürlich funktionierte sie nicht. Was mir fehlte war die 
Info mit dem zweifachen Enable, danke, werds gleich testen!

von Christian (Gast)


Lesenswert?

Naja funktioniert zwar immer noch nicht vernünftig, aber ich denke das 
liegt weniger an der Lesen-Routine selbst, sondern mehr an dem Rest 
drumherum, was ziemlich schlampig programmiert ist...
Wenigstens weiß ich jetzt den Ablauf, werde dann ein paar Routinen 
nochmal komplett neu und ordentlich schreiben müssen.

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.