Forum: Mikrocontroller und Digitale Elektronik Display schieben


von Hans (Gast)


Lesenswert?

Hallo zusammen

Ich schieben mein Display mit der Funktion:
1
void lcd_shiftleft(void)
2
{
3
    lcd_command(Shift_left);
4
    _delay_us(37); //Pause aus Datenblatt
5
}
Diese Funktioniert auch, jedoch wird beim schieben immer kurt doppelt 
angezeigt. Der Buchstabe der schiebt wird an 2 Stellen angezeigt für 
ungefähr 50ms, wie kann man dies beheben?

Ich rufe die Funktion so auf:
1
lcd_setcursor( 0, 1 );        
2
if(x == 0)
3
{
4
    lcd_string("Zum Start beliebige Taste druecken");
5
    x = 1;
6
}  
7
lcd_shiftleft();
8
DELAY_10ms(20);

habs auch mit verschieden Pausen versucht jedoch imemr das gleiche 
ergebniss.

von Karl H. (kbuchegg)


Lesenswert?

BIs jetzt hab ich noch nie einen Fall gesehen, in dem man dieses 
automatische Shiften irgendwie sinnvoll benutzen könnte.

Wenn du sowieso den ganzen String ausgibst
1
   lcd_string("Zum Start beliebige Taste druecken");

dann kannst du dir auch eine Funktion schreiben, die ja nach 
'Schiebeanforderung' aus diesem String sich den gewünschten Teilstring 
rausholt und nur diesen an geeigneter Position am LCD ausgibt.
In Summe ist das wesentlich einfacher und auch universeller (den die 
Shift Funktion vom LCD shiftet das komplette 'Bild' und nicht nur eine 
Zeile).

Ziel ist es also, dass nacheinander in deiner Schleife, die du ja 
sicherlich übergeordnet in irgendeiner Form hast), dies hier 
nacheinander ausgibst
1
              Z
1
             Zu
1
            Zum
1
           Zum
1
          Zum S
1
         Zum St
....

und das programmiert man sinnvollerweise selber. Zum einen ist es 
reichlich trivial, zum anderen vermeidet es jegliche Probleme mit dem 
LCD. Zum dritten ist es universell einsetzbar, indem dann auf dem LCD an 
irgendeiner Stelle eine Laufschrift mit x Buchstaben (wobei x nicht 
notwendigerweise die Spaltrenbreite des LCD ist) durchläuft, während an 
anderer Stelle zb. irgendwelche Messwerte weiterhin angezeigt werden und 
auch nach wie von Sensoren upgedatet werden. Zum vierten kann man damit 
beliebig lange Texte durchlaufen lassen und nicht nur die, die gerade 
noch in eine physikalische Zeile des LCD passen. Und zum fünften kannst 
du dann auch ganz einfach den Fall handhaben, dass deine Laufschrift so 
aussieht, als ob der Text zu einer Schleife zusammengeklebt wäre; dass 
also nach dem letzten Buchstaben des Textes bereits wieder damit 
begonnen wird, den Textanfang auszugeben, was Leerraum auf dem LCD 
vermeidet (und was erstaunlicherweise auch einfacher zu programmieren 
ist, weil die ganzen Sonderfälle durch das Auffüllen mit Leerzeichen 
wegfallen).

von micha (Gast)


Lesenswert?

Ohne das Display zu kennen, eventuell musst Du einen "refresh" abwarten 
(d.h. der Displaybuffer wird grade angezeigt, während Du schiebst). 
Versuch doch einfach das Display (bzw. die Anzeige) für die Dauer des 
shifts abszuschalten - oft gibt es dafür ein entsprechendes Commando.

von Nosnibor (Gast)


Lesenswert?

Das könnte auch an der Trägheit der Flüssigkristalle liegen. Da hilft, 
zuerst den alten Text zu löschen und nach kurzer Wartezeit den neuen 
Text zu schreiben. Die Wartezeit wäre dann temperaturabhängig (bei Kälte 
sind LCDs langsamer).

von Falk B. (falk)


Lesenswert?

@ Nosnibor (Gast)

>Das könnte auch an der Trägheit der Flüssigkristalle liegen.

Ja.

>Da hilft,
>zuerst den alten Text zu löschen und nach kurzer Wartezeit den neuen
>Text zu schreiben.

Nein, das flackert!

von Nosnibor (Gast)


Lesenswert?

Wenn's flackert, war die Wartezeit zu lang.

Mir wäre das allerdings auch zu mühsam, die richtige Wartezeit 
herauszufinden. Wenn das Display zu träge ist, um Bewegungen ansehnlich 
darzustellen, muß man eben ohne auskommen. Laufschrift ist sowieso 
unergonomisch, solange der Leser nicht die Geschwindigkeit einstellen 
kann.

Wenn es nur um Dekoration/Aufmerksamkeit geht, wäre schrittweiser Auf- 
bzw. Abbau der Schrift eine Alternative, denn dabei stört die Trägheit 
nicht.

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.