Programmierung LCD 1602 Sainsmart

Hallo,

ich hoffe, ihr könnt mir helfen, denn ich habe massive Probleme meine LCD-Displays von Sainsmart zum Laufen zu bringen.
Das erste ist das Keypad-Shield 1602 von Sainsmart, das andere das ähnlich, nur ohne das Keypad-Shield.

Habe beide richtig angeschlossen, Strom ist drauf, dimmen geht auch, ich sehe aber immer nur einen blöden Balken :~
(Wäre froh, wenn ich zumindest schon mal zwei Balken sehen könnte...)
Die Beispiel-Programmierungen von Arduino "hello world" kriege ich schon gar nicht hin.

Habe es schon mit beiden Programmversionen (1.0.5 und IDE 0023) probiert, funzt alles nicht.
Weder auf dem Mega 2056 noch auf dem UNO...

Pins sind richtig belegt, zumindest nach der Beispiel-Programmierung.
Auch wenn ich die ändere und die Pinbelegung im Programm anpasse geht es nicht.

Einmal hatte ich zumindest ein paar Hieroglyphen, wie ich das hinbekommen hab, weiß ich aber auch nicht mehr, zumal die dann auch plötzlich verschwunden sind.

Was mache ich falsch???? :astonished:

Wenn Du nur Balken hast ist der Kontrast nicht richtig eingestellt. Also zweifle ich "alles richtig angeschlossen" mal an.
Und ob die Initialisierung mit den richtigen Pins erfolgt kann ich auch nur vermuten.

Kontrast einstellen funktioniert ja, wenn ich den runter drehe sehe ich die oberste Reihe halt nur in grau....
Wenn ich das Progamm uploade, dann läuft der Balken einmal durch und verschwindet dann wieder...
Aber auch nur oben, die zweite Zeile sehe ich ja überhaupt nicht.

Wenn ich RS und EN Pins abziehe, dann sehe ich eine Reihe nur "fffffffffffff", also irgendwas scheint ja da zu passieren....

Marabu2:
Die Beispiel-Programmierungen von Arduino "hello world" kriege ich schon gar nicht hin.

Für das Sainsmart LCD-Keypad-Shield lautet die richtige Initialisierung:

LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Sainsmart keypad LCD

Ansonsten bei einem "nackten" LCD, das Du selbst verkabelst, ist die Initialisierung in der Software davon abhängig, welche Pins vom LCD Du mit welchen Pins vom Arduino verbindest.

