Forum: Mikrocontroller und Digitale Elektronik LCD DEM20485 in gerade Zeile springen (c't-Bot)


von Bo G. (boge-ro)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

nach langer Zeit wollte ich mal wieder versuchen, das LCD des c't-Bot 
hinter einem Schieberegister in Bascom anzusprechen.

Im Anhang die relevanten Datenblätter sowie mein Test-Programm dazu:
- es sendet die richtigen Zeichen
- es löscht das Display
- es setzt die DDRAM-Adress, ABER leider nur in Zeile 1 und 3 korrekt.

Ich schaffe keine Ausgabe in Zeile 2 oder 4.

Wer sieht einen Fehler, oder hat einen Rat dazu?

Danke
BoGe-Ro

von niemand (Gast)


Lesenswert?

Nur als 2Zeiler Initialisiert!?

von Bo G. (boge-ro)


Lesenswert?

niemand schrieb:
> Nur als 2Zeiler Initialisiert!?

ja, es ist als 2 Zeiler initialisiert.
Das Display-Datenblatt auf Seite 13 läßt 1-line-mode und 2-line-mode zu.
Sichtbare Unterschiede erreiche ich bei Änderung dieser Einstellung 
nicht.

Zeile 1 und 3 sehe ich aufgrund der aufeinanderfolgenden DDRAM-Adressen 
als 1. Line an und Zeile 2 und 4 aus dem selben Grund als 2. Line.

von niemand (Gast)


Lesenswert?

Was passiert genau wenn Du versuchst auf Zeile 2 was an zu zeigen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Bo Ge schrieb:
> Wer sieht einen Fehler, oder hat einen Rat dazu?
Sieh dir die DPRAM Adressen auf der Seite 8 im Datenblatt an:
Zeilen 1 und 3 sind einfach hintereinander, dann folgen Zeile 2 und 4 
mit einem Offset von 64 (0x40)...

> Zeile 1 und 3 sehe ich aufgrund der aufeinanderfolgenden DDRAM-Adressen
> als 1. Line an und Zeile 2 und 4 aus dem selben Grund als 2. Line.
Richtig. Und deshalb hast du ein 2-Zeiliges Display...

von Bo G. (boge-ro)


Lesenswert?

niemand schrieb:
> Was passiert genau wenn Du versuchst auf Zeile 2 was an zu zeigen.

Ziel:
Ausgabestring: "12345678901234567890" auf den Anfang der zweiten Zeile
Resultat:
"7890" erscheint am Anfang der ersten Zeile


Ziel:
Ausgabestring: "12345678901234567890" auf den Anfang der vierten Zeile
Resultat:
"12345678901234567890" erscheint am Anfang der ersten Zeile

von Bo G. (boge-ro)


Lesenswert?

Lothar Miller schrieb:
> Bo Ge schrieb:
>> Wer sieht einen Fehler, oder hat einen Rat dazu?
> Sieh dir die DPRAM Adressen auf der Seite 8 im Datenblatt an:
> Zeilen 1 und 3 sind einfach hintereinander, dann folgen Zeile 2 und 4
> mit einem Offset von 64 (0x40)...
>
>> Zeile 1 und 3 sehe ich aufgrund der aufeinanderfolgenden DDRAM-Adressen
>> als 1. Line an und Zeile 2 und 4 aus dem selben Grund als 2. Line.
> Richtig. Und deshalb hast du ein 2-Zeiliges Display...


Hier ist meine Berechnung der DDRAM-Adressen

Sub Lcd_xy(byval _x As Byte , Byval _y As Byte)
Local _wert As Byte
   _wert = _x + 127
   Select Case _y
      Case 2 : _wert = _wert + &H40
      Case 3 : _wert = _wert + &H14
      Case 4 : _wert = _wert + &H54
   End Select
   Call Send_lcd_byte(_wert) : Lcd_rs = 0 : Lcd_enable = 0 : Waitus 38
End Sub

die Addition "_wert = _x + 127" setzt DB7 und zieht 1 ab, da die erste 
Stelle Adresse 0 hat.

von niemand (Gast)


Lesenswert?

Kann das zwar nicht in Einklang mit Deinem Fehler bringen aber wie 
willst Du in Zeile 1 schreiben wenn Du DB7 immer auf 1 setzt?
Zeile 1 Zeichen 1 = 1+127 = h80

Bei Zeile 2:
1+127+H40 = hC0 -> landet im nichts!

von Bo G. (boge-ro)


Lesenswert?

niemand schrieb:
> Kann das zwar nicht in Einklang mit Deinem Fehler bringen aber wie
> willst Du in Zeile 1 schreiben wenn Du DB7 immer auf 1 setzt?
> Zeile 1 Zeichen 1 = 1+127 = h80
>
> Bei Zeile 2:
> 1+127+H40 = hC0 -> landet im nichts!

LCD-Datenblatt, Seite 11, Set DDRAM address

D7 = H
D6..D0 = Adresse

Zeile 2, Spalte 1:
x=1, y=2

wert=x-1       => wert=0
y=2            => wert=wert+&h40 => wert=&h40
wert=wert+128  => setz DB7


so zumindest der Plan

von Bo G. (boge-ro)


Lesenswert?

Folgende Beobachtung:

bei der Suche nach Original-Firmware des c't-bot habe ich einige 
Hex-files gefunden. Diese auf den Bot geflashed, läßt Daten auf allen 4 
Zeilen des LCD anzeigen => das LCD ist also in Ordnung

die dargestellten Zeichen waren weniger Kontrastreich als in meinen 
Versuchen => eventuell durch laufendes aktualisieren?

aber auch "statische" Zeichen auf dem Display waren weniger 
Kontrastreich
(das Kontrast-Poti bleib dabei unverändert)

nach dem zurückflashen meiner Testroutinen und einer darin 
programmierten Zeichenausgabe auf allen DDRAM-Adressen wurden diese 
Zeichen in allen 4 Zeilen dargestellt -> ebenfalls kontrastarm
erst nach komplettem abschalten und Neustart erzeugte meine Routine 
wieder nur Zeichen in Zeilen 1 und 3, kontraststark

=> dies läßt mich an meiner Initialisierungsroutine zweifeln
- sie läßt korrekte Zeichenausgabe in den Zeilen 1 und 3 zu, unterbindet 
sie in Zeilen 2 und 4
- sie verändert eine bestehende "originale" Initialisierung aber nicht 
dahingehend, dass die Zeilen 2 und 4 nicht mehr dargestellt werden


geben diese Informationen eventuell Hinweise auf den Fehler?

danke für eure Mithilfe
BoGe-Ro

von Bo G. (boge-ro)


Angehängte Dateien:

Lesenswert?

Danke an alle Helfer,

das LCD funktioniert offenbar nicht ganz so, wie es sich das Datenblatt 
wünscht :-)

