LCD I2C Arduino MEGA 2560

Hallo,

habe mir vor paar Wochen ein I2C Board + passendes LCD bei Ebay bestellt:

http://www.ebay.de/itm/140896148934
http://www.ebay.de/itm/181193539515

Natürlich auch gleich die beiden vereint, getestet (5V über Arduino), funktionierte.
Jetzt will ich natürlich Text darstellen, habe dazu verschiedene Librarys probiert, jedoch funktioniert keine.
Am weitesten bin ich mit der LiquidCrystal_I2C gekommen, wo zumindest die Beleuchtung vom LCD während des Uploads/Resets kurz flackerte.

http://hmario.home.xs4all.nl/arduino/LiquidCrystal_I2C/

Habe schon Portscanner probiert, weil ich dachte es liegt an der falschen Adresse, aber auch mit der richtigen keinen Erfolg.

Angeschlossen habe ich das Modul auf den Pins 20 (SDA) + 21 (SCL).

Bitte um Hilfe, bin zwar ein relativ experimentierfreudiger Laie, was Arduino angeht, aber hier hab ich keine andere Lösung, als hier zu fragen.

Danke im VOrraus

Was wäre wenn Du den Verkäufer um eine Arduino-Bibliothek bittest?
Grüße Uwe

Okay, auf die einfachen Sachen komme ich anscheinend auch nie :smiley:

Sturm:
Natürlich auch gleich die beiden vereint

Ich rate einfach mal ins Blaue hinein: Eventuell hast Du die Backpack-Platine falsch herum aufgelötet?!

Wie sieht's nach dem Zusammenlöten aus? Kleines Foto zum Posten verfügbar?

Wenn ich das Teil falsch rum aufgelötet hätte, könnte ich den Kontrast nicht steuern.

Sturm:
Wenn ich das Teil falsch rum aufgelötet hätte, könnte ich den Kontrast nicht steuern.

Sieht soweit korrekt aus.

Hast Du mal "doppelte Initialisierung" versucht, falls die Initialisierungszeit in Deiner Library zu knapp bemessen ist:
lcd.init(); // initialize the lcd
lcd.init();
?

Oder mal probiert, ob irgendein anderes I2C-Gerät funktioniert, wenn Du es statt des Displays anschließt?
Z.B. eine RTC-Echtzeituhr (DS1307 oder DS3231) oder irgendwas anderes, das über I2C angesteuert wird?

Hat das Modul bereits Pullup-Widerstände? Oder hast du welche an SDA und SCL berückichtigt?

Ich rate jetzt auch mal ins Blaue rein: Hast Du dran gedacht, dass die Adressen auf dem I²C-Bus nur 7-Bit haben?

Gruß,
Ralf

Wie gesagt, ich hab noch keine Ahnung von der Materie (I2C), ich lese mich immer ein wenn ich was benötige oder frage halt nach.
Doppelt initialisieren hilft leider auch nicht, blinkt halt nur mehrmals :smiley:

Das mit den 7bit muss mir jemand erklären :smiley:

Sturm:
Wie gesagt, ich hab noch keine Ahnung von der Materie (I2C), ich lese mich immer ein wenn ich was benötige oder frage halt nach.
Doppelt initialisieren hilft leider auch nicht, blinkt halt nur mehrmals :smiley:

Da fällt mir nicht viel zu ein. Vielleicht handelt es sich um einen I2C Adapter mit abweichender LCD-Verdrahtung, von denen gibt es auch diverse Ausführungen, die nicht zu der "Standard" LiquidCrystal_I2C-Library kompatibel sind.

Dann müßtest Du eine alternative LiquidCrystal_I2C-Library installieren, bei der Du im Sketch zur Laufzeit die richtige LCD-Verdrahtung initialisieren kannst. Z.B. diese Library von hier:
https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads

Und dann kannst Du es ggf. mit dieser Library versuchen mit:

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

Oder wie auch immer die Hardware bei Deinem Adapter zu initialisieren ist.
Ohne Datenblatt mit Schaltplan ist das schwierig vorhersagbar.

Die I2C-Adresse bekommst Du jedenfalls mit dem I2C-Scanner heraus.
Und wenn Du keinen Schaltplan hast, müßtest Du wohl mal verschiedene gängige "alternative" Pinbelegungen ausprobieren.

ich habe schon auf anraten des Admins ne Mail an den Verkäufer geschickt mit der Bitte mir ein Sheet zukommen zu lassen, ebenso wie eine Library.
Mal sehen was wird, aber danke schonmal für die Hilfe :smiley:

Also wegen den 7 Bit, Du musst die hardwaremäßig eingestellte Adresse durch 2 teilen, z.B. am Display 0x40 dann übergibst Du 0x20. Es kann aber sein das die Lib das schon für Dich macht, deshalb musst Du es einfach mal probieren.

Gruß,
Ralf