wenn ich das so mache, dann sehe ich gar nichts =(

Klaus_ww:
Wenn Du nur Balken hast ist der Kontrast nicht richtig eingestellt. Also zweifle ich "alles richtig angeschlossen" mal an.
Und ob die Initialisierung mit den richtigen Pins erfolgt kann ich auch nur vermuten.

Wenn man den Balken auf einer Zeile sieht ist der Kontrast richtig eingestellt aber das Display wird nicht (richtig) angesteuert.
Grüße Uwe

Marabu2:
wenn ich das so mache, dann sehe ich gar nichts =(

Das Displayshield auf den Arduino UNO gesteckt muß funktionieren. machen Die Pins richtig Kontakt?
Mach mal einige Fotos
Grüße Uwe

LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Sainsmart keypad LCD

Hm. Bei meinem nicht: im Tutorial (mitgeliefert von Sainsmart zum MEGA) soll mans folgendermassen machen:

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

Dazu dann in der setup() natürlich auch:

lcd.begin(16, 2);

Übrigens: mit nem Kumpel aus dem Schiffsmodell-Forum hab ich das neulich auch durch (seins ist allerdings ein auf I2C aufgerüstetes)- dort haben wir ewig rumprobiert.
Als er einfach mal die Lib neu installiert hatte, lief es..

Rabenauge:
Hm. Bei meinem nicht: im Tutorial (mitgeliefert von Sainsmart zum MEGA) soll mans folgendermassen machen:

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

Das ist Tinnef, soweit es das Keypad-Shield betrifft.

Sainsmart verkauft natürlich nicht nur das Keypad-Shield, sondern auch nackte LCDs, die man natürlich so anschließen kann, dass es mit LiquidCrystal lcd(12, 11, 5, 4, 3, 2); funktioniert. Aber das funktioniert nicht beim Keypad-Shield. Zeig mir das Tutorial, wo was anderes zum Keypad-Shield drinsteht!

Rabenauge:
Übrigens: mit nem Kumpel aus dem Schiffsmodell-Forum hab ich das neulich auch durch (seins ist allerdings ein auf I2C aufgerüstetes)- dort haben wir ewig rumprobiert.
Als er einfach mal die Lib neu installiert hatte, lief es…

I2C hat mit dem Keypad-Shield rein gar nichts zu tun.

Ein funktionierender Sketch für das LCD Keypad-Shield ist:

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Sainsmart keypad LCD

void setup() {
  lcd.begin(16, 2);
  lcd.print("hello, world!");
}

void loop() {
  lcd.setCursor(0, 1);
  lcd.print(millis()/1000);
}

Wenn das mit dem Keypad-Shield nicht funktioniert, dann hast Du entweder das Keypad-Shield falsch auf den UNO (oder den MEGA) aufgestöpselt. Oder Du hast durch irgendwelche Basteleien oder fehlerhaft hochgeladene Sketche bereits einige Pins oder Ports auf Deinem Controller-Board gekillt.

mein Board killen kann ich doch nur, wenn ich Spannung auf den Ausgang reinjage, oder?
Und das hab ich auf keinen Fall gemacht…
Die Pins machen für andere Sachen (Relais ansteuern o.ä.) ja das was sie sollen, nur das Display wird halt nicht angesteuert…
und fehlerhafte Sketche habe ich auch nicht hochgeladen, es sei denn, die von Sainsmart mitgelieferte Progammierung schafft das… (LiquidCrystal lcd(12, 11, 5, 4, 3, 2)

Habe LiquidCrystal lcd(8, 9, 4, 5, 6, 7) genommen und hatte dann das 1. Bild, also nichts…

Vorher hatte ich aus Versehen, die Zahlen verdreht, also 8, 9, 7, 6, 5, 4 und hatte dann das zweite Bild…
Verwende übrigens das Mega, bei UNO habe ich das Selbe Problem…

Auch bei meinem “nackten” Display tut sich nichts…

Hast Du noch was drauf, evtl. Doppelbelegung von Pins?

jurs: ich schätze dein Wissen, aber lies doch bitte alles.

Er schreibt, dass sowohl das Keypad-Shield als auch das nackte LCD eben _nicht funktionieren!

@Marabu2: die mitgelieferten Beispielprogramme laufen, bis auf gelegentliche Tippfehler (die man aber beim Compilieren gewöhnlich merkt) schon.
Gut ist: kaputt ist da nix-da wette ich drauf.
Probier mal bitte (am sinnvollsten beim nackten LCD) ob wirklich alle Kabel guten Kontakt haben.

Marabu2:
mein Board killen kann ich doch nur, wenn ich Spannung auf den Ausgang reinjage, oder?

Oh nein, Dein Board oder Teile davon kannst Du auf zig verschiedene Arten killen.

Beliebte Methode sind z.B. nicht nur, einen OUTPUT/LOW mit 5V zu verbinden.
Denselben Effekt erzielst Du auch mit einem OUTPUT/HIGH an Ground.
Oder wenn Du einen OUTPUT/HIGH mit einem OUTPUT/LOW direkt zusammenschaltest.
Das führt in allen drei Fällen zu einem saftigen Kurzschluß.

Und das ist noch nicht mal die Hälfte der Möglichkeiten, einen Arduino durch falsche Beschaltung und/oder falsche Programmierung zu beschädigen.

Marabu2:
Habe LiquidCrystal lcd(8, 9, 4, 5, 6, 7) genommen und hatte dann das 1. Bild, also nichts...

Irgendwas anderes ist am Board jetzt nicht angeschlossen?
Alle andere Hardware entfernt, nur das Keypad-Shield gesteckt?

Mache das Board mit dem Shield mal für eine Minute stromlos und sieh Dir von allen Seiten an, wie das Shield mit dem Board zusammengesteckt ist! Wenn es bei Dir dunkel ist, nimm eine Taschenlampe zur Kontrolle! Steckt jeder Pin des Shields in einem Header des Boards? Oder ist einer daneben gesteckt? Ist das Shield komplett aufgesteckt? Oder ist es gar in der Reihe verrutscht, obwohl das durch die einseitige Lücke der Header-Leisten ja eigentlich gar nicht passieren sollte?

Dann nach einer Minute wieder Strom drauf geben und mit dem geposteten Sketch testen.

Ich kenne wirklich kein handelsübliches und in Deutschland erhältliches LCD-Keypad-Shield, das mit dem LCD anders beschaltet ist als für eine LCD-Initialisierung mit der LiquidCrystal-Library, die mit der Arduino-Software mitgeliefert wird und im Sketch dann "LiquidCrystal lcd(8, 9, 4, 5, 6, 7);".

Marabu2:
Vorher hatte ich aus Versehen, die Zahlen verdreht, also 8, 9, 7, 6, 5, 4 und hatte dann das zweite Bild...
Verwende übrigens das Mega, bei UNO habe ich das Selbe Problem...

Zeige mal die Dokumentation und Programmbeispiele, die Sainsmart Dir genannt hat!
Es ist zwar äußerst unwahrscheinlich, andererseits aber auch nicht völlig auszuschließen, dass sie ihre Shields auch mal mit anderer Beschaltung ausliefern.

Das nackte LCD-Display kannst Du frei beschalten und die Ansteuerung im Sketch richtet sich dann nach der tatsächlichen Beschaltung. Da gibt es viel mehr Fehlermöglichkeiten, ein Kabel auf dem Steckbrett falsch zu ziehen als es Fehlermöglichkeiten beim Aufstecken des Keypad-Shields gibt.

So, habe jetzt mal eine kleine Fotodoku angehängt, damit ihr seht, was ich gemacht habe.

  • Foto 1 bis 4 ohne Keypad-Shield Aufbau
  • Foto 5 vor Upload
  • Foto 6 nach Upload
  • Foto 7 nach Abziehen von RS und E (oder EN)

das alles mit folgender Programmierung:

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

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Sainsmart keypad LCD

void setup() {
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // 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, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
}

Und nun mit Keypad-Shield:

  • Foto 8 ohne Display
  • Foto 9 Anzeige, wie ich es aufgesteckt habe
  • Foto 10 vor und nach Upload

mit der Selben Programmierung.

Ich kriege echt noch die Krise :0
Irgendwas mache ich doch falsch???

Da ich nur 4 Fotos anhängen kann, schicke ich nachfolgend noch die anderen…

Gruß
Kathrin

Foto 5-8

Foto 9 und 10

Bei der Verkabelung des nackten Displays kann ich als Fehler jetzt momentan nur erkennen, dass Du das Backlight mit unzulässig hoher Spannung und daher mit massiv zu viel Strom betreibst.

Bitte schaue mal ins Datenblatt des LCDs, mit welcher Spannung das Backlight Deines Displays betrieben werden darf! Bei 5V Displays vertragen die Backlight-LEDs typischerweise max. 4.3V. Vorwiderstand für das Backlight notwendig! Da an solchen 1602 Displays die LEDs mit ca. 18 mA betrieben werden können, reicht ein 68 OHM Widerstand, kann auch etwas höher sein. Also LCD-15 für das Backlight nur über einen 68 bis 100 Ohm Widerstand in Reihe an 5V anschließen und nicht die Backlight-LED direkt ohne Vorwiderstand betreiben!

Beim Aufstecken des Keypad-Shields sehe ich nicht, dass da irgendwas schief gelaufen sein könnte, das müßte direkt mit dem Sketch funktionieren. Allerdings müßte beim Shield der Kontrast am Poti deutlich höher gedreht werden, bis die Pixel weiß statt dunkelblau aussehen.

Hallo!
Beim Mega hast dich versteckt....ich seh den A7 an der Kante...

Das mit dem Backlight gilt auch fürs Keypad.
Hab den Pin 10 gezogen, und eine Diode nach 3 verlegt.
Schau mal den Sticky ( englisch):

mfg Martin

Wasjetzt:
Beim Mega hast dich versteckt…ich seh den A7 an der Kante…

Ne, das glaube ich nicht, das täuscht etwas dadurch, dass nicht direkt von oben fotografiert wurde.

Die 6 Analog-Ports A0 bis A5 sind zwischen Board und Shield direkt verbunden, A6 und A7 sind sicher frei, oder?

Was mir aber gerade einfällt, gerade in Anbetracht der durch keinen Vorwiderstand gebremsten Backlight-LED und des dadurch erhöhten Stromverbrauchs: An was für einer USB-Stromversorgung hängt denn das Board?

An einem Desktop-PC? An einem USB-Netzgerät? An einem passiven USB-Hub? An einem aktiven USB-Hub?
Oder vielleicht an einem extrem leistungsschwachen USB eines Laptops oder Notebook-PCs?

Falls der USB zu wenig Strom liefert könnte es eventuell sein, dass der Controller in einem dauerhaften Reset feststeckt und der Sketch gar nicht startet?

Teste mal mit diesem Sketch, der die Board-LED im Sekundentakt blinken läßt:

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Sainsmart keypad LCD

void setup() {
  pinMode(13,OUTPUT);
  lcd.begin(16, 2);
  lcd.print("hello, world!");
}

void loop() {
  lcd.setCursor(0, 1);
  lcd.print(millis()/1000);
  digitalWrite(13,(millis()/1000)%2);
}

Blinkt mit diesem Sketch die Board-LED unterhalb des aufgesteckten Shields?

wenn ich das Backlight mit zu hoher Spannung betreibe hat das ja nichts damit zu tun, dass das Programm nicht läuft, oder?

Das Board hängt am Laptop USB, ich habe den Sketch jetzt mal durchlaufen lassen, der die Board LED blinken lassen soll.
Ich sehe, dass irgendwas hochgeladen wird (TX und RX fangen kurz wie wild an zu blinken), aber die Board LED blinkt zwar regelmäßig, aber nicht im Sekundentakt... Einmal lang und direkt danach kurz. Aber das dauerhaft.

Bzgl. Poti hab ich auch schon hochgedreht, aber mehr als diesen beknackten Balken sehe ich dann trotzdem nicht.

Die 6 Analog-Ports A0 bis A5 sind zwischen Board und Shield direkt verbunden, A6 und A7 sind sicher frei, oder?

Ja, sind sie, es greift nur den A0 ab.