LCD Display EA161B-ENLW

Hallo,

Ich habe mir dieses LCD gekauft EA161B-ENLW, es ist ein einzeiliges 16 stelliges Display mit relativ grossen Zeichen. Ich habe dieses nach Standart angeschlossen. 10K Poti an UB / Masse / Schleifer an VEE . Ich bekomme jedoch nichts angezeigt. LED für HG ist mit 150R an 5 V angeschlossen.
Selbst wenn man nur UB und GND anschliesst und den Kontrast hoch dreht müsste ich wenigstens etwas auf dem Display tun. Es passiert aber nichts. Das Display wird wohl letztentlich nicht als 1x16 angesehen sondern als 2x8 wobei die 2.Hälfte neben dem ersten ist. Ich weis nicht ob das später auch noch zu einem Problem wird.

Hier erst mal das Datenblatt:

Und dann das Standart Testprogramm:

/*
  LiquidCrystal Library - Hello World
 
 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the 
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.
 
 This sketch prints "Hello World!" to the LCD
 and shows the time.
 
  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * LCD VSS pin to ground
 * LCD VCC pin to 5V
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
 
 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe
 modified 22 Nov 2010
 by Tom Igoe
 
 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 1);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 0);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
}

Hat jemand eine Idee was ich noch tun kann?

Bajazzo:
Hat jemand eine Idee was ich noch tun kann?

Das sieht erst mal alles richtig aus, wenn auch der richtige Controller auf dem Display verbaut wurde.
Hast du die Verbindungen geprüft, ein Steckbrett hat gern schlechte bis keinen Kontakt.

Hast du mal eine andere Library geprüft?

Die Verbindungen sind alle OK. Der Controller soll HD44780 kompatibel sein (KS…)
Wie prüfe ich denn eine andere Library?

Bajazzo:
Die Verbindungen sind alle OK. Der Controller soll HD44780 kompatibel sein (KS...)
Wie prüfe ich denn eine andere Library?

Alte Library löschen, neue Library einbinden: Library einbinden

Oder diese einbinden: LiquidCrystal Arduino Library, using small character LCD modules with Teensy

Hallo,

die Libs sind schon seit gefühlten Jahrzehnten getestet. Nimm deine Verdrahtung nochmal komplett auseinander und verdrahte komplett neu laut Datenblatt. Nicht nach irgendwelchen dubiosen Internetseiten. D0 ... D3 vom Display bleiben unbeschalten. Also weder auf (+) noch auf (-). Die externe Helligkeitsregelung kannste erstmal weglassen. Erstmal muß die eigentliche Initialisierung funktionieren.

Hallo,

ich kann mich Doc_Arduino nur anschließen. Ich hatte erst vor wenigen Tagen ein vielleicht vergleichbares Problem: Es wurde zwar alles korrekt angezeigt, aber ich musste mächtige Klimmzüge programmieren, DASS etwas gescheites angezeigt wurde. Letztendlich stellte sich heraus, dass ein kleiner Kupferkrümel einen "Kurzen" produzierte und alles "verrückt" spielte. Also: Lib's tauschen erst mal in den Hintergrund verschieben - und die Verdrahtung mind. 2x mehr prüfen als gewöhnlich.

Rudi

EDIT:
150 Ohm für die LED-Beleuchtung erscheint mir eh etwas viel. Lt. Datenblatt max. 30mA, also müsste man mit 220, 330 oder 470 Ohm recht gut bedient sein. Denke ich.

Also die Verbindungen habe ich alle geprüft. Alle OK soweit.
Der Übeltäter war ein !! nicht vorhandener !! 0 Ohm SMD Widerstand . Ich habe den dann nachträglich
eingelötet und es läuft soweit.
Das Display wird wie ein 2x8 zeiliges Display behandelt.

Hier erstmal der geänderte Testsketch:

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
   
 
  // set up the LCD's number of columns and rows: 
  lcd.begin(8, 2);
  // Print a message to the LCD.
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("hello");
  lcd.setCursor(0,1);
  lcd.print("world!");
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(5, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
}

Kann mit jemand einen Tip geben wie ich es als ein einzeiliges 16-stelliges Nutzen kann?
Ansonsten muss ich halt mit lcd.setCursor arbeiten.

Das Display soll ja später mit einem Arduino Nano auf der Rückseite bestückt werden auf dem ein Frequenzzähler Programm läuft.

Bajazzo:
Also die Verbindungen habe ich alle geprüft. Alle OK soweit.
Der Übeltäter war ein !! nicht vorhandener !! 0 Ohm SMD Widerstand [0]. Ich habe den dann nachträglich
eingelötet und es läuft soweit.

Uii, das ist ja mal fies.

Für die Umstellung deines Displays habe ich leider keine Idee.
Allerdings ist die Verwendung der "Setcursor"-Funktion auch nicht so aufwendig.

Hallo,

also wenn das Display wirklich ein Originales ist von EA und der Widerstand wirklich fehlte, dann kannste dich mal an EA wenden. Ich hatte vor Jahren ein DOGM bei Reichelt gekauft mit Hintergrundbeleuchtungsmodul. Eigentlich nur zusammen stecken und verlöten. Die Pins paßten aber nicht. Ich dachte schon ich bin total doof. Habe mich an EA gewandt, die lachten förmlich in der Antwort, entschuldigten sich, war ein Fertigungsfehler vom Automaten und ich bekam ein 2. Display geschenkt. Bilder machen und Glück versuchen.

Ja, ich kam mir auch so langsam "doof" vor. Selbst wenn man den Kontrast hochdreht müssten sich wenigstens die Dot-Blöcke zeigen.... aber nichts dergleichen. Ich habe auch mit negativer Spannung am VEE getestet, das Display war ebenfalls unbeeindruckt davon. Es lag wirklich nur an der Brücke (0Ohm SMD R).
Ob die mir ein 2. Display zukommen lassen glaub ich kaum, da ich doch dran rumgelötet habe.

Hallo,

meins wollten die zurück haben. Landete entweder in der Tonne bei denen oder in der Vitrine für Kuriositäten.
Du hast zwar den Beweis halb vernichtet, nur niemand lötet zum Spass am Display rum. Wenn du den das glaubhaft und ehrlich schreibst, so wie es wirklich war und was du alles nacheinander getestet hast bist du darauf gekommen bist, werden sie dir hoffentlich glauben. Klar macht etwas Arbeit. Mußt du wissen. Ich möchte nichts aufzwingen. Wie auch. :slight_smile: Nur die EA Displays sind wirklich geil.

Hallo,

wegen dem 2x8 statt 1x16.
http://www.sprut.de/electronic/lcd/
Der HD44780 alleine kann nur 2x8 für 1x16. Der wird quasi mit 2 Zeilen a 8 initialisiert. Die 2x8 Zeichen sind hintereinander verbaut. Ansonsten ist immer ein Zusatzchip mit drauf.

Stört aber nur bei der Cursorposition Berechnung. Er rückt ansonsten immer automatisch nach.

Du kannst aber gern das Controller Datenblatt nehmen und das hier lesen und mit der Initialisierung rumspielen. Vielleicht haste Glück. Dot-Matrix-LC-Displays

Hallo,

wegen dem 2x8 statt 1x16. Hat sich das Problem irgendwie gelöst?
Ansonsten hätte ich dazu eine Idee.

Hallo in Runde,

ich habe ein ähnlihces Probelm,

ich benutze einen Mega2650 und ein LCD Display was mit 1x 16 Zeichen hat.
Leider ist es wie bei Bajazzo nicht 1x 16 sondern 2x8 Zeichen die hintereinder gelegt sind …

ich versuche gerade das Sketch so umzuschreiben das ich immer mit

lcd.setCursor(0,X)

die anzeige so hinzubekommen,
was nicht immer ganz so einfacht ist, da viele sachen in Schleifen, bzw. in If Abfagen ausgegeben werden.

(Nur zur info ich hatte das Sketch auf einen Andern Display geschriben, Muss aber auf ein Display von EA umsteigen da die größe der Anzeige das entscheidene ist)

@Doc_Arduino im letzen Post hast Du geschriben das Du eventuell eine Idee hättest.
ich würde mich sehr freuen davon zu hören !

Viele Grüße
Johann

Hallo,

oh, dass ist nun schon eine Weile her.
Die Idee war jedoch wie du selbst schon darauf gekommen bist, sich die Cursorposition zu merken und dann ensprechend >7 die Zeile von 0 auf 1 zu ändern.

Das praktisch allgemein umzusetzen ist nicht einfach. Ich weis. Man muß sich die Länge vom auszugebenden Text zurückgeben lassen, mit der Start x Cursorposition bis 7 zerlegen und den Rest in die nächste Zeile und x=8 weiter ausgeben lassen. Da müssen paar String Operation herhalten.

Als Einstieg gebe ich dir mal mein “Merkcode / Lerncode” von damals.
Da werden sicherlich noch paar Stringoperationen fehlen für das hier.

Aus dem Hut zauber ich das mit Strings auch nicht. Bin zu dem z.Z. in mein neues Projekt vertieft.

Wenn du dir einen wohl überlegenden Ablaufplan erstellt hast wie du die Zeichenketten zerlegst und den Rest dann ausgibts und es nur noch mit dem Stringoperationen scheitert, dann erstelle einen neuen Thread mit passenden Namen und es treten andere User in Aktion die da besser Bescheid wissen wie ich. Bis jetzt ging es hier um das Display und eine Idee dazu das Problem zu umgehen.

Aktuell stelle ich mir das so vor. Zeichenkette der Funktion übergeben mit Angabe der Start-Cursorposition x/y.
Die Funktion zerlegt dann entsprechend die Zeichenkette in die 2 Zeilen falls es den “Überlauf” gibt. Die Funktion kann dann auch beide Teile gleich auf das Display ausgeben.

hier noch paar Links: (hoffe das verwirrt nicht)
https://de.wikibooks.org/wiki/C-Programmierung:_Zeichenkettenfunktionen#Zeichenkettenfunktionen
http://www.cplusplus.com/reference/string/string/
http://www.nongnu.org/avr-libc/user-manual/group__avr__string.html
http://www.cpp-tutor.de/cpp/le06/string.html
http://www.c-howto.de/tutorial-strings-zeichenketten-stringfunktionen.html
http://www.cprogramming.com/tutorial/c/lesson9.html

Stringlaenge_003.ino (3.35 KB)

Hallo,

es läßt einem doch keine Ruhe. Wenn du errechnet hast wieviele Buchstaben entfernt werden müssen, dann kann man bestimmt mit "String Remove" löschen was man löschen muß und den Rest an neuer Position ausgeben.
https://www.arduino.cc/en/Tutorial/StringRemove

Edit:
Moment, bin bestimmt total aus dem Tritt. Das 1x16 Display verhält sich wie ein 2x8 Display.
Macht es einen automatischen Cursor Shift, wenn du Text mit einer Länge größer 8 Zeichen ausgibts?
Meinetwegen an Position (2,0). Sollte ja so sein. Es sollte nichts fehlen in der Darstellung.
Das Problem ist eher, du mußt umdenken wenn du was an Position 12,0 schreiben möchtest, in 1x16 Denkweise, was dann mit Cursorposition 4,1 positioniert werden müßte. Das ist das Problem, richtig?
Ich glaube jetzt weis ich auch wieder was ich damals still gedacht hatte. :wink:
Man schreibt sich eine eigene Cursor-Set Funktion und positioniert entsprechend um.
An den Text muß man sich nicht vergreifen. Das bleibt alles wie es ist. War Blödsinn.
Differenz der gewünschten X Position in 1x16 Denkweise, wenn x größer 7, dann 8 abziehen, Rest ist X neu und Zeile auf 1 setzen, diese Werte der eigentlichen lcd.set Funktion übergeben in der Funktion.
Sollte nun klappen ...

Edit 2:

void loop() {

  EA161setCursor(12,0);   
  lcd.print("TEST");
  
}   // loop Ende


// ****** Funktionen ******* //

void EA161setCursor(byte x, byte y)  // setzt 1x16 zu 2x8 um
{
  if (x>7 && y==0)  {
    x = x - 8;
    y = 1;
  }
  lcd.setCursor(x,y);  // deine originale setCursor Funktion
}

Hallo Doc_Arduino,

ich habe es über eine, wie ich finde, unelegante lösung gemacht.

ich habe ein Arrey, 30x 1 Buchstaben gespeichet hat.
Danch zähle ich wie viele Buchstaben schon “geschrieben” wurden, und wenn die ersten 8 Zeichen voll sind sprige ich auf die zweite zeiele. geht aber nur da ich nur eine Bestimmt anzal des Arrey ausgeben.
im Prinzip immer für jede einzelne Ausgabe die an das LCD geht, eine If Abfragen mit der entsprechen setCursor postion.
Hat das Code ein Bisschen aufgebläht =)

Moment, bin bestimmt total aus dem Tritt. Das 1x16 Display verhält sich wie ein 2x8 Display.
Macht es einen automatischen Cursor Shift, wenn du Text mit einer Länge größer 8 Zeichen ausgibts?

Leider nein, (zumindest nicht Bei mir) die Zeichen nach der 8 Stelle werden einfach nicht angezeigt.

ich glaube es liegt daran das bei Disen Display imm noch ein Punkt reihe darunter ist

xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx
xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx
xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx
xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx
xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx
xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx
xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx

xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx

Wobei ich es noch nicht hinbekommen habe dort was anzuzeigen.

lcd.setCursor(0, 0); ist das Erste Zeichen (5x7 Pixel) und
lcd.setCursor(0, 1); ist das 8 Zeichen (5x7 Pixel) und

komisch komisch komisch,

Wei gesagt es läuft ersteinmal aber es ist glaube ich nur eine Frage der Zeit wann diese Theama wieder aufplopt =)

Viele Grüße
Johann

Hallo,

du schreibst also ab 0,0 > "1234567890" und dabei fehlt "90" komplett wie vom Erdboden verschwunden.
Seltsames Verhalten. Kannst du prüfen oder befehligen ob auto shift wirklich aktiv ist?
Ansonsten gebe mir mal den Link zu dem Display. Oder konkret das EA W161B ?
Wie hast du es angeschlossen? 8Bit oder 4Bit oder ?
Welche Lib nimmst du?
Mal sehen ob mir dann noch was einfällt ...

Edit:
Deine zusätzliche Pixelzeile wundert mich doch etwas. Ist das wirklich ein einzeiliges Display?
Wenn möglich, mach mal bitte mit Hintergrundbeleuchtung und Kontrast ein Nahfoto.
Nicht das du ein 16x2 hast und es als 1x16 ansteuerst und dabei, aus welchen Gründen auch immer,
eine falsche Pixelzeile auftaucht.

Hallo Doc

mir sind ein paar sachen dazwischen gekommen deshalb kommmt erst jetz die Antwort,
sorry.

Ich benuzte diese Display von Reichelt

es ist jezt nicht geanu das selbe wie im Thread beschriben, aber hat diese 2x8zeichen problem.

u schreibst also ab 0,0 > “1234567890” und dabei fehlt “90” komplett wie vom Erdboden verschwunden.

Genau so ist es, erst wenn ich setCurser auf die zweite zeile gehe kann ich die 90 ausgeben.

Auch wenn ich es als 3 oder 4x 8 Display behandele kann ich auf die Pixel in der unterren reihe nicht schreiben …

zur Ansteuerung ich betreibe es über ein Arduino mega 2560,
LiquidCrystal lcd(30, 31, 32, 33, 34, 35); also mit 4 Bit
und der “standert” LIB #include <LiquidCrystal.h>
aus der Arduino 1.6.8

befehligen ob auto shift wirklich aktiv ist?

das verstehe ich nicht wirklich … selle ich das am Display ein ? im Datasheet steht auch das ich Zeichen generieren könne und im Display speichern kann, wie das funktionieren soll ist mir noch ein rätzel …

wie schon geschrieben momentan habe ich es mit einer menge if else abfragen gelöst, nicht schön aber machbar.

Viele Grüße Johann

Hallo,

keine Sorge, wir sind hier in einem Forum und keinem Chat.
Und es ist ja nicht so das ich mich langweile. :slight_smile:
Okay, so ein Display habe ich nicht da, hab nur 2 DOGMs, aber es gibt wenigstens ein ordentliches Datenblatt, eben weil von EA. Aber es ist laut Reichelts Beschreibung genau das gleiche. EA W161B-ENLW

Hab mir mal die Standard Lib angeschaut. Auto Cursor Shift ist standardmäßig eingeschalten. Hätte mich auch gewundert. Am Display sieht man das nicht. Dazu muß man sich die Lib anschauen. Solange aber das auto cursor shifting nicht funktioniert, solange machen die anderen Funktionen am Ende auch nur Müll.

Muß im Grunde funktionieren.
Deine Pins 30...35 sind in der Reihenfolge am Display an RS, Enable,D4,D5,D6,D7 ?
Dann muß der Fehler im Sketch liegen nehme ich an.
Zeige mal bitte deinen gesamten Sketch.
Entweder in Code Tags oder hängst die .ino ran.

Wenn das Cursor Shifting irgendwann über die beide halben Zeilen funktioniert, kannste dann zum Cursor setzen die Funktion aus #15 verwenden. Dafür war die gedacht. Solange der Cursor aber nicht automatisch von Zelle 7 auf Zelle 8 springt nützt das nur leider nichts.

Das mit den eigenen Sonderzeichen ist kein Thema, zeig ich dir im Anschluss.