Forum: Mikrocontroller und Digitale Elektronik Reichelt "LCD 161" 1x16 ist tatsächlich 2x8?


von Ulf R. (roolf)


Lesenswert?

Ich habe von Reichelt ein "LCD 161A" besorgt, 1 Zeile, 16 Zeichen.  Ein 
bisschen naiv bin ich davon ausgegangen, dass (a) praktisch alle dieser 
LCDs nach dem HP44780-Befehlssatz funktionieren und (b) ein 1x16 
dasselbe ist wie ein 2x16, nur weniger Zeilen und billiger.

Die Ansteuerung im 4Bit-Modus mit einem 74HC164 über den SPI des Mega8 
funktioniert hervorragend: das Shiftregister wird (mit SCK getaktet) mit 
den Daten von MOSI geladen und reicht die auf Displayseite an RS und 
DB7..4 durch.  Ein abschließender Impuls von /SS an E übernimmt das 
Nibble ins Display.

Sehr erstaunt war ich, als bei der Ausgabe von "Hello world" nur "Hello 
wo" angezeigt wurde.  Da ich aus Nachlässigkeit das Display im 
2-Zeilen-Modus konfiguriert hatte, habe ich dann den 1-Zeilen-Modus 
verwendet.  Mein Erstaunen wuchs, denn nun waren die restlichen 8 
Zeichen nicht nur leer, sondern sogar abgeschaltet (man kann das bei 
geeignetem Lichteinfall erkennen).

Nach ein paar weiteren Experimenten bin ich nun zu dem Schluss gekommen, 
dass dieses LCD intern zwei Zeilen a 8 Zeichen hat: die DDRAM-Adressen 0 
bis 7 werden in der linken Hälfte dargestellt, dann kommt eine Reihe von 
Schattenbytes, die man mittels Displayshift heranrutschen kann, und bei 
0x40 bis 0x47 finden sich schließlich die 8 Zeichen für die zweite 
Hälfte der Zeile.

Ich muss sagen, ich finde diese Konfiguration ein bisschen krank.  Muss 
man also bei der Ausgabe alle Zeichen mitzählen und dann einen 
geeigneten "Zeilenvorschub" einbasteln ...

Habe ich da etwas falsch gemacht, oder ist das bei 1x16-Displays so?  In 
den Datenblättern habe ich gesehen, dass bei vierzeiligen Displays die 
Zeilen relativ seltsam ineinander verschränkt sind, aber man würde doch 
bei einem 1x16 nicht eine solche Zersplitterung des Bildschirm-Speichers 
erwarten?

von Marius S. (lupin) Benutzerseite


Lesenswert?

Das Display hatte ich auch schonmal. Ist halt einfach so, steht ja auch 
im Datenblatt.

von Hannes L. (hannes)


Lesenswert?

> aber man würde doch
> bei einem 1x16 nicht eine solche Zersplitterung des Bildschirm-Speichers
> erwarten?

Die Begründung ist ganz einfach:
Beitrag "Re: Beim 16x1 LCD will der Zeilenwechsel nicht klappen"

...

von Ulf R. (roolf)


Lesenswert?

Marius S. schrieb:
> Das Display hatte ich auch schonmal. Ist halt einfach so, steht ja auch
> im Datenblatt.

Leider nicht in dem 8-seitigen Blättchen, den Reichelt für "LCD 161A" 
anbietet.

von mage (Gast)


Lesenswert?

Hatte mein erstes Display aus einem alten Fax ausgebaut da ist die eine 
Zeile auch unterteilt. Aber einfach nach 8 Zeichen einen Zeilenwechsel 
und gut ist.

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


Lesenswert?

Ulf Rolf schrieb:
> Leider nicht in dem 8-seitigen Blättchen, den Reichelt für "LCD 161A"
> anbietet.

Oh doch, lies mal den Abschnitt "DISPLAY DATA RAM ADDRESS MAP"
Das 9. Zeichen liegt an Adress 0x40

von MeinerEiner (Gast)


Lesenswert?

Ist halt immer diese Sache mit "161" und "161A"

von Hannes L. (hannes)


Lesenswert?

Das hat damit vermutlich gar nichts zu tun.