ein zweifaches Senden des function-set-Befehls in der Initialisierung 
des LCDs läßt diesen Befehl wohl erst funktionieren - und die second 
Line (Zeile 2 und 4) nutzen. Die Schwächung des Kontrasts bei dieser 
Umschaltung lässt sich weiterhin beobachten.

Die DDRAM-Address-Berechnung funktioniert ebenfalls.


anbei das funktionierende Bascom-File

lg
BoGe-Ro

von niemand (Gast)


Lesenswert?

Bo Ge schrieb:
> LCD-Datenblatt, Seite 11, Set DDRAM address
>
> D7 = H
> D6..D0 = Adresse

Autsch, das tat weh.
Werd mir Morgen mal Schmerzmittel und ne Brille verschreiben lassen :)

Bo Ge schrieb:
> ein zweifaches Senden des function-set-Befehls in der Initialisierung
> des LCDs läßt diesen Befehl wohl erst funktionieren

Hat eine Verlängerung der Wartezeit nichts gebracht?

von Bo G. (boge-ro)


Lesenswert?

niemand schrieb:
> Bo Ge schrieb:
>> ein zweifaches Senden des function-set-Befehls in der Initialisierung
>> des LCDs läßt diesen Befehl wohl erst funktionieren
>
> Hat eine Verlängerung der Wartezeit nichts gebracht?

nein, an dieser Stelle nicht - zumindest keine Milisekunde.


BoGe-Ro

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.