[gelöst] Problem Ansteuerung 4x20 LCD mit i2c auf MEGA2560

Servus,

wie steuere ich einen 4x20 lcd mit i^2C korrekt an.?

Verwendet wird ein ELEGO MEGA2560, ein UNO ebenfalls vorhanden.
Am 2560 ist noch ein 2x16 lcd ,,konventionell verkabelt,,(DigialPins 2 bis 7 ...) und der 4x20 lcd soll ebenfalls angesteuert werden.
Nach einiger Recherche im Internet, und einigen ausprobierten Tutorials und librarys kein Erfolg. Größtenteils sind die links nicht mehr aktuell.

Irgentjemand im Internet meinte man solle bezüglich Anschluss des i2c anstatt A4, A5, beim Mega auf Communication SDA20, SCL21 stecken. Dazu kann ich nichts sagen.

Auf dem i2c steht auf dem Chip : PCF8574T
Die Brücken A0, A1,A2 sind nicht verlötet.

Die Hintergrundbeleuchtung ist momentan an. Es sind in der Schaltung somit im Moment 2 lcds und ein RTC verbaut und verdrahtet am Elego.

Ein Scann ergab bisher:
/*
Scanning...
I2C device found at address 0x27 !
I2C device found at address 0x57 !
I2C device found at address 0x68 !
done
*/

Falls jemand weiß wo aktuelle Links und Bibs zu haben sind bin ich sehr dankbar !

LÖSUNG:
-Alle anderen Geräte abstecken.
-Zuerst Beispiel aus Bib. ausprobieren.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

uint8_t bell[8]  = {0x4, 0xe, 0xe, 0xe, 0x1f, 0x0, 0x4};
uint8_t note[8]  = {0x2, 0x3, 0x2, 0xe, 0x1e, 0xc, 0x0};
uint8_t clock[8] = {0x0, 0xe, 0x15, 0x17, 0x11, 0xe, 0x0};
uint8_t heart[8] = {0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0};
uint8_t duck[8]  = {0x0, 0xc, 0x1d, 0xf, 0xf, 0x6, 0x0};
uint8_t check[8] = {0x0, 0x1 ,0x3, 0x16, 0x1c, 0x8, 0x0};
uint8_t cross[8] = {0x0, 0x1b, 0xe, 0x4, 0xe, 0x1b, 0x0};
uint8_t retarrow[8] = {	0x1, 0x1, 0x5, 0x9, 0x1f, 0x8, 0x4};

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

void setup()
{
	lcd.begin();
	lcd.backlight();

	lcd.createChar(0, bell);
	lcd.createChar(1, note);
	lcd.createChar(2, clock);
	lcd.createChar(3, heart);
	lcd.createChar(4, duck);
	lcd.createChar(5, check);
	lcd.createChar(6, cross);
	lcd.createChar(7, retarrow);
	lcd.home();

	lcd.print("Hello world...");
	lcd.setCursor(0, 1);
	lcd.print(" i ");
	lcd.write(3);
	lcd.print(" arduinos!");
	delay(5000);
	displayKeyCodes();
}

// display all keycodes
void displayKeyCodes(void) {
	uint8_t i = 0;

	while (1) {
		lcd.clear();
		lcd.print("Codes 0x");
		lcd.print(i, HEX);
		lcd.print("-0x");
		lcd.print(i + 16, HEX);
		lcd.setCursor(0, 1);

		for (int j = 0; j < 16; j++) {
			lcd.write(i + j);
		}
		i += 16;

		delay(4000);
	}
}

void loop()
{
	// Do nothing here...
}

Hallo,
beim Mega sind die Pins D20 und D21 korrekt.
Und Libraries für dein I2C-Display findest du ganz sicher bei Github.
Dann ein Beispiel aus der Library verwenden und es sollte funktionieren.

Was die I2C-Adresse betrifft, solltes du mal alles außer dem I2C-Display abnehmen.
Dann sollte schon die richtige Adresse angezeigt werden.

wie steuere ich einen 4x20 lcd mit i^2C korrekt an.?

ich würde eine Library für ein I2C LCD nehmen und mich genau an das in dieser Library enthaltene "Strand wire" oder "Hello World" Beispiel halten.

Erst wenn das klappt andere Kompenenten dazu nehmen.

Und bevor du dich wunderst:
0x27 dürfte dein I2C Expander vom Display sein
0x68 dein RTC
0x57 der zusätzliche Käfer auf deinem RTC Shield (vieleicht ein AT24C32)

Falls jemand weiß wo aktuelle Links und Bibs zu haben sind bin ich sehr dankbar !

Bibliotheken findet man in der Regel direkt im Library Manager der IDE. Suchbegriff Liquid Crystal.
Persönlich nehme ich am liebsten meine LCD Library Arduino LCD library (I2C) with support of special characters (UTF-8) - ich denke du solltest aber mit etwas aus der IDE anfangen, bis du ein wenig mehr Sicherheit im Umgang mit der Arduino Umgebung hast.

engineeeer:
wie steuere ich einen 4x20 lcd mit i^2C korrekt an.?

selber machen? Oder auf eine lib verlassen?
letzteres sehr erfolgreich im Einsatz.

Klein, fein, funktioniert.

Irgentjemand im Internet meinte man solle bezüglich Anschluss des i2c anstatt A4, A5, beim Mega auf Communication SDA20, SCL21 stecken. Dazu kann ich nichts sagen.

Naja - das ist nicht so schwer.
Der MEGA hat einen HardwareI2C auf PIN 20(SDA) und 21(SCL)
Der UNO hat eionen HardwareI2C auf PIN A4(SDA) und A5(SCL)
Während beim UNO eine Doppelbelegung des AnalogPIN vorliegt, ist beim MEGA die Doppelbelegung auf den DigitalPIN.

Falls jemand weiß wo aktuelle Links und Bibs zu haben sind bin ich sehr dankbar !

Na dann schau oben rein.
Die Initialisierungssequenz für Dich:

#include <LiquidCrystal_I2C.h>
#define lcdAddress 0x27
LiquidCrystal_I2C lcd(lcdAddress, 20, 4);

Die Setupsequenz:
lcd.begin();
// lcd.noBacklight(); // oder wie folgt:
lcd.backlight();

Vielen Dank für die Hilfe, hat mir sehr geholfen !

engineeeer:
Vielen Dank für die Hilfe, hat mir sehr geholfen !

Schön!
Lässt Du auch noch evtl. einen Codeschnipsel da und editierst Deinen ersten Post und schreibst z.B. ein [gelöst] in die Betreffzeile rein?
Das hilft dann ggfls. nachfolgenden Einsteigern