Probleme beim Ansteuern des Displays 2004a v2.0 / LCD 1602: Zeichenschrott

Hallo,
ich habe ein Darstellungsproblem mit dem I2C Controller LCD 1602 2004
(hier bestellt: https://www.amazon.de/gp/product/B017CWSBXQ/ref=oh_aui_detailpage_o07_s00?ie=UTF8&psc=1)
Hinweis: Verlötet ist ein PCF8574AT.

und das dazugehörige 20x4 LCD 1602 basierend auf dem Hitachi HD44780 (https://www.amazon.de/gp/product/B00MODAKM4/ref=oh_aui_detailpage_o09_s00?ie=UTF8&psc=1).

Angeschlossen ist das Ganze an einem Arduino Nano.
(Aufbau.jpg)

Controller Arduino
SDA A4
SCL A5
VCC 5V
GND GND

Controller → Display (2004A v2.0) (ConToLCD.jpg)

Das LCD zeigt mir leider bestenfalls absolut falsche Zeichen an und positioniert den Cursor falsch.

Verwendet wurde die NewLiquidCrystal Library von fmalpartida (https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/) in der Version 1.3.5 und 1.2.1
und habe auch folgende Webseite schon konsultiert, die sich mit den unterschiedlichen Versionen des I2C Displays auseinandersetzt (https://arduino-info.wikispaces.com/LCD-Blue-I2C#v1).

Als Adresse zur Ansteuerung des Displays wird 0x3F verwendet, quasi die Version 1 bei obigem Link.

Der folgende Source wurde verwendet:

#include <Wire.h>  // Comes with Arduino IDE
#include <LiquidCrystal_I2C.h>

//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

/*-----( Declare Variables )-----*/
//NONE

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
 Serial.begin(9600);  // Used to type in characters

 lcd.begin(16,2);   // initialize the lcd for 16 chars 2 lines, turn on backlight

// ------- Quick 3 blinks of backlight  -------------
 for(int i = 0; i< 3; i++)
 {
   lcd.backlight();
   delay(250);
   lcd.noBacklight();
   delay(250);
 }
 lcd.backlight(); // finish with backlight on  

//-------- Write characters on the display ------------------
// NOTE: Cursor Position: (CHAR, LINE) start at 0  
 lcd.setCursor(0,0); //Start at character 4 on line 0
 lcd.print("Hello, world!");
 delay(1000);
 lcd.setCursor(0,1);
 lcd.print("HI!YourDuino.com");
 delay(8000);  

// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
 lcd.clear();
 lcd.setCursor(0,0); //Start at character 0 on line 0
 lcd.print("Use Serial Mon");
 lcd.setCursor(0,1);
 lcd.print("Type to display");  


}/*--(end setup )---*/


void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
   // when characters arrive over the serial port...
   if (Serial.available()) {
     // wait a bit for the entire message to arrive
     delay(100);
     // clear the screen
     lcd.clear();
     // read all the available characters
     while (Serial.available() > 0) {
       // display each character to the LCD
       lcd.write(Serial.read());
     }
   }
}

Nach jeder Komplierung und jedem Upload wurde der Arduino kurzzeitig vom Strom getrennt.
Nachfolgend die Versuche mitsamt der Pinkonfiguration:

addr, en,rw,rs,d4,d5,d6,d7,bl,blpol

lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE)
Ergebnis:
Das Display blinkt, leuchtet dann konstant, aber keinerlei Ausgabe auf dem LCD.
[nichts.jpg]

lcd(0x3F, 2, 1, 0, 4, 6, 5, 7, 3, POSITIVE)
Ergebnis:
[31Sonst.jpg]

lcd(0x3F,2, 1, 0, 6, 7, 5, 4, 3, POSITIVE)
Ergebnis:
[FZSonst.jpg]

Auch reproduzierbar mittels Minimalbeispiel wie diesem hier:

#include <Wire.h>  // Comes with Arduino IDE
#include <LiquidCrystal_I2C.h>

//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x3F,2, 1, 0, 6, 7, 5, 4, 3, POSITIVE);  // Set the LCD I2C address

/*-----( Declare Variables )-----*/
//NONE

void setup()
{
  lcd.begin(20,4);   // initialize the lcd for 16 chars 2 lines, turn on backlight

  lcd.backlight(); // finish with backlight on  

  lcd.setCursor(0,0); //Start at character 4 on line 0
  lcd.print("Hello, world!");
  delay(3000);

  lcd.clear();
  lcd.print("Hallo");

}

