Wie 16 kleine OLED Displays anbinden (ssd1306)?

Hallo liebes Arduino-Forum,

ganz frisch hier, aber dennoch will ich direkt zur Sache kommen.

Für ein Bastelprojekt würde ich gerne 16 kleine Displays verbauen. Idealerweise die blau gelben SSD1306 Displays. Diese werden über i2c (alternativ gibt es auch welche mit SPI) angesteuert. Allerdings habe ich bisher nur welche gefunden, die nur zwei Adressen haben indem man einen Widerstand herauslötet (siehe Anhang). Damit hätte ich jedoch nur zwei mögliche Displays…

Habt ihr eine Idee, wie ich am besten vorgehe um davon 16 Displays zu schalten?

Liebe Grüße
Warwickeo

I2C per Software und einen Mega256 mit genu Haxerl dafür nehmen ...

Oder einen I2C-Multiplexer. Aber ob die Library zur Steuerung der Displays das hergibt , kann ich nicht sagen.

Da wäre ein/mehrere I2C-Multiplexer die passende Lösung.

Warum will man aber an einen kleinen Arduino 16 Displays anschließen? Da finde ich ´noch keinen Sin dahinter. Da musst Du schon mal ein paar Info bringen, was das werden soll.

Evtl. 8 Nanos mit je 2 Displays über I2C verbinden.

Gruß Tommy

Kurze Frage @Tommy: Macht das WARUM der TE 16 Displays anschliessen will einen Unterschied bei der Art, wie er sie anschliessen kann?

Nicht falsch verstehen, ich finde es auch interesant, mehr über das Projekt zu erfahren.

LG Stefan

Ja, macht einen Unterschied. Viele User verrennen sich in eine Lösung. Wir mit Erfahrung können oft eine besseren Lösungsweg bzw eine Lösung bzw eine optimale Hardware aufzeigen.
Sollen die Displays alle das gleiche anzeigen oder jedes was anderes?
Grüße Uwe

Danke Uwe, für die ausführliche Erklärung.

LG Stefan

Ein UNO könnte wegen der Fontdefinitionen an seine Speichergrenzen stoßen. Ein Mega2560 hat mehr Speicher und mehr Pins, da bietet sich SPI als Bus an, denn da hat jedes Display eine CS-Leitung. Möglicherweise muß der Bus gepuffert werden.

Hi

Die Lötbrücke erst ausmessen - dort wird wohl nur ein Display-Pin auf GND/Vdd gezogen.
Dann kann man mit diesem Pin das Display 'ansprechen'.
Von allen Displays hat man diese Adress-Pins jeweils an einem DO (oder einem Port-Multiplexer, einem Schieberegister ... egal).
Die Displays, Die befehligt werden, werden aktiviert - die Daten übertragen und wieder deaktiviert.

Die Displays selber lesen den I²C-Bus laufend mit, vergleichen die Befehle bzw. die Ziel-ID mit Ihrer Eigenen und lassen Es, wenn die ID nicht stimmt oder eben doch, wenn doch.
Dein Sketch sendet stur auf einer dieser zwei Adressen - schaltet aber vorher das/die Display/s scharf, Die eben auf der Sende-Adresse zuhören sollen um die Befehle anzunehmen/auszuführen.

Allerdings nur in den Tiefen des WWW gelesen, daß man Das auch SO machen kann, also die ID des Target zur Laufzeit schalten.

MfG

Ich hab sowas testweise mit 8 BMP280 Sensoren gemacht. Ich habe einfach die I2C Anschlüsse im Sketch auf verschiedene Pins gelegt und schalte nur die gerade benötigten scharf. Im Prinzip hab ich so 4 I2C Busse, nur nicht gleichzeitig sondern immer nacheiander durchschaltend

themanfrommoon:
Ich hab sowas testweise mit 8 BMP280 Sensoren gemacht. Ich habe einfach die I2C Anschlüsse im Sketch auf verschiedene Pins gelegt und schalte nur die gerade benötigten scharf. Im Prinzip hab ich so 4 I2C Busse, nur nicht gleichzeitig sondern immer nacheiander durchschaltend

Und das machst du mit welchen Controller ?
Bestimmt kein Atmega328.

Hi

