Hallo,
vor einiger Zeit habe ich mir ein SainSmart LCD 20 x 4 mit festangebauten Portexpander für I2C-Anschluss gekauft.
(Siehe hier die Herstellerseite, bei dieser Variante ist immerhin ein Link mit der Library new LiquidCrystal von fmalpartida)
Ich hab das LCD so an meinen Arduino angeschlossen:
LCD / Arduino:
GND -> GND
Vcc -> +5V
SCL -> SCL ("15")
SDA -> SDA ("14")
Nach dem Einschalten waren die Zeichen (die 5x8 Pixel) in der ersten und dritten Zeile komplett gefüllt, ein Zeichen hat etwas geblinkt. Die Füllung der beiden Zeilen konnte ich mit einer Justage am Poti für den Kontrast beheben. (Find ich etwas merkwürdig, dass da nur 2 Zeilen bei falschem Kontrast schwarz werden).
Ich habe das "Hello World" Programm für I2C aus der oben genannten Libraray-Sammlung von fmalpartida geladen. Daraufhin wurden zwei Zeichen in der Mitte der ersten Zeile mit 4 Strichen gefüllt, die sich nach ablauf des setup-Teils (nach 1 Sekunde) etwas weiter geschoben haben bis in die 2. Zeile, dann fing das Display an zu blinken (die Hintergrund beleuchtung...)
Eigenlich sollte Im setup-Teil ein Text angezeigt werden und im Loop-Teil eine kleine Animation über Custom-Zeichen. Die Hintergrundbeleuchtung wird gar nicht angesprochen.
Ich weiß jetzt nicht wo die Fehlerquelle liegt.
- Passt die Library nicht? - Die ist aber immerhin von SainSmart direkt verlinkt... Allerdings passt hier auch die Adresse nicht, mein LCD hat die Adresse 0x3F, nicht 0x38) aber gut, die Library ist ja nicht maßgefertigt für dieses LCD.
- werden die falschen Pins angesteuert? Es gibt einen Constructor bei dem man die Pins der einzelnen Anschlüsse des LCD übergeben kann.... Allerdings habe ich keinerlei Dokumentation gefunden, welcher Pin wo angeschlossen ist (die Pins sind PCF8574-seitig nicht beschriftet...)
- Ist das Teil kaputt?
- Hab ich das Teil falsch angeschlossen? Ich habe etwas hier im Forum recherchiert und bin auch eine Fritzing-Skizze gestoßen, bei der der I2C Bus an Analoge Pins angeschlossen wird - welchen Sinn hat das?
Hat vielleicht jemand Erfahrung mit den SainSmart-LCDs? Ich würd mich über Hilfe sehr freuen!
Hier ist das Programm "HelloWorld_i2c.pde"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN 13
LiquidCrystal_I2C lcd(0x3F); // Set the LCD I2C address
//LiquidCrystal_I2C lcd(0x38, BACKLIGHT_PIN, POSITIVE); // Set the LCD I2C address
// Creat a set of new characters
const uint8_t charBitmap[][8] = {
{ 0xc, 0x12, 0x12, 0xc, 0, 0, 0, 0 },
{ 0x6, 0x9, 0x9, 0x6, 0, 0, 0, 0 },
{ 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0, 0x0 },
{ 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0, 0x0 },
{ 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0x0 },
{ 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0x0 },
{ 0x0, 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0x0 },
{ 0x0, 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0x0 }
};
void setup()
{
int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0]));
// Switch on the backlight
pinMode ( BACKLIGHT_PIN, OUTPUT );
digitalWrite ( BACKLIGHT_PIN, HIGH );
lcd.begin(20,4); // initialize the lcd
for ( int i = 0; i < charBitmapSize; i++ )
{
lcd.createChar ( i, (uint8_t *)charBitmap[i] );
}
lcd.home (); // go home
lcd.print("Hello, ARDUINO ");
lcd.setCursor ( 0, 1 ); // go to the next line
lcd.print (" FORUM - fm ");
delay ( 1000 );
}
void loop()
{
lcd.home ();
// Do a little animation by writing to the same location
for ( int i = 0; i < 2; i++ )
{
for ( int j = 0; j < 16; j++ )
{
lcd.print (char(random(7)));
}
lcd.setCursor ( 0, 1 );
}
delay (200);
}