Forum: Mikrocontroller und Digitale Elektronik LCD Display aktualisierung


von Andreas M. (andreas61)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe mir eine Steuerung für mein Zimmergewächshaus gebaut.
Als Display verwende ich ein LCD Modul 20x4 über i²C.
Das funktioniert soweit auch wie es soll.

Eine Sache stört mich aber daran:

Bei jedem loop werden die Angezeigten Zeilen aktualisiert, was zu einem 
kurzen flackern führt und etwas nervig ist.

Die Uhrzeit ist seltsamerweise nicht davon betroffen, wohl aber die 
ebenfalls aus der RTC ausgelesene Temperatur.

Den gesamten Code habe ich als Anhang beigefügt.

Vielleicht hat jemand eine Hinweis, wie ich das Flackern weg bekomme.

Gruß Andreas

von Wolfgang (Gast)


Lesenswert?

Andreas M. schrieb:
> Bei jedem loop werden die Angezeigten Zeilen aktualisiert, was zu einem
> kurzen flackern führt und etwas nervig ist.

Was soll es anderes machen, wenn du mit LCD.clear() das Display löscht. 
Die Uhrzeit schreibst du danach als erstes rein, so dass das Flackern da 
nicht so auffällt.

von Andreas M. (andreas61)


Lesenswert?

Warum passiert das dann aber nicht auch in der 1. Zeile bei der Uhrzeit?

von Max D. (max_d)


Lesenswert?

Du kannst problemlos die Daten auf dem Display überschreiben ohne sie 
vorher zu löschen. Du musst nur sicherstellen, dass die Länge der Texte 
gleich bleibt (zur Not mit Leerzeichen füllen).

von Wolfgang (Gast)


Lesenswert?

Andreas M. schrieb:
> Warum passiert das dann aber nicht auch in der 1. Zeile bei der Uhrzeit?

Die Uhrzeit schreibst du direkt nach dem Löschen wieder mit dem neuen 
Wert.

Verzichte einfach auf das Löschen. Bastele dir mit sprintf() jeweils die 
ganze Zeile als String, also genau 20 Zeichen lang, zusammen und 
überschreibe damit den alten Inhalt, ohne zu löschen.

von Andreas M. (andreas61)


Lesenswert?

Das funktioniert!

Ich habe die Strings angepaßt - auf gleiche Länge und das lcd.clear() 
heraus genommen.

Vielen Dank!

Gruß Andreas

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Andreas M. schrieb:
> Ich habe die Strings angepaßt - auf gleiche Länge und das lcd.clear()
> heraus genommen.

 LCD sind nicht die schnellsten, da sollte man schon so wenig wie
 nur irgendwie möglich schreiben bzw. ändern:
1
  lcd.setCursor(0, 1);
2
  lcd.print("S1: ");
3
  lcd.setCursor(0, 2);
4
  lcd.print("S2: ");
5
  lcd.setCursor(0, 3);
6
  lcd.print("Licht ");
7
  lcd.setCursor(10, 3);
8
  lcd.print("Heiz. ");

 Und dies nur einmal am Anfang schreiben, nachher nur neue Werte,
 natürlich mit geänderten .setCursor Werten vorher.

: Bearbeitet durch User
von Manfred (Gast)


Lesenswert?

Andreas M. schrieb:
> Bei jedem loop werden die Angezeigten Zeilen aktualisiert,
> was zu einem kurzen flackern führt und etwas nervig ist.
Was ist jetzt so schwierig daran?

Werte merken und nur schreiben, wenn die sich um einen Mindestwert 
verändert haben.

von Wolfgang (Gast)


Lesenswert?

Es wird Zeit, zu klären, was mit

Andreas M. schrieb:
> ... was zu einem kurzen flackern führt ...

gemeint ist.

[ ] Die Werte schwanken immer hin- und her, so dass man sie nicht in 
Ruhe ablesen kann

[ ] Die Anzeige verschindet vorübergehen und kurze Zeit später werden 
die Werte (evtl. geändert) wieder angezeigt, i.e. die Anzeige ist kurz 
unterbrochen.

von Andreas M. (andreas61)


Lesenswert?

Marc V. schrieb:
> Und dies nur einmal am Anfang schreiben, nachher nur neue Werte,
>  natürlich mit geänderten .setCursor Werten vorher.

