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?
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.
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
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.
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.
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.
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 ...
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.
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.
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!