Forum: Mikrocontroller und Digitale Elektronik Arduino: Probleme mit 4x20 Sainsmart Display Blue


von Christian J. (elektroniker1968)


Lesenswert?

Hallo,

ich dreh noch ab, selbst so eine einfache Anwendung will nicht. Das 
Display wird dunkel und nichts passiert.

Board: Arduino Mega
Display: Blau, I2C Schnittstelle, Hersteller Sainsmart, von ebay
angeschlossen an 5v und I2c Bus.

Dürfte sich um das Display handeln:

http://www.sainsmart.com/sainsmart-iic-i2c-twi-serial-2004-20x4-lcd-module-shield-for-arduino-uno-mega-r3.html

Vorweg: der darunter befindliche Code funktioniert nicht aber die Lib 
hab ich von dort.

Schliesse ich es an, leuchtet es, lade ich den Code rein wird es dunkel 
und es passiert sonst nichts weiter.

Der Code
1
#include <Wire.h> 
2
#include <LiquidCrystal_I2C.h>
3
4
LiquidCrystal_I2C lcd(0x20,16,2);  // set the LCD address to 0x20 for a 16 chars and 2 line display
5
6
void setup()
7
{
8
  lcd.init();                      // initialize the lcd 
9
 
10
  // Print a message to the LCD.
11
  lcd.backlight();
12
  lcd.print("Hello, world!");
13
}
14
15
void loop()
16
{
17
}

Die Suche nach Libs gestaltete sich zum Geduldsspiel... es gibt zig 
Versionen aber nicht alle lassen sich kompilieren, erzeugen 
Fehlermeldungen.

zb die hier:
1
// ---------------------------------------------------------------------------
2
// Created by Francisco Malpartida on 20/08/11.
3
// Copyright 2011 - Under creative commons license 3.0:
4
//        Attribution-ShareAlike CC BY-SA
5
//

Zb die von dieser Seite bekomme ich nicht kompiliert, sehr kryptische 
Fehlermeldungen aus der cpp Datei.

http://arduino-info.wikispaces.com/LCD-Blue-I2C

Habe eine, die im Header stehen hat: // LiquidCrystal_I2C V2.0 und die 
ist kompilierbar.

Der Initstring habe ich schon mehrfach verändert für 4x 20 Display, auch 
das ändert nichts.

Weiss da einer Rat? Vor allem: Welches ist richtige Library? Da haben 
sich ja etliche drin verewigt welche zu schreiben...

von Eumel (Gast)


Lesenswert?

Christian J. schrieb:
> Welches ist richtige Library?

Schreib dir selber eine.

von Maxx M. (maxx2206)


Lesenswert?

hi,

kann dir nicht sagen von welcher seite ich die lib und den beispielcode 
habe (aber ich denke das war im eb*y text verlinkt), aber bei mir 
klappte es auf anhieb.

der eigentliche code ist wie folgt:
1
//YWROBOT
2
#include <Wire.h> 
3
#include <LiquidCrystal_I2C.h>
4
5
LiquidCrystal_I2C lcd(0x3F,20,4);  // set the LCD address to 0x3F for a 16 chars and 2 line display
6
7
void setup()
8
{
9
  lcd.init();                      // initialize the lcd 
10
  lcd.init();
11
  // Print a message to the LCD.
12
  lcd.backlight();
13
  lcd.setCursor(3,0);
14
  lcd.print("Hello, world!");
15
  lcd.setCursor(2,1);
16
  lcd.print("SainSmart for UNO");
17
   lcd.setCursor(2,2);
18
  lcd.print("SainSmart LCM IIC");
19
   lcd.setCursor(1,3);
20
  lcd.print("Design By SainSmart");
21
}
22
23
void loop()
24
{
25
}

frag aber nicht warum z.b. 2x init() aufgerufen wird.
ich hab nur einen einfachen funktionstest durchgeführt und seitdem nicht 
weiter damit herumgespielt.