Danke für den Tipp. Das habe ich gleich umgesetzt.

Andreas

von Stefan F. (Gast)


Lesenswert?

Manche Displays (meine) werden blass, wenn man sie andauernd 
aktualisiert (auch ohne clear). Besser sicherstellen, dass zwischen den 
Aktualisierungen einige Millisekunden Pause sind.

von Andreas M. (andreas61)


Lesenswert?

Wolfgang schrieb:
> [ ] Die Werte schwanken immer hin- und her, so dass man sie nicht in
> Ruhe ablesen kann
>
> [ ] Die Anzeige verschindet vorübergehen und kurze Zeit später werden
> die Werte (evtl. geändert) wieder angezeigt, i.e. die Anzeige ist kurz
> unterbrochen.

Stimmt, für den Außenstehenden, der Infos sucht ...

Die Anzeige verschindet vorübergehen und kurze Zeit später werden
die Werte (ggf. geändert) wieder angezeigt. Die Anzeige ist kurz
 unterbrochen.

Andreas

: Bearbeitet durch User
von Manfred (Gast)


Lesenswert?

Stefan U. schrieb:
> Manche Displays (meine) werden blass, wenn man sie andauernd
> aktualisiert (auch ohne clear). Besser sicherstellen, dass zwischen den
> Aktualisierungen einige Millisekunden Pause sind.
Mir ist nicht klar, warum jemand für ein so triviales Problem externe 
Hilfe benötigt!

Ich hole einen Meßwert und schreibe ihn in "LetzterWert". Beim nächsten 
Durchlauf kommt ein Vergleich zwischen "Wert" und "LetzterWert". Wenn 
ungleich (oder größer Hysterese), wird "LetzterWert" aktualisiert und 
"LCDFlag = LCDFlag+1".

Das mache ich in allen Meßroutinen, dann kommt irgendwann LCD-Schreiben.

Nur wenn "LCDFlag >0" wird geschrieben und "LCDFlag" auf Null gesetzt. 
Dafür brauche ich keinen Timer und schreibe halt nur, wenn es wirklich 
Sinn macht.

von Wolfgang (Gast)


Lesenswert?

Stefan U. schrieb:
> Besser sicherstellen, dass zwischen den
> Aktualisierungen einige Millisekunden Pause sind.

Ich erkenne im Display Uhrzeit/Datum, die sich alle 60000 Millisekunden, 
ein paar Temperaturwerte, die auf mehr oder weniger trägen 
Temperatursensoren beruhen, so das eine Aktualisierung alle 10000 
Millisekunden angemessen scheint und die Schaltzustände, die man bei 
Änderung aktualisieren könnte.

Die Pause darf also mindestens im Bereich 1000 Millisekunden liegen ;-)

von Joachim B. (jar)


Lesenswert?

Andreas M. schrieb:
> Bei jedem loop werden die Angezeigten Zeilen aktualisiert

wieso das denn?


mehr als 4 Werte pro Sekunde kann man kaum lesen, also millis befragen 
und bei +250ms LCD neu schreiben.

Ich hatte es mir leicht gemacht und alles was sich ändert wann wo egal 
in ein globales Schattenram geschrieben, also du schreibst in ein Array 
char lcd_txt[4][21] deine 4x20 Zeichen mit /0 am ZeilenEnde und alle 
250ms kopierst du das ins LCD, fertig.

von Stefan F. (Gast)


Lesenswert?

Nach 9 Monaten interessiert sich keiner mehr für deinen Beitrag (der 
übrigens keine neue Erkenntnis bringt) zu dem Thema. Der Drops ist 
längst gelutscht.

von Joachim B. (jar)


Lesenswert?

Stefan U. schrieb:
> Nach 9 Monaten interessiert sich keiner mehr für deinen Beitrag (der
> übrigens keine neue Erkenntnis bringt) zu dem Thema. Der Drops ist
> längst gelutscht.

nicht meckern ohne Wissen:

Beitrag "Re: Projekt: Das Tomaten-Aufzucht-Häuschen mit Web-Interface"

von Andreas M. (andreas61)


Lesenswert?

Ist trotzdem interessant, auch wenn ich es inzwischen anders gelöst 
habe.

Danke und Gruß
Andreas

: Bearbeitet durch User
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.