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?
Das Display hatte ich auch schonmal. Ist halt einfach so, steht ja auch im Datenblatt.
> 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" ...
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.
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.
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
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. ...
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.
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!
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.