Problem mit LCD 16x2

Hallo,
ich bin neu hier im Forum und auch Anfänger mit Arduino.
Ich habe ein Problem mit meinem Arduino Nano und einem angeschlossenem LCD.
Das LCD läuft im 4bit Mode.
Prinzipiell funktioniert das auch nur wird in einem bestimmten Bereich das gleiche in Zeile 1 und Zeile 2 angezeigt.
Siehe angehängte Bild.
Liegt das am LCD? Oder am Arduino?

Bin dankbar für jede Idee!

Achja, hier der Code dazu:


#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(){
lcd.begin(16, 2);
}

void loop(){
lcd.setCursor(0,0);
lcd.print(" haaallo");
lcd.setCursor(0,1);
lcd.print("welt");
}


IMG_0262.JPG

B4rney5:
Liegt das am LCD? Oder am Arduino?

Oder an einer wackeligen Verkabelung.

Deine loop-Funktion gibt tausendmal pro Sekunde den Text immer wieder neu auf dem Display aus.

Da braucht nur einmal für weniger als eine tausendstel Sekunde eine Leitungsstörung bei einer der Datenleitungen aufzutreten, dann wird der Befehl lcd.setCursor(0,0); womöglich nicht korrekt ausgeführt und übersprungen, und schon wird der haaallo Text dann hinter "welt" ausgegeben. Und da bleibt er dann auch stehen, selbst wenn anschließend danach der übrige Text wieder tausende von malen pro Sekunde korrekt ausgegeben wird.

dann wird der Befehl lcd.setCursor(0,0); womöglich nicht korrekt ausgeführt und übersprungen, und schon wird der haaallo Text dann hinter "welt" ausgegeben

Aber dann sollte doch das komplette "haaallo" hinter "welt" stehen, oder versteh ich das falsch?
Ich hab natürlich schon etwas rumgespielt und es sind immer die gleichen 4 Stellen die in der 1. und 2. Zeile gleich sind. :~

es sind immer die gleichen 4 Stellen die in der 1. und 2. Zeile gleich sind.

So ist es bestimmt weg:

void loop(){
  lcd.setCursor(0,1);
  lcd.print("welt");
  lcd.setCursor(0,0);
  lcd.print("      haaallo");
}

Evtl reicht ein kleines delay nach lcd.begin();

Interessant wäre auch rauszukriegen, ob diese 4 Zeichen nur einmal, oder öfters geschrieben werden:
Ein einfacher Test:
if ( ( millis() && 0xfff0 ) == 0)  lcd.clear(); // löscht jede Minute das Display

( genauer: nach 65,5 sec. Falls ein loop Zyklus <16 msec lang ist, sonst wird das evtl. verpasst )

Ich habe jetzt folgendes ausprobiert:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(){
  
  lcd.begin(16, 2);
  delay(500);
  lcd.print("aaaaaaaaaaaaaaaa");
}

void loop(){
}

Resultat ist Bild "a"

Danach folgendes:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(){
  
  lcd.begin(16, 2);
  delay(500);
  lcd.print("aaaaaaaaaaaaaaaa");
  lcd.setCursor(0,1);
  lcd.print("bbbbbbbbbbbbbbbb");
}

void loop(){
}

Resultat ist Bild "ab"

Beide male schreibe ich im "void setup()" ins Display und nicht im "loop()".
Also doch nur ein mal!?!

@michael_x: Zuerst die 2. Zeile und dann erst die 1.Zeile zu beschreiben brachte keinen Erfolg.

a.JPG

ab.JPG

Sieht so aus als ob Spalten 8-12 immer in beide Zeilen geschrieben werden.

Liegt das am LCD? Oder am Arduino? ... Oder an einer wackeligen Verkabelung?

Da tippe ich jetzt mal auf LCD :wink:

B4rney5:
Beide male schreibe ich im "void setup()" ins Display und nicht im "loop()".
Also doch nur ein mal!?!

Ja, im setup wird es nur einmal geschrieben.

Halte mal Ausschau nach Kurzschluss-Lötbrücken zwischen Deinen Datenleitungen (D4, D5, D6, D7)!

Problem gelöst:
Display defekt!
Mit meinem anderen 16x2 LCD funktioniert es tadellos!

Danke für eure Tipps :slight_smile: