PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu Lcd Ausgaben



Blamaster
20.02.2008, 16:40
Hallo,

ich hab folgende 3 Probleme.

Ich möchte mithilfe eines Lcd´s ein Display Menü umsetzen. Das hat soweit auch schon super geklappt.

Nun soll es aber noch einige "verfeinerungen" geben.

Die im Display ausgewählte Zeile soll S/W umdrehen. Also Hintergrund schwarz, Schrift "Weiß".

Dann sollen bei einem Menüpunkt 2 Zifferstellen mit einem blinkenden Unterstrich versehen werden.

Und dann gibt es noch ein Problem mit den zeichen ä,ö und ü. Diese werden auf dem Display garnicht angezeigt.

Gibt es Lösungen für diese "Problemchen" ?

mfg Blamaster

chr-mt
20.02.2008, 17:05
Falls es sich um ein Character Display handelt:
S/W Umdrehen nicht möglich.
Blinkender Unterstrich nicht möglich
Sonderzeichen kannst du dir mit dem LCD-Designer erstellen.

Du kannst natürlich auch inverse Zeichen erstellen, oder zwei gleiche, von denen eines noch zusätzlich einen Unterstrich bekommt und diese umschalten.
Bei 8 Sonderzeichen ist allerdings Schluss, mehr geht leider nicht.
Die Speicherplätze für die Sonderzeichen lassen sich auch nicht zur Laufzeit neu belegen.

Gruß
Christopher

izaseba
20.02.2008, 17:51
Hallo Christopher,

Blinkender Unterstrich ist zwar nicht möglich, aber blinkender Viereck schon, oder Unterstrich nicht blinkend.
Und die Sonderzeichen kann man wohl zu Laufzeit ändern, das ist kein Problem...

Gruß Sebastian

chr-mt
20.02.2008, 19:10
Hi,

Blinkender Unterstrich ist zwar nicht möglich, aber blinkender Viereck schon, oder Unterstrich nicht blinkend.
Meinst du mit dem Cursor ? Der geht aber nicht über mehrere Spalten, wie das gewünscht wurde.
Oder hast du eine andere Idee ?
Braucht ein neuladen der Sonderzeichen keine Neuinitialisierung des Displays ?
Hatte da sowas in Erinnerung.

Gruß
Christopher

izaseba
20.02.2008, 19:33
Hallo Christopher,

Ich hoffe, wir reden von einem HD44780 kompatibilem, oder ? 8-[

Zu dem Unterstrich hätte ich folgende Idee, zwar ungetestet, müßte aber klappen,

Angenommen wir wollen Zeichen 0-5 Unterstreichen, gehen wir zum Zeichen 0, schalten den Unterstrich ein und senden in Abständen von sag ich mal 10-50 ms ein Befehl, den Cursor einen Schritt weiter nach rechts zu gehen.
Wenn wir bei der Stelle 5 sind dan zurück nach 0.
Man dürfte da wohl kein Flackern sehen denke ich :-k

Zu den Sonderzeichen, nein, Du mußt das Display nicht neu initialisieren,
mal aus dem Kopf,
Eigene Zeichen liegen in CG RAM bei der Adresse 0 angefangen, also 0x00-0x07 Zeichen 1 0x08-0x0F Zeichen 2 usw.
Man sendet jetzt 'Set CGRam Address' mit der gewünschten Adresse dann ganz Normal die Daten, anschließend zurück in DDRam , fertig.
So kann man 1 Zeile vom Zeichen auswechseln, ein ganzes Zeichen, oder alle 8, ja nach dem.

Gruß Sebastian

chr-mt
20.02.2008, 19:53
Die Idee mit dem schnellen Weiterschalten des Cursors hatte ich auch erst,
bin aber davon abgekommen, da das, meiner Meinung nach, stark flackern würde.
Der Cursor müsste ja, um wahrgenommen zu werden, einige Zeit stehenbleiben, ich schätze mal so etwa 20ms.
Wenn er dann beim 5. Zeichen angekommen ist, dann ist er beim ersten schon 60ms aus.
Das sieht man dann auf jeden Fall.
Müsste man aber mal ausprobieren und etwas mit den Zeiten spielen.
Er wollte ja auch nur 2 Zeichen mit Unterstrich versehen, vielleicht klappt das ja halbwegs flackerfrei.....

Das mit dem Neuinitialisieren hatte ich dann wohl falsch in Erinnerung. :)
Hab' auch auf die Schnelle im Datenblatt nichts dazu gefunden.

