GLCD Ram auslesen?

Gast #1786315
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
Gast #1786334
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
Gast #1786348
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...
Gast #1786368
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
Gast #1786372
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.
Gast #1786392
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!
Gast #1786408
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.

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