www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zeilenumbruch beim Display


Autor: Reinhard S. (ice-t4life)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich habe eine Frage zum Tut bezüglich LCD. Ich wollte wissen, wie man
einen Zeilenumbruch Programmiert. Finde leider nirgends etwas passendes
dazu.

LCD ist ein 16x2 den ich über 4bit (also genau so wie im Tut)
ansteuere. Aber ich glaub das ist eh kaum wichtig.

MFG

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeilenumbruch ist schwierig, da musst du schon im Controller mitzählen.
Ich nutze dafür ein "Locate-Macro", das die Ausgabeposition des LCDs
setzt und achte darauf, dass der auszugebende Text in die Zeile passt.
Beispiel (aber anderes LCD):
http://www.hanneslux.de/avr/zuenduhr/index.html

...

Autor: Reinhard S. (ice-t4life)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm, ist das wirklich so umständlich um in die nächste Zeile des
Displays zu kommen? Ich dache, dass ist ein einfacher Code, der Binär
einfach über die 4bit übertragen wird.

In deiner Routine habe ich leider nich viel zum Zeilenumbruch gefunden.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal in die Datenblätter einiger mehrzeiliger Punktmatrix-LCSs.
Schau besonders nach der Zuordnung DD-RAM/Anzeigeposition.

Dann wirst du schnell feststellen, dass da Einiges ziemlich
durcheinander geraten ist. Meist sind die Speicherbereiche für die
Zeilen länger als die Zeilen selbst, das bietet die Möglichkeit des
Horizontal-Scrollings (nutze ich aber nicht), erschwert aber den
Zeilenumbruch.

Selbst das 8x24-LCD im Beispiel hat einen ziemlich verschachtelten
Aufbau. Wenn man linear ins DD-RAM schreibt, dann erscheint der Text
nacheinander in Zeile 0, 4, 1, 5, 2, 6, 3, 7.

Die Displays mit HD44780 sind da teils noch krasser verschachtelt. Beim
2x16 sind pro Zeile meist 40 DD-RAM-Zellen reserviert.

Sicher wäre es schön, wenn man mit einem CR (Steuerzeichen 13) an den
Anfang der neuen Zeile springen könnte, aber das ist nunmal leider
nicht so.

Das oben genannte Locate-Macro befindet sich in der Include-Datei mit
den LCD-Routinen (http://www.hanneslux.de/avr/zuenduhr/LCD_8x24.inc).

...

Autor: Stevko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Reinhard,

anbei 2 Routinen fürs normale LCD.


;---------------------------------------------------------------------
;Cursor in Zeile 1, Spalte wird mit R16 übergeben
lcd_line1:
  push R16
  push R17
  push R18
  ;prüfen ob LCD-Inhalt geschoben
  ldi R18,LCD_Push_Range
  lds R17,LCD_Status_Flag
  sbrc R17,LCD_is_push
    add R16,R18
  ori R16, 0b10000000  ;eigentlicher Befehl
    rcall lcd_command
  pop R18
  pop R17
  pop R16
ret
;---------------------------------------------------------------------
;Cursor in Zeile 2, Spalte wird mit R16 übergeben
lcd_line2:
  push R16
  push R17
  push R18
  ;prüfen ob LCD-Inhalt geschoben
  ldi R18,LCD_Push_Range
  lds R17,LCD_Status_Flag
  sbrc R17,LCD_is_push
    add R16,R18
    ori R16, 0b11000000
    rcall lcd_command
  pop R18
  pop R17
  pop R16
ret
;---------------------------------------------------------------------


Gruß
  Stevko

Autor: Reinhard S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wo muss ich deine Routine dann einbinden? In der aus dem Tutorial?
Und wo muss dann der befehl rcall lcd_line1 bzw rcall lcd_line2 hin?
Ich habs jetzt mal versucht, aber da fehlt ja noch das zeugs mit dem
Stack. Kannst du mir da weiter helfen?

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geht das nicht besser über eine Tabelle, in der die Positionen stehen?

Ralf

Autor: Stevko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Reinhard,

gehe bitte auf die Conrad-Seite und suche folgende Artikelnummer:

      183342 - 62 (=LCD 16x2).


Dort gibt es das Datenblatt und davon druckst Du Seite 16-24 aus.
Die Erklärung der Befehle ist leicht nachvollziehbar, denn bei meinem
Code-Bespiel wird der Displayinhalt teilweise nach rechts geschoben.
Ich helfe Dir schon, nur muß jetzt mal kurz weg.

Gruß
  Stevko

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.