Dort wird NUR der Adress-Pin geschaltet - dadurch hat dieser Bus-Teilnehmer eine Adresse, Die NICHT angesprochen wird, somit hält Dieser Ruhe.
Du hast quasi alle I²C-Slaves auf der 'falschen' Adresse und schaltest nur Den 'richtig', mit Dem Du schwätzen willst.
Die Anderen hören natürlich mit, prüfen aber auf die 'jetzt in diesem Moment eingestellte Adresse' und merken: Ich bin nicht gemeint.

Kann sein, daß ich Das von BME280 gelesen hatte - es klingelt in den Tiefen der Hirnwindungen ...

MfG

Ja, das mit der Adressumschaltung sollte eigentlich funktionieren.Und spart auch resourcen im Speicher des Controllers.

Und das machst du mit welchen Controller ?
Bestimmt kein Atmega328.

Wurde irgendwo ein Atmega328 erwähnt?

Wieso kann der das nicht?

Ich mache das an einem nodeMCU ESP8266.

Mit Atmega habe ich keine Erfahrung

Lieben Gruß,
Chris

themanfrommoon:
Wurde irgendwo ein Atmega328 erwähnt?

Ja, in meinem Post.

Wieso kann der das nicht?

Nein, der kann das nicht.

Hi

Klar kann Er 'Das' - sofern das 'Das' das An/Ausschalten eines Digital-Pin bedeutet - und viel mehr 'wollen wir hier gerade' ja gar nicht.

Alle I²C-Slaves mit der gleichen Adresse (aber umlötbar auf eine Zweite) bekommen auf diesen Umlöt-Anschluss das HIGH/LOW.
Damit kann mit einem digitalWrite mit diesem Pin die Adresse des dort angeschlagenen I²C-Slave umgestellt werden - und schon hört Der zu - oder eben nicht mehr.

Wir sprechen hier NICHT von einem 2.ten I²C-Bus, sondern nur davon, per Adress-Leitung beliebig viele Slaves mit gleicher Adresse (z.B. BME280) quasi gleichzeitig - aber auf jeden Fall am gleichen Bus - zu betreiben.

MfG

postmaster-ino:
Hi

Klar kann Er 'Das' - sofern das 'Das' das An/Ausschalten eines Digital-Pin bedeutet - und viel mehr 'wollen wir hier gerade' ja gar nicht.

Alle I²C-Slaves mit der gleichen Adresse (aber umlötbar auf eine Zweite) bekommen auf diesen Umlöt-Anschluss das HIGH/LOW.
Damit kann mit einem digitalWrite mit diesem Pin die Adresse des dort angeschlagenen I²C-Slave umgestellt werden - und schon hört Der zu - oder eben nicht mehr.

Wir sprechen hier NICHT von einem 2.ten I²C-Bus, sondern nur davon, per Adress-Leitung beliebig viele Slaves mit gleicher Adresse (z.B. BME280) quasi gleichzeitig - aber auf jeden Fall am gleichen Bus - zu betreiben.

MfG

Wo steht hier etwas von Adresse ? Nur darauf zielte mein Post.

Ich hab sowas testweise mit 8 BMP280 Sensoren gemacht. Ich habe einfach die I2C Anschlüsse im Sketch auf verschiedene Pins gelegt und schalte nur die gerade benötigten scharf. Im Prinzip hab ich so 4 I2C Busse, nur nicht gleichzeitig sondern immer nacheiander durchschaltend

Wenn du etwas anderes meinst, ist es halt etwas anderes. Darauf hab ich aber nicht gepostet.

Ja , ist praktisch wie der CS -> Chip Select beim SPI.

Deltaflyer:
Ja , ist praktisch wie der CS -> Chip Select beim SPI.

Nicht ganz.
Bei I2C mußt Du immernoch alle Slave-Eingänge treiben und das braucht auch etwas Strom.

Grüße Uwe

Noch eine Kleinigkeit ist zu beachten : bei der leitung zur Adresseinstellung ist HIGH nicht 5V sondern nur 3.3V! denn der ssd1306-Controller in diesen Displays läuft nur mit 3.3V! Damit die Displays 5V tolerant sind, ist ein 3.3V Lowdrop Spannungsregler verbaut, der reduziert aber nicht die Pegel für die Datenleitungen. Wenn also die Adressleitung von aussen gesteuert wird, sollte in die Adressleitung jedes einzelnen Displays ein 1,8kOhm Widerstand eingefügt werden. Es sei denn, der steuernde Arduino läuft nur auf 3.3V!

LG Stefan