Go Down

Topic: Problem mit LCD 16x2 (Read 528 times) previous topic - next topic

B4rney5

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");
}
____________________________

jurs


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.



B4rney5

Quote
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. :~

michael_x

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

So ist es bestimmt weg:
Code: [Select]
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 )

B4rney5

#4
Jan 04, 2013, 01:05 pm Last Edit: Jan 04, 2013, 01:25 pm by B4rney5 Reason: 1
Ich habe jetzt folgendes ausprobiert:
Code: [Select]
#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:
Code: [Select]
#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.

michael_x

Sieht so aus als ob Spalten 8-12 immer in beide Zeilen geschrieben werden.
Quote
Liegt das am LCD? Oder am Arduino?  ... Oder an einer wackeligen Verkabelung?

Da tippe ich jetzt mal auf LCD ;)

jurs

#6
Jan 04, 2013, 02:26 pm Last Edit: Jan 04, 2013, 02:47 pm by jurs Reason: 1

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)!

B4rney5

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


Danke für eure Tipps  :)

Go Up