mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD-Lauflicht


Autor: Alois (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

kann ich mit LCD-Befehlen erreichen, dass ein Text von links nach rechts 
durchläuft und nach dem Verschwinden wieder links erscheint, Buchstabe 
für Buchstabe? Also so, dass der Text quasi eine Runde dreht.

Mir ist bekannt, dass man das über einen String mit Leerzeichen an den 
Enden realsieren kann, indem man immer nur einen Teil des Strings 
überträgt und einen Counter mitlaufen lässt.

Mich würde jetzt interessieren, ob es auch eine Lösung gibt, wenn man 
keine Leerzeichen in den Text einbaut, sondern ohne Tricks die 
LCD-Kommandos bemüht.

Den Text kann ich ja mit einer Rechtsverschiebung des Displays schonmal 
bis ans Ende durchlaufen kassen. Nur wie lasse ich ihn dann Buchstabe 
für Buchstabe wieder am linken Rand erscheinen?

Autor: Elektro Gandalf (e_g)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich Denke nicht das der Displaycontroller so Inteligent ist und das 
schon von Haus aus kann, aber kannst ja mal im Datenblatt nachsehen.

Autor: Obelix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was fehlt den bei der Frage wohl für eine Angabe?

Warum schaffen es nur die wenigsten vernümpftige Fragen zu stellen? Ist 
das denn so schwer?

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gebt ihm schnell ein Wildschwein...
ich vermute mal ein HD44780-kompatibler Controller?
wenn man zwei Zeilen laufen lasen will, muß man berücksichtigen, dass da 
ein nicht sichtbaren Zwischenraum im Speicher ist. Am einfachsten 
speichert man den Buchstaben zweimal in den Controller, unten rechts und 
oben im unsichtbaren Teil auch rechts, dann läuft der gerade heraus, 
wenn er unten links verschwindet. Genauso müßte ein Bchstabe von oben 
links nach unten rechts wieder kommen, dann wären drei Abspeicherungen 
desselben Zeichens nötig.

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
war Quatsch, für ein wrap-around muß man den Buchstaben oben links lesen 
und unten rechts wieder reinschreiben oder alles wird im Mikrocontroller 
nochmal parallel abgelegt, das geht vermutlich schneller als ein 
Lesezugriff auf den HD44780

Autor: Alois (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Text soll nicht in der zweiten Zeile weiter laufen, sondern nach dem 
Rauslaufen aus der ersten Zeile wieder vorne in der selben Zeile 
anfangen.

Der Controllertyp ist natürlich ein HD.

Autor: Robert S. (razer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach doch das ganze in der Software ;)

Autor: Alois (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
:-P

ok geb mich geschlagen

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der HD44780 kennt doch diese "Shift display" Anweisungen. Wenn sich die 
Länge des Speichers vom Displaycontroller (Hab' grade nicht im Kopf wie 
viel das ist... 80 Zeichen oder sowas?) ganzzahlig durch die Länge 
deines Textes teilen lässt, kannst du einfach den ganzen Display-RAM mit 
deinem Text vollschreiben und dann andauernd schieben. Wenn es nicht 
aufgeht, könntest du halt Leerzeichen reinschreiben bis es wieder passt, 
gibt dann aber natürlich jeweils Abstände zwischen den Texten.

Autor: TechInfo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine einfache aber sehr praktikable Lösung! Vielen Dank.

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

alles komisch irgendwie, liegt sicher an der Wärme. ;)

@Philipp Burch: nicht machbar, wenn man z.B. nur in einer Zeile scrollen 
will und in den anderen Text stehen soll...

Textbuffer im SRAM anlagen für maximale Textlänge, wenn man den so 
anlegt, daß er komplett per Low-Byte adressiert werden kann, spart das 
Aufwand und 256 Textzeichen sollten ja reichen.

Platz für Position (Low-Byte des Buffers) reservieren, mit Anfang des 
Buffers initialisieren.

Zum Scrollen dann Position nach ZL, High-Byte nach ZH,
Zähler mit Zeilenlänge laden

Loop:
Char aus (Z) holen und ausgeben,
ZL +1
wenn ZL = (Bufferende+1) -> ZL auf Bufferanfang
Zähler -1
Wenn Zähler nicht 0 -> weiter im Loop

Position holen, Position +1, wenn Position = Buffer
.include ("m8def.inc")

.def temp     = r16
.def Position   = r17
.def Counter   = r18

.equ LINE_LEN   = 16          ; Displayzeilenlänge

.DSEG
.ORG $100
Buffer:      .byte 100        ;maximale Textlänge

.CSEG
Init:
  ldi    Position,low(Buffer)  ; mit Textbeginn anfangen

Scroll:
  ldi    ZH,high(Buffer)
  mov    ZL,Position
  ldi    Counter,LINE_LEN     ; Anzahl Zeichen pro Zeile

  ld    temp,Z            ; erstes Byte holen, ob überhaupt was da ist...
  tst    temp              ; 0-Byte?
  breq  Scroll_end         ; ja, nichts machen

Loop:
  ld    temp,Z+
  tst   temp               ; 0-Byte ?
  brne   text_ok            ; nein, ausgeben

  ldi   ZL,low(Buffer)       ; zurück auf Anfang
  rjmp   Loop               ; und nochmal ein Byte holen

text_ok:
  rcall   display_out_char
  dec   Counter
  brne   Loop

  inc   Position           ; nächster Start ab nächster Position 
  mov   ZL,Position        ; Nach Z zum Test, ob 0-Byte
  ld    temp,Z
  tst   temp               ; 0-Byte, also nächste Runde ab Anfang
  brne   Scroll_end

  ldi   Position,low(Buffer)  ; mit Textbeginn anfangen

Scroll_end:



Den Text in den Buffer schreiben, muß mit 0-Byze enden
Die Scrollroutine im passenden Abstand aufrufen

Aufräumen, Fehler suchen und optimieren nach belieben...

Gruß aus Berlin
Michael



Autor: MR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit bascom ist das super easy

Dim A As Byte
Config Lcd = 16 * 2

Lcd "Shift this."                                           'display 
this at the lower line
Wait 1
For A = 1 To 10
 Shiftlcd Right                                           'shift the 
text to the right
   Wait 1                                                   'wait a 
moment
Next

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MR wrote:
> mit bascom ist das super easy
>
> Dim A As Byte
> Config Lcd = 16 * 2
>
> Lcd "Shift this."                                           'display
> this at the lower line
> Wait 1
> For A = 1 To 10
>  Shiftlcd Right                                           'shift the
> text to the right
>    Wait 1                                                   'wait a
> moment
> Next

Lies dir noch mal die Aufgabenstellung durch

Autor: MR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe ich mit
 do
endlosschleife
 loop
sollte es gehen

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MR wrote:
> habe ich mit
>  do
> endlosschleife
>  loop
> sollte es gehen

Kann ich mir nicht vorstellen.
Wo werden zb. die Buchstaben die rechts rausfallen
links wieder eingesetzt?

Ausserdem ist das ein bischen blöd, wenn nur in der
ersten Zeile eine Laufschrift sein soll und die zweite
Zeile einen statischen Text anzeigen soll, der dann ebenfalls
mitgeschoben wird.

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.