Ein HD44780-(kompatibler) Controller kann nunmal nur 2 Zeilen je 8 
Zeichen direkt ansteuern (16 Pixelzeilen mal 40 Pixelspalten), für jede 
andere Organisation als max. 8x2 müssen zusätzliche Treiber-ICs auf der 
LCD-Platine platziert werden, die den Braten teurer machen. Siehe oben 
genannten Link auf Benedikts Beitrag.

Das preiswerte 10x1 von Pollin ist daher auch als 5x2 organisiert.

Bei ordentlichen LCD-Routinen ist das alles kein Problem. Meine 
aktuellen LCD-Routinen (ASM) erlauben z.B. Fließtext über mehrere 
Zeilen, ohne dass man sich bei der Textausgabe um Zeilenwechsel oder 
Adressverschachtelungen kümmern muss. Sie erfordern allerdings einen 
"Bildschirmspeicher" im SRAM des AVRs. Geschrieben wird nur in den 
Bildschirmspeicher. Ein Job der Mainloop schaufelt dann (per Timer 
gebremst) jede Millisekunde ein Zeichen aus dem Bildschirmspeicher an 
das LCD und entwirrt dabei die Adressbereiche.

...

von Ulf R. (roolf)


Lesenswert?

Hannes Lux schrieb:
> Das hat damit vermutlich gar nichts zu tun.

161A ist halt eine Reichelt-interne Produktnummer und ohne weitere 
Aussage.

> Ein HD44780-(kompatibler) Controller kann nunmal nur 2 Zeilen je 8
> Zeichen direkt ansteuern (16 Pixelzeilen mal 40 Pixelspalten),

das habe ich verstanden. Es ist aber keine Rechtfertigung dafür, dass 
die rechte Seite nicht einfach bei 0x08 beginnt. Die internen 
Scrollfunktionen kann man bei der aktuellen Konfiguration ja auch nicht 
recht sinnvoll verwenden.  Egal - Jammern hilft hier nicht weiter.

> Sie erfordern allerdings einen
> "Bildschirmspeicher" im SRAM des AVRs. Geschrieben wird nur in den
> Bildschirmspeicher. Ein Job der Mainloop schaufelt dann (per Timer

Genau das ist auch mein Plan. Schade nur, dass der ganze Scrollkram usw, 
im Controller halt schon vorhanden ist, aber nicht genutzt werden kann.

von Ulf R. (roolf)


Lesenswert?

Lothar Miller schrieb:
> Ulf Rolf schrieb:
>> Leider nicht in dem 8-seitigen Blättchen, den Reichelt für "LCD 161A"
>> anbietet.
>
> Oh doch, lies mal den Abschnitt "DISPLAY DATA RAM ADDRESS MAP"
> Das 9. Zeichen liegt an Adress 0x40

Sehr schön ... ich behaupte, dass die aktuell verfügbare Version vor 
einer Woche noch nicht da war. Stattdessen war beim 161A dasselbe 
8-seitige Blatt angeboten wie bei 162C - und dort ist die erste Zeile 
00-0f und die zweite 40-4f. Dann hat sich jetzt ja alles geklärt. Vielen 
Dank!

von Hannes L. (hannes)


Lesenswert?

> das habe ich verstanden. Es ist aber keine Rechtfertigung dafür, dass
> die rechte Seite nicht einfach bei 0x08 beginnt.

Doch, denn der HD44780 hat zwei separate DD-RAM-Bereiche, die je 40 
Bytes groß sind und an den Adressen 0 und 64 beginnen. Es ist also kein 
durchgehender Adressraum. Es hat schon alles seinen Sinn, auch wenn es 
dem Benutzer etwas unbequem erscheint. ;-)

> Genau das ist auch mein Plan. Schade nur, dass der ganze Scrollkram usw,
> im Controller halt schon vorhanden ist, aber nicht genutzt werden kann.

Naja, es ist um manche Jungfrau schade...

Den Scrollkram habe ich noch nie vermisst, er ist bei Bedarf aber auch 
schnell in Software realisiert (Ausgaberoutine für Text aus Flash, die 
statt einer Endekennung die Bytes zählt und einen Index für den Start im 
String führt). Auch blinkende Textbereiche sind mit Bildschirmspeicher 
in Software kein Problem.

...

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.