Forum: Mikrocontroller und Digitale Elektronik Blättern und vertauschen der Zeilen


von Marius (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

ich habe ein Problem der Ansteuerung eines LCD Display in Assambler.

Und zwar.

Immer wenn ich einen Text übertrage, welcher die 4 Zeilen ausfüllt wird

erst Zeile 1,3,2,4 ausgefüllt.

Das ist ja auch klar, da es sich ja um ein 2*2x40 Display handelt.

Aber wie kann man das hinbekommen, das er die Reihenfolge 1,2,3,4 
einhält

ohne, dass man die Zeilen schon im Programm in der Reihenfolge 1,3,2,4

Programmiert?


Und ich würde gerne wissen, wie man es hinbekommt, Texte zu blättern, 
also

nach sagen wir 6 Sekunden den nächsten Textteil anzeigen.


Danke.

P.S. Ich habe mal das Programm mit der LCD Routines als Anhang 
beigefügt.



Gruß

Marius

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Am einfachsten geht das, indem du einen zusammenhängenden 
SPeicherbereich reservierst. Mit einem Timerinterupt überträgsat du 
immer 1 Zeichen zum LCD, sodass regelmäßig der SRAM Inhalt ans LCD 
übertragen wird unter berücksichtigung von Zeilen/Spalten 
vertauschungen.

Ab hier kannst du nun einfach auf dem SRAM arbeiten.
Scrollen kannst du dann einfach indem du den Startwert für den SRAM 
bereich verschiebst.

von Karl H. (kbuchegg)


Lesenswert?

Marius schrieb:

> Immer wenn ich einen Text übertrage, welcher die 4 Zeilen ausfüllt wird
> erst Zeile 1,3,2,4 ausgefüllt.
> Das ist ja auch klar, da es sich ja um ein 2*2x40 Display handelt.
>
> Aber wie kann man das hinbekommen, das er die Reihenfolge 1,2,3,4
> einhält

Gar nicht.
Das ist in Hardware so festgelegt und du kannst da erst mal nichts daran 
ändern.

Also belibt dir nichts anderes übrig, als das ganze auf Seiten des 
Programms zu lösen.

Du darfst nicht einfach nur Zeichen ans LCD rausblasen und darauf 
vertrauen, dass dir das LCD die schon in die Zeilen umbrechen wird, 
sondern du musst das ein wenig intelligenter machen.
Dazu gibt es 2 Möglichkeiten

* Entweder du machst dir im Programm so etwas wie einen virtuellen
  Bildschirm, bei dem die Zeilen und Zeichen in der richtigen Reihen-
  folge sind. Eine ständig laufende Funktion (zb in einem Interrupt)
  überträgt dann diese Zeichen aufs tatsächliche LCD, wobei sie die
  Zeilenvertauschung berücksichtigt.

* Oder aber dein Ausgabetreiber muss intelligenter werden und ständig
  wissen, wo der Cursor steht und den in die Ausgabe mit einberechnen
  so dass zb beim Zeilende der ersten Zeile nicht mit der 'zweiten
  Zeile' weitergemacht wird, sondern mit der dritten usw.
  Deine erste Funktion auf diesem Pfad ist eine Funktion, die den Cursor
  in eine bestimmte Zeile setzt, wenn du der Funktion sagst, Cursor
  auf Spalte 0, Zeile 1, dann wird der dann auch auf die visuelle
  2.te Zeile gesetzt und nicht auf die 3te Zeile, wie sich das durch
  das Speicherlayout ergibt.


> Und ich würde gerne wissen, wie man es hinbekommt, Texte zu blättern,
> also
>
> nach sagen wir 6 Sekunden den nächsten Textteil anzeigen.

Nach dem die Zeit abgelaufen ist (oder eine Taste gedrückt wurde oder 
was auch immer)
  * LCD löschen
  * Cursor Home
  * Text ausgeben, bis das LCD voll ist oder der Text zu Ende

Wo liegt das Problem?

von Marius (Gast)


Lesenswert?

Naja das Problem ist, dass ich noch nicht genug Ahnung von den Sachen 
habe.

Ich habe mir das Programm ja aus dem unter 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD

liegten Zeilen zusammen gebastelt ;-)

von Karl H. (kbuchegg)


Lesenswert?

Marius schrieb:
> Naja das Problem ist, dass ich noch nicht genug Ahnung von den Sachen
> habe.

Dann wirst du das lernen müssen.
So ist das nun mal. Es ist noch kein Meister vom Himmel gefallen.

Und nein: Keine Angst vor Rückschlägen. Die gehören mit zum Lernprozess.

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.