void loop()
{

}

Weiterhin habe ich die Leitungen von Display zu Controller und von Controller zu Arduino mittels Multimeter geprüft, dabei war alles i. O.

Hätte hier jemand einen Tipp wie man auf die korrekte Pinkonfiguration kommen oder was hier los sein könnte?

nichts.jpg

FZSonst.jpg

Aufbau.jpg

31Sonst.jpg

ConToLCD.jpg

Ich vermute eine Fehler in der Kabelverbindung zwischen dem I2C-Board und dem Display.

Warum hast du das Board nicht direkt verlötet ?
Es können auch schlechte Lötstellen sein, kann man leider nicht so gut erkennen.

Das Ergebnis auf dem Display deutet jedenfalls auf einen Fehler in der Datenübertragung hin.

https://forum.arduino.cc/index.php?topic=478970.15

Und das Display brauch noch ein Widerstand für die LED (siehe hier), wenn du es so betreiben willst.

Sind auf dem der I2C-Platine Pullup-Widerstände an SDA und SCL verbaut (stromlos messen)?

Gruß Tommy

skorpi080:
https://forum.arduino.cc/index.php?topic=478970.15

Was möchtest du uns damit sagen ?

Mit dem von dir zitiertem, nichts.
Mit dem aus meinem Post, soll er sich durchlesen.

skorpi080:
Mit dem von dir zitiertem, nichts.
Mit dem aus meinem Post, soll er sich durchlesen.

Dann schreib das doch bitte dabei.

Und er hat lt. Foto die Pins 1zu1 (Adapter-Diplay) verbunden.
Sollte bei sauberen Lötstellen auch funktionieren.
Aber die Lötstellen sehen nicht sehr vertrauenswürdig aus, was man so erkennen kann.

Es könnte auch noch Wackelkontakte am Breadboard geben. Das wäre nicht das erste mal, dass ein Breadboard keinen sauberen Kontakt bringt.

Den ersten Sketch aus #0 habe ich auf meinen UNO geladen und erhalte dieses Ergebnis:

Leider gibt es viele Bibliotheken mit dem Namen LiquidCrystal_I2C. Ich habe die verwendete aus dieser Quelle:

http://www.instructables.com/id/How-to-connect-a-serial-LCD-to-an-Arduino-UNO/step2/The-Sketch/ Beschreibung
https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home Beschreibung
https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads Download

Inzwischen verwende ich diese Bibliothek GitHub - duinoWitchery/hd44780: Extensible hd44780 LCD library, die macht die Konfiguration automatisch. Bei Wackelkontakten hilft das natürlich auch nicht :slight_smile:

Hallo,

Wenn Du das Display so verlötest wie es Verkabelt ist, würde das Breakout nach oben zeigen.
Du musst es quasi Umdrehen und neu verkabeln.

Es könnte auch noch Wackelkontakte am Breadboard geben. Das wäre nicht das erste mal, dass ein Breadboard keinen sauberen Kontakt bringt.

Dem kann ich nur Zustimmen!

lg dony

dony:
Hallo,

Wenn Du das Display so verlötest wie es Verkabelt ist, würde das Breakout nach oben zeigen.
Du musst es quasi Umdrehen und neu verkabeln.
Dem kann ich nur Zustimmen!

lg dony

Hey...Dony, deine Aussage hat mich richtig erschrocken.

Aber sieh es dir genau an, die Platine ist richtig verkabelt.
Bei falscher Verkabelung wäre auf dem Display nichts zu sehen.

Wenn ihr mich fragt, hat er das Problem gelöst und lacht euch aus.

skorpi080:
Wenn ihr mich fragt, hat er das Problem gelöst und lacht euch aus.

Klar ist das so, war ja schon öfter der Fall.
Dennoch hilft unsere Diskussion evtl. anderen Mitlesern.
Und solange er/man noch etwas zu Lachen hat, ist es doch gut.

Und ich hoffe noch, das der TO seine Lösung präsentiert.

HotSystems:
Hey...Dony, deine Aussage hat mich richtig erschrocken.

Sorry! :wink: Ja hast Recht, das ist ja am Steckbrett befestigt, auf dem Foto 'ConToLCD.jpg' schaut das so aus, als würden die Kabeln direkt weggehen.

