Problem bei Inbetriebnahme eines I2c OLED Displays, 128x64, SSD1306

Hallo zusammen,

Ich versuche aktuell ein 128x64 SSD1306 I2c Display mit Hilfe meines Nano in Betrieb zu nehmen.
Ich habe mir dazu zwei Tutorials durchgelesen. Demnach sollte es mit dem Beispiel-Code aus der Adafruit_SSD1306 Bibliothek (GitHub - adafruit/Adafruit_SSD1306: Arduino library for SSD1306 monochrome 128x64 and 128x32 OLEDs) kein großer Aufwand sein. Allerdings passiert bei mir nichts. Das Display bleibt schwarz.

Die externe Spannungsversorgung liefert 5V.

Beim ersten Versuch hatte ich auf ein defektes Display getippt und mir ein Zweites bestellt. Aber auch hier tut sich nichts. Also muss das Problem an einer anderen Stelle liegen.

Was mich ein klein wenig verunsichert ist, dass sich bei meinen Displays die Pin Belegung von den Displays in den Tutorials unterscheidet. GND ist bei mir immer links, während bei anderen Displays links VCC ist.

Hat jemand eine Idee, woran es liegen könnte, dass das Display nichts anzeigt? Das ist der erste Einsatz meines Nanos, vll ist die Pin Konfiguration noch nicht richtig? Muss ich evtl. hier etwas konfigurieren? Sollte das Display denn standardmäßig etwas anzeigen, sobald ich 5V anlege?

Beste Grüße,
GreenTea

MrGreenTea:
Sollte das Display denn standardmäßig etwas anzeigen, sobald ich 5V anlege?

Warum sollte es das? Du musst erst einmal programmieren, dass es etwas ausgeben soll.
Wie sieht denn Dein Sketch aus?
Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Ein Schaltplan, wie Du es real verschaltet hast (Bleistiftskizze genügt) und ein Link zum Display wären auch hilfreich.

Gruß Tommy

Findet der I2C Scanner das Display?
Ja: Code Problem.
Nein: Bus Problem
(ohne Gewähr)

Hat das Display schon Pullups drauf?

MrGreenTea:
GND ist bei mir immer links, ...

Bei mir auch, nur der Schnippel ist blau :slight_smile:

Auf der Rückseite steht bei mir "0x78" als Adresse, wobei bei Arduino das rechte Bit (LowBit) nicht mitzählt, also
0x78 / 2 = 0x3C:

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

Der I2C Scanner (siehe #2) bringt ggf. Klarheit.

Hi

Braucht der Arduino keine 5V?

Zumindest auf dem Foto sehe ich keinen roten Draht an Vdd - und zumindest für's Foto auch kein versorgendes USB-Kabel.

MfG

MrGreenTea:
Sollte das Display denn standardmäßig etwas anzeigen, sobald ich 5V anlege?

Nein, diese Displays bleiben schwarz, bis Du etwas darauf anzeigen lässt.

Diese Displays gehören zu meinen Lieblingsspielzeugen. Siehe

Es gibt diese Displays scheinbar in unterschiedlichen Ausführungen. Orientiere Dich auf jeden Fall eher am Aufdruck als an sonstwas.

Als ich anfing, damit zu spielen, habe ich mir meine eigene Bibliothek geschrieben. Guck da: http://test.szaktilla.de/gSSD1306.tgz

Evtl. finde ich noch einen Sketch, mit dem Du das ausprobieren kannst.

Gruß

Gregor

PS: Einen Beispielsketch habe ich zwar nicht gefunden, aber noch ein paar Hinweise:

Um die Bibliothek nutzen zu können, musst Du sie im „libraries“-Verzeichnis speichern. Und Du musst sie natürlich in Deinen Sketch einbinden:

#include <gSSD1306.h>

Dann kannst Du ein Display-Objekt anlegen:

gSSD1306 displ;

und mit diesem arbeiten. In setup():

displ.init();
displ.clear();

und z. B.:

displ.setPixel(x, y);

Wichtig ist, dass Du das Display aktualisierst:

displ.update();

Damit wird der Puffer im RAM zum Display übertragen und es wird angezeigt, was Du gemacht hast.

Noch Fragen?

Hallo MrGreenTea, willkommen im Forum!

Ich arbeite recht gerne mit diesen Displays, benutze aber meist andere Libraries (also nicht die von AdaFruit).

Wenn du aber die von dir erwähnte Library verwenden willst sollte es wie folgt funktionieren (ich fasse auch nochmal zusammen, was meine Vorposter eventuell bereits erwähnt haben):

  1. Libraries “installieren”
    Du brauchst zwei Libraries:
    GitHub - adafruit/Adafruit_SSD1306: Arduino library for SSD1306 monochrome 128x64 and 128x32 OLEDs
    GitHub - adafruit/Adafruit-GFX-Library: Adafruit GFX graphics core library, this is the 'core' class that all our other graphics libraries derive from

  2. Display anschließen
    Schaut auf deinem Bild eigentlich recht OK aus.
    Trotzdem hier noch mal die Anschlussbelegung (für Arduino UNO, Nano oder Mini):

      +----------- GND
      | +--------- 5 Volt    
      | | 
      | | +------- A5 (SCL)
      | | | +----- A4 (SDA)
      | | | |     
  _______________
 |    G V S S    |
 |    N c C D    |
 |    D c L A    |
 |               |
 | OLED Display  |
 | 128 x 64 Px   |
 | I2C           |
 |_______________|
  1. Beispiel laden: ssd1306_128x64_i2c.ino

  2. Adresse korrigieren
    Im Code des Beispiel-Programms musst du die richtige Adresse eintragen
    In setup ersetze die Zeile

display.begin(SSD1306_SWITCHCAPVCC, 0x3D);

durch

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  1. Lade das Beispiel auf deinen Arduino - es sollte nun etwas am Display zu sehen sein.

Es kann sein, dass die Adresse (0x3C) nicht für dein Display passt.
Dann gibt es mehrer Lösungswege.

a) Adresse ist auf der Rückseite des Displays aufgedruckt bzw. lässt sich dort einstellen (Lötbrücke).
Auf der Rückseite des Displays, das gerade auf meinem Tisch liegt, sind die Adressen 0x78 und 0x7A aufgedruckt.
Wie bereits erwähnt wurde, muss diese Zahl durch 2 dividiert werden (warum - Details hier) aus 0x78 wird also 0x3C und aus 0x7A würde 0x3D