vielleicht hilft das ja, ansonsten kann ich ggf. die hier vorliegenden 
lib files packen und bereitstellen...

ciao...

von Christian J. (elektroniker1968)


Lesenswert?

Hallo,

also, einfacher geht es ja eigentlich nicht. Nur ist es schon seltsam, 
dass das Backlight bei mir direkt ausgeht. Ein Init findet nicht statt, 
habe das Display gegen das Licht gehalten, sid noch 2 Zeilen sichtbar 
wie bei einem Kaltstart.

Ja, mach mal, stell mal rein, ich habe ja schon fast alles 
durchprobiert.

Ach so: Zieht sich die Arduino Overfläche jedesmal die cpp Files aus dem 
Lib Verezeichnis oder legt die irgendwo ein .o File ab? D.h. wenn ich 
die Lib nur überschreibe wird sie dann auch genommen? So ganz blicke ich 
noch nicht hinter diese Shell hinter was die genau macht.

von Christian J. (elektroniker1968)


Lesenswert?

Hab deinen Code grad gestestet.... kurzes Aufleuchten des Backlights 
beim Reset, dann nichts. Also wo da der Wurm drin ist erschliesst sich 
mir nicht....

Die print Funktion scheint nicht wie in C zu sein, ich muss mir mal 
Beispiele anschauen wo Variablen ausgegeben werden... grumpf

von Karol B. (johnpatcher)


Lesenswert?

Christian J. schrieb:
> sehr kryptische
> Fehlermeldungen aus der cpp Datei.

Den man als Programmierer mit ein wenig Unterstützung von Google schon 
zu deuten wissen sollte. Ansonsten solltest du dich damit an den Autor 
wenden oder ihn zumindest hier posten, wenn du von Fehler berichtest.

von Christian J. (elektroniker1968)


Lesenswert?

Karol Babioch schrieb:
> u deuten wissen sollte. Ansonsten solltest du dich damit an den Autor
> wenden oder ihn zumindest hier posten, wenn du von Fehler berichtest.

Sorry aber ich will das Arduino nur anwenden, mich garantiert aber nicht 
mit dem Atmel intern oder gar C++ befassen... meine Welt ist der ARM 
Core und
wird es auch bleiben, alles andere nur am Rande fürs "Schnell mal eben".

von Christian J. (elektroniker1968)


Lesenswert?

