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
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.
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
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...
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
>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.
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!
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.