Zweite I2C einstellen

Hallo, eine kleine Frage an die Profis.
Ich habe ein Adafruit Metro M4 Grand Central
Auf diesen Board habe ich 2 mal I2C.
Wie stelle ich unter U8g2lib.h die I2C Schnittstelle um.
Um mein Oled SSD1306 an die zweite I2C anzuschliessen.

Wird die überhaupt in der U8g2lib.h umgestellt ?
oder in arduino.h ?

mfg Schuby

Wieso dafür einen zweiten Bus aufmachen?

AFAIR sind beim ESP32 beide Ports vordefiniert, Was sagen die Beispiele zum M4?

Ich wollte das überhaupt mal wissen wie man sowas umstellt.

mfg Schuby

Was soll da umgestellt werden?
Am Mega gibt es Serial, Serial1 usw, die können nach Serial1.begin() usw. einfach verwendet werden.

Vertauscht Du nicht was ? I²C und I²S.
Außerdem kannst die Pins mit
Wire.begin(SDA,SCL); umstellen, jedoch nicht alle Pins eignen sich.

Der hat sogar 8 I2C

Hallo,

wenn man davon ausgeht, dass mehrere I2C Ports für das Board definiert sind, müßtest du in der Display Lib etwas umschreiben. Bspw. von Wire auf Wire1, wenn es so definiert wurden sein sollte. Theoretisch nur in der U8x8lib.cpp. und begin() natürlich. Die Display Lib hat keinen für mich sichtbaren Parameter. Müßtest du ggf. Oliver direkt fragen ob er seine Lib flexibler macht.

Stimmt habe getestet, jedoch nix angeklemmt,

Wire.begin();
Wire.begin(17,16);

leuft seuber durch.

Wen man bei begin die Pins mit gebt sollte funktionieren, kann der TO ja testen.
Auch bei ESP32 wenn man nicht die Adresse ändern kann ist besser Multiplexer nutzen.

Hallo,

wenn es das Core Package zur Verfügung stellt ja.

Den kenne ich nicht, daher kann ich Dir nur allgemein antworten.

In U8g2\examples\full_buffer\HelloWorld\HelloWorld.ino findest Du die Zeile

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ 16, /* data=*/ 17);   // ESP32 Thing, HW I2C with pin remapping

"HW" steht für Hardware und mit clock und data kannst Du die gewünschten Pins auswählen, für den Dein µC I²C anbietet.

Ob die Bibliothek und die Möglichkeit der neuen Pinzuordnung für Deinen µC paßt, mußt Du ausprobieren.

Ich sehe nur einen, zwei mall die gleiche Pin Nr nämlich PB21, PB20 wie bei Mega 2560 , Uno R3 die haben auch nur ein I²C jedoch doppelt ausgeführt.

Der Zauber liegt vermutlich in dieser Angabe (Quelle):

  • 8 x hardware SERCOM (can be I2C, SPI or UART)

Da sollten dann mehrere I²Cs möglich sein. Welche Bibliotheken das unterstützen, wäre zu prüfen.

Danke für die viele Antworten. Jetzt weiß ich wie es geht. Mein Display hängt jetzt an I2C Port2
U8G2_SSD1327_EA_W128128_F_SW_I2C oled1(U8G2_R0, /* clock=/ 24, / data=/ 25, / reset=*/ U8X8_PIN_NONE);

mfg Schuby

SW = Softwareimplementierung

Du verwendest langsame Software, während schnelle Hardware zur Verfügung steht, das ist schade. In U8g2\src\U8g2lib.h finde ich class U8G2_SSD1327_EA_W128128_F_2ND_HW_I2C für eine zweite Hardware. Damit könntest Du mal probieren, eventuell so:

U8G2_SSD1327_EA_W128128_F_2ND_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

Welche Pins mit der zweiten Hardware verbunden sind, ist dann eine noch zu klärende Frage, wenn der Compiler glücklich ist. Für den ESP32 ist das der Fall, hat aber leider keine Bedeutung.

1 Like

Oh da hast du recht, daran habe ich gar nicht dran gedacht.
Ich werde das aber noma mit Hardware HS testen. Danke für den Tipp

Gruß Schuby

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.