Arduino Nano R4 OLED Display mit U8g2-Bibliothek

Hallo zusammen,
ich wende mich mal wieder mit einem Problem an euch, für das ich aktuell keinen Beitrag finde.
Ich setzte das “neue” Nano R4 Board mit Renesas RA4M1 Microcontroller ein. Ich möchte mit diesem Board ein OLED-Display 128x64 betreiben. Leider zeigt das Display bisher nichts an.

OLED: 1,3 Zoll OLED Display I2C SSH1106 Chip 128 x 64 Pixel I2C Anzeigemodul

Ich habe das Display über VCC +5V, GND, SDA, SCL angeschlossen.
Probiert habe ich auch schon A4 (SDA) und A5 (SCL).

Ich habe bisher folgende Bibliotheken verwendet:
Adafruit_SSD1306.h und alternativ U8g2lib

Sketch mit Adafruit_SSD1306:

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SPI.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
// The pins for I2C are defined by the Wire-library. 
// On an arduino UNO:       A4(SDA), A5(SCL)
// On an arduino MEGA 2560: 20(SDA), 21(SCL)
// On an arduino LEONARDO:   2(SDA),  3(SCL), ...
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3D ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  // Initialize serial communication and wait up to 2.5 seconds for a connection
  Serial.begin(9600);
  for (auto startNow = millis() + 2500; !Serial && millis() < startNow; delay(500));
  
  display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
  delay(500); // Break for 0,5 seconds

  // Clear the buffer
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.print("TEST OLED");
  display.display();
}

void loop() {
}

Sketch mit U8g2lib:

#include <Arduino.h>
#include <Wire.h> // Wire Bibliothek einbinden
#include "U8g2lib.h"

// 0,96 Zoll SSD1306
//U8G2_SSD1306_128X64_NONAME_1_HW_I2C oled(U8G2_R0);

// 1,3 Zoll SH1106
U8G2_SH1106_128X64_NONAME_1_HW_I2C oled(U8G2_R0);

};
void setup() {
Serial.begin(9600);
while(!Serial){}

  // Display starten
  oled.begin();
  // Kontrast Dispaly maximal 255
  oled.setContrast(255);
  oled.setFont(u8g2_font_t0_11_tf);
  oled.clear();
  oled.setCursor(0, 0);
  oled.print("TEST OLED");
}

void loop() {
}

Hat jemand von euch eine Idee was ich falsch mache? Wenn ich es richtig verstehe sind beide Bibliotheken für den Nano R4 geeignet.

Grüße

Hast Du mal einen I2C-Scannner drauf laufen lassen, um zu sehen, ob und was der Display für Adressen ausspuckt?

Auf einem Arduino MEGA 2560 laufen beide Sketch perfekt. Daher muss die Adresse doch eigentlich richtig sein, oder ändert sich dies mit einem anderen Microcontroller?

Nein.
Aber trotzdem gilt es erstmal rauszufnden, ob das Display an dem Controller funktioniert.

Na, na...

Wenn der I2C Bus nicht funktioniert, kannst du in der Software basteln wie du willst.

Merke:
Eine Diagnose fängt immer an der Basis an.

Okay ich habe nun einen I2C Scanner laufen lassen.
Ich habe das Display über VCC +5V, GND, SDA, SCL angeschlossen.
Ergebnis: keine I2C Geräte gefunden.
Probiert habe ich auch A4 (SDA) und A5 (SCL) auch hier werden keine I2C Geräte gefunden.

Wie mache ich dann weiter?

Sketch I2C Scanner:

#include <Arduino.h>
#include <Wire.h>

void setup()
{
  Wire.begin();
  Serial.begin(115200);
  delay(500);
  Serial.println("\n=== I2C Scanner ===");
}

void loop()
{
  byte error, address;
  int nDevices;
  Serial.println("Starte Scanvorgang");
  nDevices = 0;
  
  for (address = 1; address < 127; address++ )
  {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C Gerät gefunden - Adresse: 0x");
      if (address < 16)
        Serial.print("0");
      Serial.print(address, HEX);
      Serial.println("");
      nDevices++;
    }
    else if (error == 4)
    {
      Serial.print("Unbekannter Fehler an Adresse: 0x");
      if (address < 16)
        Serial.print("0");
      Serial.println(address, HEX);
    }
  }
  if (nDevices == 0)
    Serial.println("Keine I2C Geräte gefunden\n");
  else
    Serial.println("Scanvorgang Abgeschlosse\n");

  delay(10000);
}

Na bitte, also ist alles andere erstmal aussen vor.

Auf einem MEGA (Refenzdesign) sind 2 10K Widerstände als PULLUPS verbaut.
Wenn Dein Display keine hat, gehören 2 Widerstände an die Signallleitungen.

Du könntest dir den error ausgeben lassen.

Ich würde mir mit einem Oszi die Signale ansehen!
Vielleicht fehlt ja nur etwas Pullup.

Alle Oleds haben Widerstände darauf, habe noch keinen

ohne gehabt

Wenn ich das richtig sehe bietet der Nano R4 2 I2C Ports an. Wird der richtige verwendet?

Und dann Buffersize 1... Da musst du denke ich mit Firstpage/nextpage arbeiten

Die adafruit lib steht hier noch nicht als funktionierend drin:

Ich habe es mit zwei 10KOhm Widerständen probiert, das löst nicht das Problem.
Leider habe ich kein Oszilloskop mit dem ich mir die Signale ansehen kann.

Mach mal bitte ein Foto vom Aufbau. Senkrecht von oben, damit man alles erkennt, was da dran klemmt und wo es hin geht.

Variante mit A4 und A5:

Variante mit SCL und SDA:

Wenn kein I2C Device da ist, nutzt auch kein Hinweis, was dei lib machen kann oder nicht macht.
Einer seit fast einem Jahr nicht mehr gepflegten Liste zu vertrauen ist auch sportlich.

Da die SH1106 anders als die SSD1306 direkt auf die GFX aufsetzt (die schon damals funktionierte) sollte zumindest ein INIT möglich sein.

Die SH1106 wird in der U8g2lib verwendet, ist das korrekt?

Mit der U8g2lib habe ich es auch auf dem Arduino MEGA 2560 laufen.

Hast du mir dazu einen Beispiel Sketch, da mir dabei einige Punkte nicht ganz klar sind?

Muss vielleicht dem Board mittgeteilt werden, welcher von den beiden I2C Schnittstellen verwendet werden soll?
Ist vielleicht ein blöder Gedanke, aber irgendwie habe ich die Vermutung SDA, SCL werden nicht angesprochen.
Ich habe auch noch ein anderes OLED-Display getestet, dort ist auch keine Adresse zu finden.

Hab jetzt direkt keinen Sketch. Versuch mal das Display an A4/A5 und dann im I2C Scanner Sketch mit Wire1 zu arbeiten.

Oder versuch mal das Display an den qwiic connector anzuschließen.

Der Mega 2560 hat zusätzliche 10k auf den Leitungen.
Der Nano R4 auch?

ich habe deinen Scanner auf meinem UNOR4 getestet. mit OLED angeschlossen. An A4 und A5.

Starte Scanvorgang
I2C Gerät gefunden - Adresse: 0x3C
Scanvorgang Abgeschlosse