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?
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.
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):
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 |
|_______________|
Beispiel laden: ssd1306_128x64_i2c.ino
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);
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:
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
Nochmal vielen Dank für eure Hinweise und Unterstützung.
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.
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