b) I2C-Scanner. Das ist ein Programm, das nach angeschlossenen I2C-Geräten an deinem Arduino sucht.
Die gibt es zum Beispiel hier:
http://www.gammon.com.au/i2c
http://playground.arduino.cc/Main/I2cScanner
Falls du das Display richtig angeschlossen hast und der I2C-Scanner findet nichts, dann ist was faul :slight_smile:

Wünsche gutes Gelingen!

Hallo zusammen,

Danke für die vielen Antworten.

Die Adresse ist auf der Rückseite des Displays aufgedruckt: 0x78 -> 0x3C
Von daher sollte die Adresse, die ich ansteuere, korrekt sein.

Die Stromversorgung für den Nano stelle ich über die USB Verbindung sicher.

Das ist das Display, welches ich verwende: Ebay

Und gerade konnte ich die Ursache meines Problems ausfindig machen. Der Beispiel Sketch adressiert 0x3D. Ich habe diesen Wert zwar überschrieben, aber dieser Sketch ist scheinbar schreibgeschützt und deshalb wurde meine Änderung nicht übernommen.
Ich habe meinen modifizierten Sketch an einem anderen Ort abgespeichert und jetzt zeigt das Display tatsächlich etwas an :slight_smile:

Nochmal vielen Dank für eure Hinweise und Unterstützung.

Grüße,
GreenTea

MrGreenTea:
.....
Und gerade konnte ich die Ursache meines Problems ausfindig machen. Der Beispiel Sketch adressiert 0x3D. Ich habe diesen Wert zwar überschrieben, aber dieser Sketch ist scheinbar schreibgeschützt und deshalb wurde meine Änderung nicht übernommen.
.....

Dennoch sollte es funktionieren.
Auch geänderte Beispielsketche können kompiliert werden sowie auch dann funktionieren.
Lediglich können die Änderungen nicht direkt gespeichert werden, sondern wie du auch festgestellt hast, an einem anderen Ort abgelegt werden.
Somit vermute ich da noch etwas anderes.

Aber egal, Hauptsache es funktioniert.

Hi

Ich habe ja das automatische Speicher beim Kompileren deaktiviert (vorher einige Sketche zerschossen) - ggf. speichert Er nicht und kompiliert deswegen nicht?
Wobei mich Das nun nicht sooo interessiert, daß ich das Autospeichern wieder aktiviere um einen schreibgeschützen Sketch anzutesten ...

Trotz des Aufdruck kann man den meisten I²C-Chips mittels Löt-Brücken oder Kratz-Pads eine von 2/4/8 Adressen zuweisen - auch schadet ein I²C-Scanner nicht, wenn Mal mehr Slaves am Bus hängen - Da muß man immer Mal wissen, Wer jetzt wie heißt :wink:

MfG