Gruß
Christopher

Blamaster
20.02.2008, 20:06
Hm, ich werde mal etwas mit den zeiten spielen und guggen was bei rauskommt. Die idee ist aufjedenfall schonmal nicht schlecht :)

mfg Blamaster

izaseba
20.02.2008, 20:08
Ja, wie gesagt, probieren geht über studieren,
Habe gerade im Dattenblatt nachgeschaut, Ausführungszeit von 'Set DDRAM Address' 39 µS man kann da die Wiederholrate ziemlich hoch setzen, im Endeffekt ist es nichts anderes als Multiplexen.
Der Unterstrich wirkt vielleicht etwas blasser als der Rest

Gruß Sebastian

chr-mt
20.02.2008, 20:23
Mit der Standard Bascom Library wird das wohl eher nix,
die ist zu langsam, da sie auf das lesen des Busy Flags verzichtet und einfach "sichere" Zeiten vorgibt.

Gruß
Christopher

izaseba
20.02.2008, 20:40
#-o Ich habe jetzt erst bemerkt, daß ich mich im Bascomforum befinde ](*,)

Trotzdem, selbst wenn 1ms als 'sicher' gelten sollte dürfte das reichen...

chr-mt
20.02.2008, 20:59
Ich habe jetzt erst bemerkt, daß ich mich im Bascomforum befinde
:)
Ich habe grade mal ein wenig rumprobiert, den Cursor mit dem Locate und Shiftcursor Befehl schnell hin und her zu schieben, bin aber zu keinem vernünftigen Ergebniss gekommen.
Es flackert entweder furchtbar, oder ist kaum zu sehen.

Die 8 Speicher neu belegen geht auch ohne Neuinitialisierung, wie du schon geschrieben hattest.
Allerdings sind eben nur 8 verschiedene Zeichen gleichzeitig darstellbar.
Das dürfte aber langen, wenn man jeden, im Menü vorkommenden, Buchstaben als inverse Version vorbereitet und dann bei Bedarf nachlädt.
So könnte man 8 Zeichen prima zwischen Invers und Normal umschalten.
EDIT:
Geht leider doch nicht, da der Zwischenraum zwischen den Zeichen hell ist.
Wenn ich jetzt Buchstaben Invers darstelle, der am Rand sitzt, fehlt dann die seitliche Begrenzung.
Man kann aber jedem Zeichen einen Unterstrich verpassen.

Gruß
Christopher

chr-mt
20.02.2008, 21:43
Hier mal mit blinkendem Cursor unter 2 Zeichen:



$regfile = "m16def.dat"
$crystal = 16000000


Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Initlcd

Deflcdchar 0 , 15 , 16 , 16 , 14 , 1 , 1 , 30 , 31 '"S" mit Unterstrich
Deflcdchar 1 , 31 , 4 , 4 , 4 , 4 , 4 , 4 , 31 '"T" mit Unterstrich

Dim Wartezeit As Integer
Wartezeit = 400

Cls
Cursor Off

Lcd "TEST!"



Do
Locate 1 , 3
Lcd Chr(0)
Locate 1 , 4
Lcd Chr(1)
Waitms Wartezeit
Locate 1 , 3
Lcd "S"
Locate 1 , 4
Lcd "T"
Waitms Wartezeit
Loop
End

Blamaster
21.02.2008, 11:15
wow vielen Dank funkt super :)

izaseba
21.02.2008, 16:37
Schade, daß es mit multiplexen nicht klappt, aber die Lösung mit den Eigenen Zeichen ist auch gut.

Gruß Sebastian