Forum: Mikrocontroller und Digitale Elektronik LCD-Lauflicht


von Alois (Gast)


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?

von Elektro G. (e_g)


Lesenswert?

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

von Obelix (Gast)


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?

von Christoph db1uq K. (christoph_kessler)


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.

von Christoph db1uq K. (christoph_kessler)


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

von Alois (Gast)


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.

von Robert S. (razer) Benutzerseite


Lesenswert?

Mach doch das ganze in der Software ;)

von Alois (Gast)


Lesenswert?

:-P

ok geb mich geschlagen

von Philipp B. (philipp_burch)


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.

von TechInfo (Gast)


Lesenswert?

Eine einfache aber sehr praktikable Lösung! Vielen Dank.

von Michael U. (Gast)


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
1
.include ("m8def.inc")
2
3
.def temp     = r16
4
.def Position   = r17
5
.def Counter   = r18
6
7
.equ LINE_LEN   = 16          ; Displayzeilenlänge
8
9
.DSEG
10
.ORG $100
11
Buffer:      .byte 100        ;maximale Textlänge
12
13
.CSEG
14
Init:
15
  ldi    Position,low(Buffer)  ; mit Textbeginn anfangen
16
17
Scroll:
18
  ldi    ZH,high(Buffer)
19
  mov    ZL,Position
20
  ldi    Counter,LINE_LEN     ; Anzahl Zeichen pro Zeile
21
22
  ld    temp,Z            ; erstes Byte holen, ob überhaupt was da ist...
23
  tst    temp              ; 0-Byte?
24
  breq  Scroll_end         ; ja, nichts machen
25
26
Loop:
27
  ld    temp,Z+
28
  tst   temp               ; 0-Byte ?
29
  brne   text_ok            ; nein, ausgeben
30
31
  ldi   ZL,low(Buffer)       ; zurück auf Anfang
32
  rjmp   Loop               ; und nochmal ein Byte holen
33
34
text_ok:
35
  rcall   display_out_char
36
  dec   Counter
37
  brne   Loop
38
39
  inc   Position           ; nächster Start ab nächster Position 
40
  mov   ZL,Position        ; Nach Z zum Test, ob 0-Byte
41
  ld    temp,Z
42
  tst   temp               ; 0-Byte, also nächste Runde ab Anfang
43
  brne   Scroll_end
44
45
  ldi   Position,low(Buffer)  ; mit Textbeginn anfangen
46
47
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



von MR (Gast)


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

von Karl H. (kbuchegg)


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

von MR (Gast)


Lesenswert?

habe ich mit
 do
endlosschleife
 loop
sollte es gehen

von Karl H. (kbuchegg)


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.

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.