Display blinken, Kontrast sehr schlecht

Hallo Forum,

ich habe mit einem 4x20 Display (LCD 204B BL :LCD Dot-Matrix-Modul, 4x20 Zeichen, blau, von Reichelt) + NanoTerminal folgendes Problem:

a. Mit einem Script steuere ich den Ausgang 7 des NanoTerminals an, mit weiteren Scripts gebe ich Informationen aus.
Wenn ich die Display LED zur Signalisierung von einem Alarm blinken lasse

// Display blinken für Alarmzustand
if ($Alarm == true)
{
SetValueBoolean(„alarm-display“, true); //Alarmmeldung
$id = 29548; // Test - LCD > ID vom 2408 $ControllerType = „Standard“;
for($i=0; $i<= 20; $i++)
{
TMEX_F29_SetPin($id, 7, True);
IPS_Sleep(300);
TMEX_F29_SetPin($id, 7, False);
IPS_Sleep(300);

     }
     TMEX_F29_SetPin($id, 7, true);   //Beleuchtung aus
     SetValueBoolean("alarm-display", false);   //Alarmmeldung

}

ist die Blinkfrequenz sehr ungleichmäßig und zum anderen werden teilweise Buchstaben eines zweiten Scripts gelöscht.

b. Bei Ausgaben von Texten ist die Lesbarkeit sehr schlecht. Ich habe auch den Eindruck, dass das Display nicht auf die gesendeten Kontrastwerte reagiert. Ist mein Script falsch?
Ausschnitt aus meinem Script:

$InstanceID = 29548;
$ControllerType = „Standard“;
$Zeilen = 4;
$Spalten = 20;

$includeFile = IPS_GetScriptFile(„LCD_Functions“);
require_once „LCD_Functions.ips.php“;

$lcd = new OneWireLCD($InstanceID, $ControllerType, $Zeilen, $Spalten);
//$lcd = new OneWireLCD($id, $ControllerType, $Zeilen, $Spalten);

$lcd->SendLCDInit();

$ContrastValue = 20;
$lcd->SendLCDContrast($ContrastValue);

Sporadisch zeigt das Display „Arabische Flüche“ an, diese werden super gut dargestellt.

Hallo andrge,

zu a)
Für die normale Kommunikation mit dem Display wird ein Strobe-Impuls benötigt. Dieser wird bei der Initialisierung des Displays automatisch eingeschaltet.

Der Impuls wird bei jeder Port-Ausgabe erzeugt, also auch bei Verwendung des TMEX_F29_SetPin(…)-Befehls. Daher fühlt sich das Display jedesmal angesprochen und zeigt daher natürlich Unsinn an.

Du musst also dafür sorgen, dass dieser Impuls während der Port-Ausgabe abgeschaltet ist. Etwa so:

$id = 29548;                               // Test - LCD > ID vom 2408 $ControllerType = "Standard";
if ($Alarm == true)
{
  TMEX_F29_SetStrobe($id, false);          // Strobe-Impuls abschalten
  SetValueBoolean("alarm-display", true);  // Alarmmeldung
  $LED = false;
  for($i=0; $i<=20; $i++)                  // ungerade Anzahl: Beleuchtung ist zum Schluss aus
  {
    TMEX_F29_SetPin($id, 7, $LED);
    IPS_Sleep(500);
    $LED = !$LED;
  }
//  TMEX_F29_SetPin($id, 7, true);           // Beleuchtung aus
  SetValueBoolean("alarm-display", false); // Alarmmeldung
  TMEX_F29_SetStrobe($id, true);           // Strobe-Impuls wieder einschalten
}

Noch ein Hinweis zum SetPin-Befehl: er benötigt etwa eine halbe Sekunde zur Ausführung.

zu b)
Ich frage mich, wozu ich die Dokumentation schreibe, wenn sie offensichtlich niemand liest? :rolleyes:
Selbstverständlich reagiert ein Display mit Standard-Controller nicht auf den Kontrast-Befehl.
Nachzulesen hier und hier. :cool:

Gruß
HJH

Hallo HJH,

danke für den Tipp, den Strobe-Impuls abzuschalten. Es Funktioniert jetzt.
Nur mußte ich den Befehl bei jedem Schleifendurchlauf ausgeben, andernfalls hatte ich die selben „Arabischen Flüche“.

Den Kontrast habe ich nun nach Austausch des Widerstandes „R1, 2,2k“ durch eine Brücke hin bekommen (V0 = 0V). :slight_smile:

Das 4x20 Display unterstützt ST7036 Modus, hat aber keine Funktion für den Kontrast, hatte das Datenblatt nochmals studiert und nicht dazu gefunden. Haste Recht gehabt.
Danke für die schnelle Hilfe!

Grüße
Andrge