Sturm:
ich habe schon auf anraten des Admins ne Mail an den Verkäufer geschickt mit der Bitte mir ein Sheet zukommen zu lassen, ebenso wie eine Library.

:smiley: :smiley: :smiley:

Falls es Dir nicht aufgefallen ist: Der Verkäufer Deines I2C-Adapters verscherbelt fast überhaupt keine Elektronik, dafür solche Artikel wie eine "Deluxe Golden Curly Lady Long Sexy Blonde Wavy Party Hair Cosplay Hairpiece Wig", was wohl übersetzt eine "Blondgelockte Luxus-Langhaarperücke als Haarteil für eine Cosplay Lady" sein soll: http://www.ebay.de/itm/Deluxe-Golden-Curly-Lady-Long-Sexy-Blonde-Wavy-Party-Hair-Cosplay-Hairpiece-Wig-/400545897308?pt=UK_Women_s_Wigs&hash=item5d42655b5c

Also dass er bei technischen Fragen wie "kann ich diese Perücke mit den Plastikhaaren mit Haarschampoo waschen" eine Antwort weiß, würde ich ja vermuten. Aber ich würde nicht unbedingt auf qualifizierten technischen Support für Deinen I2C-Adapter wetten.

Aber lasse Dich überraschen!
Die Hoffnung stirbt bekanntlich zuletzt.
]:smiley:

Ich melde mich nochmals, wenn ich Antwort bekomme. Vielleicht stellt sich ja heraus, dass ich das Board auch waschen kann oder so :slight_smile:

Hast Du denn mal probiert die Adresse durch 2 zu teilen?

Gruß,
Ralf

Schachmann:
Hast Du denn mal probiert die Adresse durch 2 zu teilen?

Das muß er normalerweise nicht.

Die vom Anbieter angegebene Adresse ist 0X20 und muß dann auch als 0X20 für die Initialisierung der Library angegeben werden.

Und auch der I2C-Scanner Sketch sollte 0x20 als Adresse ausgeben, wenn man mal den I2C-Bus nach angeschlossenen I2C-Geräten absucht.

Hallo,

ich habe das gleiche I2C-Modul. Das funktioniert allerdings nur mit Adresse 0x27, obwohl ebenso 0x20 angegeben ist.

[quote]
/******************************************
PURPOSE:	HelloWorld test sketch for Arduino
Created by      Sam Leong
Website:	www.b2cqshop.com
DATE:		2012/9/20
*******************************************/
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()
{
  lcd.init();                      // initialize the lcd 
// Print a message to the LCD.
  lcd.backlight();
  lcd.print("Hello, world!");
}

void loop()
{
}

[/quote]

Bei einem 20x4 LCD-Modul ersetze ich einfach in der Addressierungszeile 16,2 durch 20,4

Ciao
Klaus

jurs:
Das muß er normalerweise nicht.

Hallo,

der Hersteller hat hier die Adresse des I²C-LCD-Backpacks sogar auf die Platine gedruckt:

Wie Du unschwer erkennen kannst, ist mit den Jumpern die Adresse 0x40 eingestellt.

Angesprochen wird das Display unter:

#define I2C_ADDR    0x40 >> 1 // I2C-Addresse

Die beiden Pfeile und die 1 bedeuten, dass die Adresse um ein Bit nach rechts geschoben wird, das entspricht einem geteilt durch 2.

Was spricht also dagegen, es einfach mal zu versuchen?

Gruß,
Ralf

[Edit:]Ich habe gerade nochmal nach diesem Problem gegoogelt und dabei gefunden:

If the sensor does not seem to work then try using the address divided by 2, leJOS uses 7 bit I2C addresses but some devices specify the address as an 8 bit value and to convert you need to shift the 8 bit address right by 1 bit (divide by 2)...

Oder auf deutsch: Falls der Sensor nicht richtig zu funktionieren scheint, dann versuch die Adresse geteilt durch 2 zu benutzen, leJOS benutzt 7 Bit I²C Adressen aber manche Bauelemente spezifizieren die Adresse als 8 Bit Wert und zum konvertieren musst Du die 8 Bit Adresse um ein Bit nach rechts schieben (geteilt durch 2)...

Den kompletten Post kannst Du hier http://www.lejos.org/forum/viewtopic.php?t=1804 lesen.

Was wäre dann 0x27 durch 2?

Mit ner alten Library konnte ich jetzt dann doch nen blinkenden Cursor darstellen, aber der Text davor fehlte einfach.

Sturm:
Mit ner alten Library konnte ich jetzt dann doch nen blinkenden Cursor darstellen, aber der Text davor fehlte einfach.

Wie sieht es denn mit Deinen Lötkünsten beim Auflöten der Backpack-Platine aus?
Sind das alles saubere und einwandfreie Lötstellen geworden?

Oder könnte es sein, dass es zwischen Backpack-Platine und LCD-Platine nun entweder "kalte" Lötstellen gibt (kein Kontakt, Wackelkontakt) oder eine Lötbrücke zwischen zwei Pins?