Also sonst kann ich zu dem Thema nur sagen dass mich die verschiedenen Libraries sehr verwirren. Soweit ich das mitbekommen habe, verwenden viele das Modul vom TO. Ich habe ein ähnliches, mit dem selben IC aber ich habe mit dieser new-liquidcrystal Library auch meine Probleme. Ich verwende eine andere die super funktioniert (aus der Bibliothekverwaltung).

Das sollte ich mir auch mal näher anschauen.

lg dony

Klar kann das auch an der Library liegen, aber da der TO sich ausgeklinkt hat, hilft ihm und uns das nicht weiter.

Und agmue hat ja schon geschrieben, was er unternehmen sollte.

klingele mal die Datenleitungen und die Adressleitungen zwischen dem PCF und dem Display durch. Ich hatte mal Chinaplatinen, da mußten 2 Leitungen von RS, RW und E gekreuzt werden, oder man hat halt in der Lib das umgefrickelt. Du hast den Vorteil das direkt im Code erledigen zu können.

Hallo @all,
erst einmal vielen vielen Dank für die zahlreichen Antworten. Ich werde erstmal ein bisschen noch mit den von euch gemachten Vorschlägen experimentieren und dann Rückmeldung geben.

@HotSystems: Laut Kommentaren auf der Amazon-Website kann es bei dieser Platine anscheinend vorkommen, dass die Leitungen kreuz und quer gelegt sind, was bei 'nix mehr frei' (Feb 06, 02:16 pm) auch vorgekommen ist, deswegen dachte ich, dass ich hier besser auf Drahtbrücken setze (Werde aber die Platine erneut auflöten und dann Softwareseitig die jeweiligen Pins individuell belegen, ums mal so zu sagen).

Auch mit den Lötstellen hast du recht: Ich hatte versucht, nachdem ich das erste mal den i2C Controller angelötet hatte, den wieder abzulöten. Also: Lötstellen sauber machen und erneut - sauber - verlöten.

Ebenfalls habe ich mich noch nicht ausgeklinkt, etwas Geduld bitte :); war die letzten Tage unterwegs und hatte deshalb sowieso keinen Zugang zu meinen Geräten.

@Tommy56 Ich schau mal

@skorpi080
Es waren, soweit ich mich noch erinnern kann, auf vielen Foren Posts, die Probleme mit der Displaybeleuchtung beschrieben und deswegen einen Widerstand benötigte. Ob das hier zutrifft, ist fraglich.

@Theseus/dony: Wie oben beschrieben, wird die Platine neu verlötet und diesmal auf das Breadboard verzichtet

@agmue: Dann kann ich sicher sein, dass der Sketch auch so funktioniert, aber eine vorgeschlagene Library von dir, wird ebenfalls getestet.

Nochmals vielen Dank an alle! Ich seh zu dass ich dann hoffentlich demnächst meinen Fortschritt posten kann.
Viele Grüße

paddyp88:
Ebenfalls habe ich mich noch nicht ausgeklinkt, etwas Geduld bitte :);

Sorry, ich bin leider sehr ungeduldig. :wink:

Kurzes Update: Ich habe den Controller wieder direkt angelötet und mal den Zufall bzgl. der Pinbelegung spielen lassen und teils valide Outputs (d.h. nicht nur sinnlosen Zeichen) erhalten bzw. gemerkt, dass auch mit einer etwas anderen Pinbelegung der blinkende Block angezeigt oder überhaupt Zeichen angezeigt werden. Ich war ja bisher der Meinung, dass die Pins 0,1,2 der Belegung RS, RW, EN zugeordnet werden.

@agmue:
Die fmalpartida library verwendete ich eben auch schon, leider mit negativem Ergebnis. Analog die HD44780 lib. Bei dieser allerdings (HD44780 lib) wird bei der Diagnose mittels HDexpDiag (so ähnlich) über den Serial Monitor ausgegeben, dass der I2C Bus bei 0x3F gefunden wurde aber kein funktionierendes LCD, was für einen Wackelkontakt oder fehlende Widerstände spricht. Wie hast du dein Display angeschlossen bzw. hast du zufälligerweise einen Arduino Nano an dem du das probieren könntest?

paddyp88:
Wie hast du dein Display angeschlossen bzw. hast du zufälligerweise einen Arduino Nano an dem du das probieren könntest?

Habe ich, kann aber bis zum WE dauern ...