So, ich gebs auf, nichts zu machen ;-( Init läuft nicht und das 
Backlight schaltet sich ab bei Programmstart. D.h. "irgendwas" tut sich, 
nur was?

Ohne intensive Suche im Code der Library oder Single Step Debugging -was 
nunmal nicht geht - ist das nicht zu finden und Messgeräte habe ich 
keine hier.

von Shiney S. (shinestar)


Lesenswert?

1
/*
2
** Example Arduino sketch for SainSmart I2C LCD2004 adapter for HD44780 LCD screens
3
** Readily found on eBay or http://www.sainsmart.com/
4
** The LCD2004 module appears to be identical to one marketed by YwRobot
5
**
6
** Address pins 0,1 & 2 are all permenantly tied high so the address is fixed at 0×27
7
**
8
** Written for and tested with Arduino 1.0
9
** This example uses F Malpartida’s NewLiquidCrystal library. Obtain from:
10
** https://bitbucket.org/fmalpartida/new-liquidcrystal
11
**
12
** Edward Comer
13
** LICENSE: GNU General Public License, version 3 (GPL-3.0)
14
*/
15
#include <Wire.h>
16
#include <LCD.h>
17
#include <LiquidCrystal_I2C.h>
18
#define I2C_ADDR    0×27  // Define I2C Address where the PCF8574A is
19
#define BACKLIGHT_PIN     3
20
#define En_pin  2
21
#define Rw_pin  1
22
#define Rs_pin  0
23
#define D4_pin  4
24
#define D5_pin  5
25
#define D6_pin  6
26
#define D7_pin  7
27
int n = 1;
28
LiquidCrystal_I2C       lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
29
void setup()
30
{
31
  lcd.begin (20,4);
32
// Switch on the backlight
33
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
34
  lcd.setBacklight(HIGH);
35
  lcd.home ();                   // go home
36
  lcd.print(SainSmart I2C test);
37
  lcd.setCursor ( 0, 1 );        // go to the next line
38
  lcd.print(F Malpartida library);
39
  lcd.setCursor ( 0, 2 );        // go to the next line
40
  lcd.print(Test By Edward Comer);
41
  lcd.setCursor ( 0, 3 );        // go to the next line
42
  lcd.print(Iteration No: );
43
}
44
void loop()
45
{
46
  // Backlight on/off every 3 seconds
47
  lcd.setCursor (14,3);        // go col 14 of line 3
48
  lcd.print(n++,DEC);
49
  lcd.setBacklight(LOW);      // Backlight off
50
  delay(3000);
51
  lcd.setBacklight(HIGH);     // Backlight on
52
  delay(3000);
53
}

von Christian J. (Gast)


Lesenswert?

Danker, aber welche Library ist das ????
Es gibt zig verschiedene Versionen im Netz.

Und wieso Pins? Es gibt nur die I2C nach außen und sonst nichts. Auch 
keinen Backlight Pin...
1
#define En_pin  2
2
#define Rw_pin  1
3
#define Rs_pin  0
4
#define D4_pin  4
5
#define D5_pin  5
6
#define D6_pin  6
7
#define D7_pin  7
8
int n = 1;
9
LiquidCrystal_I2C       lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

von Christian J. (Gast)


Lesenswert?

PS:

** This example uses F Malpartida’s NewLiquidCrystal library. Obtain 
from:

Die kann ich nicht kompilieren, erzeugt für mich unverständliche 
Fehlermeldungen aus den "inneren Berreichen der CPP Datei", ich kann 
kein C++.

von Eumel (Gast)


Lesenswert?

Christian J. schrieb:
> Sorry aber ich will das Arduino nur anwenden, mich garantiert aber nicht
> mit dem Atmel intern oder gar C++ befassen

Dann hör auf zu heulen wenn was nicht funktioniert und nimm es hin. 
Entweder du beschäftigst dich mit den Sachen oder du akzeptierst halt 
einfach, dass es nicht funktioniert.

von Olli (Gast)


Lesenswert?

>ich kann kein C++
Und was kannst du?
Datenblattlesen?
Nimm BascomAVR und bastel dir deinen Testcode selber, geht schneller als 
irgendwelche Libs auszuprobieren.

von Christian J. (Gast)


Lesenswert?

Gibts hier eigentlich keine Mods, die den Pöbel mal rauslöschen?

Ich habe das Problem gelöst..... da wären noch Tage bei draufgegangen. 
Chinesische Technik, kalte Lötstelle an der I2C Platine, nur unter dem 
Mikroskop zu erkennen an einem IC Pin.

Es funktioniert.....

von Christian J. (elektroniker1968)


Lesenswert?

Außerdem muss die LiquidCrystal_I2C.cpp angepasst werden an das neue 
Sainsmart 4x20 Modell, da sich das Pinning mal wieder geändert hat, d.h. 
welcher Pin des Portexpanders auf welchen Display Pin geht. Das ist in 
allen Libs anders und zum 16 x 2 Vorgängermodell des Displays ebenfalls, 
d.h. ein 16 x 2 läuft nicht mit dem gleichen Code wie das 20 x 4.

RS = Bit 0
RW = Bit 1
E =  Bit 2
D4 = Bit 4
D5 = Bit 5
D6 = Bit 6
D7 = Bit 7

Backlight = Bit 3 (LED EIN = 0 = Pin auf Masse)

Library: LiquidCrystal_V1.2.1

Konstruktor: LiquidCrystal_I2C lcd(0x3f, BACKLIGHT_PIN, POSITIVE);
Init: lcd.begin(20,4);

Und dann lüppet auch...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.