Forum: Mikrocontroller und Digitale Elektronik Programm f. graphisches LCD


von Max (Gast)


Lesenswert?

Hallo,

ich versuche gerade Text auf einem graphischen LCD(Nokia 3510i)
darzustellen.
Ich habe schonmal ein Programm für ein 3310 geschrieben. Wenn man zB
1111 1111 an das LCD schickte
dann erhielt man einen vertikalen Strich(|) der 8 Pixel lang war.

Ein "A" bzw ein Zeichen konnte man dann mit 5 Werten darstellen.

Bei dem 3510i habe ich das Problem, wenn ich den Wert 1111 1111 sende ,
dann wird ein Pixel
dargestellt, dass den Wert 1111 1111 enthält(also schwarz ist)

Habt ihr eine Ahnung, wie ich dies Programmieren kann, damit ich ein
Raster von 5x8 für ein Zeichen erhalte?
Achso: Ich Programmiere mit BASCOM, aber für das Problem ist dies ja
eigentlich egal...(;

Grüße Max

von Ralf (Gast)


Lesenswert?

Hm...
Was passiert, wenn du an die nächste Adresse das gleiche schreibst?
Das müsste doch dann das nächste Pixel sein...

Ralf

von Max (Gast)


Lesenswert?

HI,

ja wenn ich das nochmal sende, dann ist es das nächste.

Ich habe zwei Befehle, mit denen ich die Adresse festlegen kann. Dies
funktiniert auch.

Ich weiß nur nicht, wie mit einer Zahl/Wert (255=1111 1111) nun acht
Pixel in y-Richtung füllen kann

Ich hab mir schon überlegt für jede Zahl ein Muster abzuspeichern, aber
in diesem Programm http://drut.org/lcd/3510i-demo.bas wird dies anders
gelöst. Nur kann ich im Moment mir dem Asii-Wert für zB A (65) nichts
anfangen.

Ich habe auch schon versucht die Kommentare zu übersetzen, um das
Programm verstehen zu können, aber das hat nicht ganz geklappt...

von Ralf (Gast)


Lesenswert?

Ach so, jetzt wird es deutlich...

Also, du weisst ja jetzt, dass du mit einem Byte-Wert ein Pixel
darstellen kannst, und zwar in einer bestimmten Farbe.

Jetzt musst du dir eine Routine schreiben, die einen Buchstaben
ausgibt.

Die Definition der Buchstaben machst du in einer Tabelle.
Wenn das ganze nur schwarz/weiss werden soll, brauchst du bei einer
Buchstabengröße nur 5x8 = 40 Bit = 5 Byte.
Jedes Bit in diesen 5 Byte entspricht dann einem Pixel.
Ein Byte ist dann also der von dir erwähnte "8-Pixel-Balken".

In deiner Ausgabe-Routine sendest du bei jedem gesetztem Bit aus der
Tabelle den Wert 11111111 an das Display, bei gelöschtem Bit eben
00000000.

Wie gesagt, das wäre die Schwarz/Weiss-Lösung.
Musst halt die Adressen vom Display entsprechend richtig zu den
Bit-Koordinaten der Tabelle setzen.
Und die Tabelle muss richtig sein, dass heisst, ein Byte der Tabelle
sind die vertikalen 8 Pixel des Buchstabens.

War das so verständlich?

Ralf

von Max (Gast)


Lesenswert?

Hallo,

vielen DAnk für die Antwort.
Muss ich dann den Wert 255 in einen binären umwandeln 1111 1111 und
dann
bit für bit überprüfen ob es gesetzt oder nicht gesetzt ist.
Ich programmiere ja mit Bascom und würde das dann mit Mid... machen

Habe ich das so richtig verstanden??

GRüße MAx

von Ralf (Gast)


Lesenswert?

1. Der Wert 255 ist binär 11111111, du musst also nix umwandeln.
Ebenso entspricht 0 dem Wert 00000000, 1 entspricht 00000001 usw.
Es handelt sich nur um unterschiedliche Darstellungsweisen des
Compilers/Assemblers/Basic. Intern ist die Darstellung IMMER binär.

2. Du musst eben eine Funktion schreiben die dir ein Bit aus einem Byte
ausliest. Wenn das entsprechende Bit gesetzt ist, dann schickst du 255
oder 0xFF oder eben 1111111 ans Display. Bei gelöschtem Bit
entsprechend 0 oder 0x00 oder 00000000.

Ich weiss nicht, ob Bascom vielleicht schon eine Funktion hat, die dir
einen Bitwert zurückgibt.

Die MID-Funktion kenne ich nur von Visual Basic, und dort arbeitet MID
ja mit einem String (=Text).

In C liest man eine Bitposition so aus:

Bit = Byte & (1 << Bitposition)

Bitposition = 0-7

Die 1 wird entsprechend der Angabe BITPOSITION nach links geschoben.
Dann wird das Ergebnis dieser Schieberei mit dem Byte-Wert logisch
verundet.
Ist das Ergebnis 0, so wird BIT gelöscht, andernfalls gesetzt.

Ralf

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.