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.
Oh sorry, vergessen, es ist ein Powertip PG12864A mit 128x64 Pixeln. Controller sind 2xKS0108 bzw. kompatible.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.