Forum: Mikrocontroller und Digitale Elektronik T6963C mit 89s51 grafikmodus ansteuern


von xxmaxx (Gast)


Lesenswert?

Hi@all

ich hab hier ein LCD Display (HY-240128B) 240x128 Pixel mit T6963C 
welches ich an einem ATMEL 89S51 betreibe. Die Initialisierung, 
Pointeradressierung usw. hab ich auch schon hinbekommen. Auch die 
Textausgabe ist kein Problem. Wo ich aber nicht durchblicke ist der 
Grafikmodus. In dem Datenblatt zum T6963C stehen 8 Befehle zum setzten 
der einzelnen Pixel. Der Adressbereich des Pointers hat aber 8x8 Pixel.
Des Weiteren wird es ja ziemlich mühsam jeden Pixel einzeln zu setzen. 
Hab gelesen dass man eine bmp Datei im Ram des Kontrollers speichern 
kann und diese dann an das Display senden kann. Leider hab ich so etwas 
noch nie gemacht. Programmieren möchte ich das alles in Assambler und 
Keil da ich bis jetzt nur mit Keil gearbeitet habe und auch nicht 
unbedingt umsteigen möchte.

THX

von gast (Gast)


Lesenswert?

einzelne pixel is echt etwas krückig ... is aber auch schnellund einfach 
zu realisieren

wie du richtig erkannt hast ist in X richtung die adresse 8 bit breit
in Y richtung kannst du die zeilen direkt per adrese erreichen

du must also eine funktion schreiben die die 240 pixel /8 und je nach 
wert das passende pixel setzt



bmps werden dazu einfach im 8bit format gespeichert
diese 8bit kann man einfcah in den RAM zeilenweise reinhauen


im textmodus hast du 8x8 pixel, im grafikmodus sind das dann 128 zeilen 
zu 40 8bit blöcken

von gast (Gast)


Lesenswert?

30 blöcke ^^ bei 8x8
40 blöcke bei 6x8

von Klaus (Gast)


Lesenswert?

>eine bmp Datei

.bmp ist ein Grafikformat für 3 x 2^8 Farben.
Dein Display hat nur s/w , also " eine Farbe ".

.bmp ist nicht geeignet.
.tif hingegen kann man als "1 Farbe" definieren.

Einzustellen ist korrekte Breite, Höhe, "1 Farbe" ; keine Komprimierung 
!
Die .tif Datei beinhält Zusatzinfos in Form eines "Headers" sowie evtl. 
einen "Footer". Die Nutzdaten stehen also mittendrin.
Die Rohdaten für 240x128 in s/w haben die Länge  240*128/8 = 3840 Bytes.
Es gilt jetzt, die Rohdaten in der .TIF zu finden.
Dazu eine solche .tif mit allen Pixel = weiss sowie eine zweite 
derselben Grösse (240x128) mit allen Pixel = schwarz zu erstellen und 
speichern (am PC).
Durch Vergleich findet man jetzt, wo die Nutzdaten stehen, die wie schon 
gesagt 3840 Bytes Länge haben.
Wichtig: immer dasselbe Programm für die Erstellung der Bilder 
verwenden, z.B. Irfanview. (Später können auch vorhandene echte Bilder 
damit in das passende Format gebracht werden).
Ist die Position der Nutzdaten in der Datei bekannt, muss man diesen 
Teil ausschneiden, das geht z.B. mit WinHex.
Diese Rohdaten speichert man jetzt separat ab, als Extension 
<Datei.ROH>.
Dann nur noch diese Daten in den uC bringen und auf das LCD ausgeben. 
Die Reihenfolge der Daten in der .TIF bzw. .roh ist "zeilenweise", 
beginnend links oben, eine Pixelzeile nach der anderen.
So jedenfalls meine Vorgehensweise, wie vor vielen Jahren praktiziert.

von xxmaxx (Gast)


Angehängte Dateien:

Lesenswert?

Also das mit der y Richtung hab ich verstanden. Nur erscheinen die 
angegebenen Pixel bei mir wenn ich die passende Adresse eingeben 
doppelt. Einmal auf der linken u einmal auf der rechten Seite (Bild) 
Woran könnte das liegen. Adressbereiche von Grafik u Text stimmen.

Zum erstellen der Grafik hab ich mir aus dem Forum das Programm FastLCD 
besorgt nur leider weiss ich jetzt nicht was ich mit der erstellten .bas 
Datei machen muss? Als Image speichern od. als Image Array und dann 
einfach in einem Editor öffnen?

Und egal ob der Pin an FS 1 oder 0 ist, die Schriftbreite bleibt immer 
auf 6x8? Ist Da noch ein zusätzlicher Befehl notwendig?

von gast (Gast)


Lesenswert?

bei meinem LCD ist 6x8 odedr 8x8 mit einem pin außen

je nach dem welche man wählt mus man bei der addressierung aufpassen da 
sich die adressen auch ändern !!
da die ganzen bytes jetz nur noch 6bit lang sind ...
das is bei dem LC teilweise nen bissel krückig

der adressbereich bleibt gleich ..
aber die start und endeadressen für die zeilen ändern sich


bei 8x8 is es einfacher ...

bei 6x8 muss man 240/6 für das setzen der bits rechnen

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.