Forum: Mikrocontroller und Digitale Elektronik I2C Display-Weis-I2C-SDD1306-128x64-Modul


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Al. K. (alterknacker)


Lesenswert?

https://www.ebay.de/itm/0-96-OLED-Display-Weis-I2C-SDD1306-128x64-Modul-Arduino-Raspberry-Pi/162465864403?hash=item25d3b85ad3:g:6ucAAOSwOhFbQy2z

Hallo,
zeigt das genannte Display Leuchtreaktionen wenn Spannung (GND/VCC) 
angelegt wird?

.. oder erst nach der korrekten Initialisierung?

Ja/nein

von M. K. (sylaina)


Lesenswert?

Erst nach Initialisierung zeigt das Display auch was an. Nur Vcc und GND 
anlegen genügt nicht.
Hier ein Lib dazu:

Beitrag "SSD1306/1309 Library zum Darstellen von Text auf OLED Displays"

: Bearbeitet durch User
von Hans (Gast)


Lesenswert?

Leuchtet nicht so einfach, da oled

von Mick (Gast)


Lesenswert?

Diese Module sind so aufgebaut, dass beim Anlegen der Spannung 
automatisch ein Reset des SDD1306 durchgeführt wird. Der Display sollte 
dabei auf jeden Fall dunkel bleiben.

von Al. K. (alterknacker)


Lesenswert?

Gibt es ein einfaches Testprogramm für den Arduino welches ohne #include 
Dateien nur die Funktion des Displays testet?
Es würde ja schon reichen ein Pixel laufen zu lassen!

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Al. K. schrieb:
> Gibt es ein einfaches Testprogramm für den Arduino welches ohne #include
> Dateien nur die Funktion des Displays testet?


Nicht ganz, aber es geht mit relativ wenig includes (2 Dateien). Kannst 
Du Dir hier raus kopieren: 
http://stefanfrings.de/esp8266/WIFI-Kit-8-Test2.zip

von Thomas W. (diddl)


Lesenswert?

Wieso ohne #include??

für was sollte das gut sein?

Du kannst natürlich den Code der LIB einfach in dein projekt nehmen, 
dann brauchst du kein #include



https://learn.adafruit.com/monochrome-oled-breakouts/arduino-library-and-examples

von Al. K. (alterknacker)


Lesenswert?

Stefanus F. schrieb:
> Nicht ganz, aber es geht mit relativ wenig includes (2 Dateien). Kannst
> Du Dir hier raus kopieren:
> http://stefanfrings.de/esp8266/WIFI-Kit-8-Test2.zip

Das ist aber nicht für I2C!

von Stefan F. (Gast)


Lesenswert?

Al. K. schrieb:
>> http://stefanfrings.de/esp8266/WIFI-Kit-8-Test2.zip
> Das ist aber nicht für I2C!

Das macht Soft-I²C. Ist doch egal, er wollte nur das Display testen.

von Al. K. (alterknacker)


Lesenswert?

Stefanus F. schrieb:
> Das macht Soft-I²C. Ist doch egal, er wollte nur das Display testen.


OLED display=OLED(4,5,16);

Habe nur diese Zeile gesehen.
Was macht diese!


Ich muss ja eine Adresse einstellen!

Soft-I2C ist doch auch gut genug, wenn geht.

MfG

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Diese Zeile ist in der Tat die wichtigste. Sie legt fest, an welche 
Arduino Pins das Display angeschlossen ist. Da gibt es noch mehr 
optionale Parameter, sind alle in der oled.h dokumentiert.

von Al. K. (alterknacker)


Lesenswert?

Stefanus F. schrieb:
> Diese Zeile ist in der Tat die wichtigste. Sie legt fest, an welche
> Arduino Pins das Display angeschlossen ist. Da gibt es noch mehr
> optionale Parameter, sind alle in der oled.h dokumentiert.

Die 16 scheint Reset zu sein, bei mir nicht!
Habe die Adresseinstellung noch nicht gefunden.
Kann aber erst heute Abend weitermachen.
Das Prog ist zwar nicht ganz das richtige.
Ich wollte ohne zu frickeln das Teil testen, defekt oder nicht.

Wenn es klappt gibt es ja noch viele andere Funktionsparameter.
MfG

von Stefan F. (Gast)


Lesenswert?

Al. K. schrieb:
> Die 16 scheint Reset zu sein, bei mir nicht!

Du musst die Pins so einstellen, wie du sie verkabelt hast. Wenn die 
Reset Leitung gar nicht verbunden ist, schreibst du ersatzweise 
NO_RESET_PIN hin. Das steht in der Doku in der oled.h .

> Habe die Adresseinstellung noch nicht gefunden.

In der oled.h steht drin, welche Adressen die üblichen sind.

> Ich wollte ohne zu frickeln das Teil testen, defekt oder nicht.

Was soll dass denn bedeuten? Suchst du ein Testprogramm, dass deine 
Pin-Zuordnung und die Adresse automatisch heraus findet? Da kannst du 
lange suchen.

Wer zu faul für Elektronik ist, sollte vielleicht was anderes machen.

von Joachim B. (jar)


Lesenswert?

Stefanus F. schrieb:
> Du Dir hier raus kopieren:
> http://stefanfrings.de/esp8266/WIFI-Kit-8-Test2.zip

und was hilft das dem TO?

ich will dir wirklich nichts Böses, frage mich aber warum du immer 
solche Tipps geben musst, der TO hat ein reines I2C Display verlinkt, 
mit 4 Pins, VCC, GND, SDA und SCL

Al. K. schrieb:
> 
https://www.ebay.de/itm/0-96-OLED-Display-Weis-I2C-SDD1306-128x64-Modul-Arduino-Raspberry-Pi/162465864403?hash=item25d3b85ad3:g:6ucAAOSwOhFbQy2z

nachdem man dein ZIP runtergeladen und geöffnet hat findet man zur Init

// OLED display=OLED(2,14,4);
OLED display=OLED(4,5,16);

3 Pins MIT Reset vermute ich (gilt für andere Displays), das gibt das 
Display vom TO aber nicht her!

ausserdem gibt es diese Displays mit SSD1306 und SH1106 Chip, beide 
differieren etwas in der Ansteuerung.

Dein 3-Zeiler Beitrag hilft also dem TO in keinster Weise

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Joachim B. schrieb:
> 3 Pins MIT Reset vermute ich (gilt für andere Displays), das gibt das
> Display vom TO aber nicht her!

Noch einer der die Doku nicht liest, bevor er plappert. Und auch nicht 
die Erklärungen, die direkt im Beitrag vor dem Geplappere stehe.

> ausserdem gibt es diese Displays mit SSD1306 und SH1106 Chip, beide
> differieren etwas in der Ansteuerung.

Ach was, wirklich?
Wofür ist wohl der letzte optionale Parameter des Konstruktors?

Joachim: Wenn man keine Ahnung hat, dann sollte man einfach mal die 
Klappe halten.

von Joachim B. (jar)


Lesenswert?

Stefanus F. schrieb:
> Und auch nicht
> die Erklärungen, die direkt im Beitrag vor dem Geplappere stehe.

mein Beitrag schreiben hat längert gedauert, ich musste ja erst mal 
deinen Code runterladen OMG

> Joachim: Wenn man keine Ahnung hat, dann sollte man einfach mal die
> Klappe halten.

Kupferleitwert!

von Stefan F. (Gast)


Lesenswert?

Joachim B. schrieb:
> Kupferleitwert!

Ja toll, der Bart ist schon ziemlich lang. Da schreibt man vor >5 Jahren 
einmal falsche Zahlen von Wikipedia ab, und der Joachim reibt sich vor 
Freude einen über diese Entdeckung.

Weißt du was, für deinen Hinweis zu dem Fehler bin ich inzwischen nicht 
mehr dankbar.

von Joachim B. (jar)


Lesenswert?

Stefanus F. schrieb:

> Ja toll, der Bart ist schon ziemlich lang. Da schreibt man vor >5 Jahren
> einmal falsche Zahlen von Wikipedia ab

dann p*sse mich doch nicht an:

Stefanus F. schrieb:
> Joachim: Wenn man keine Ahnung hat, dann sollte man einfach mal die
> Klappe halten.

das kann ich voll zurückgeben, deine 3-Zeilerantwort an den TO war ohne 
weitere Erklärungen eben nicht hilfreich für jemand der noch nie mit 
diesen I2C Displays zu tun hatte, gut gemeint ist selten gut gemacht.

von Al. K. (alterknacker)


Lesenswert?

Stefanus F. schrieb:
> In der oled.h steht drin, welche Adressen die üblichen sind.

Bin wieder zurück.
Werde mal jetzt besser suchen und testen!

von Stefan F. (Gast)


Lesenswert?

Joachim B, wann kommt denn dein hilfreicher Beitrag zum Thema. 
Versuche es doch bitte wenigstens.

von MWS (Gast)


Lesenswert?

Joachim B. schrieb:
> das kann ich voll zurückgeben, deine 3-Zeilerantwort an den TO war ohne
> weitere Erklärungen eben nicht hilfreich für jemand der noch nie mit
> diesen I2C Displays zu tun hatte, gut gemeint ist selten gut gemacht.

Dann nimm ihm doch Du die Windeln ab und setz' ihn auf's Töpfchen.

Wenn der TE den Begleittext nicht lesen mag, nicht programmieren mag, 
keine includes mag, ja dann wird's für ihn Zeit Gartenzwerge zu bemalen. 
Das ist ein Diskussionsforum, wenn der TE nicht auf dem Level der 
Diskussion ist, dann macht der was falsch und nicht die anderen 
Diskutanten.

Der einzige Zweck Deines Posts war im Übrigen Stefan anzumachen.
Wenn Du den Sinn des Forums oder des einzelnen Posts schon darin siehst 
unbedingt hilfreich zu sein: da kam aber so was von gar nix von Dir.

von Al. K. (alterknacker)


Lesenswert?

Habe die angegebenen Pins 4/5 zum Test genommen.
Das Demoprogramm läuft und ist rech ausführlich.

OLED(uint8_t sda_pin, uint8_t scl_pin, uint8_t reset_pin=NO_RESET_PIN, 
uint8_t i2c_address=0x3C,
uint_fast8_t width=128, uint_fast8_t height=32, bool isSH1106=false);


Mich wundert es nur das hier die I2C Adresse 0x3C ist.
Auf dem Display aber 0x78.

Auch sollte mein Display 128*64 sein hier sind aber 128*32 eingetragen.

Das Display wird aber richtig angesteuert(Maxi Breite/Maxi Höhe)



MWS schrieb:
> Wenn der TE den Begleittext nicht lesen mag, nicht programmieren mag,
> keine includes mag, ja dann wird's für ihn Zeit Gartenzwerge zu bemalen.

Man darf doch mal fragen ob es ein einfaches Testprogramm ohne Include 
Dateien gibt.
Warum ist doch hier nicht relevant!

Es geht um Lösungen, nicht warum es dieser Lösung bedarf!

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

> Mich wundert es nur das hier die I2C Adresse 0x3C ist.
> Auf dem Display aber 0x78.

I²C Device Adressen haben 7 Bit. Der Wert 0x78 kann daher nicht richtig 
sein. Er kommt vermutlich so zustande:

Das erste Byte jeder Transaktion enthält diese 7bit Adresse plus ein Bit 
zur Angabe, ob man schreiben oder lesen will.
1
Bit:  7 6 5 4 3 2 1 0
2
      a a a a a a a rw
3
4
 a= Adresse
5
rw= Low=read, High=Write

Wenn du nun die 7 Bit Adresse um das rw Bit erweiterst und als 8 Bit 
Zahl betrachtest, dann hat diese bei Lese-Zugriffen den Wert 0x78.
1
OLED(uint8_t sda_pin, uint8_t scl_pin, uint8_t reset_pin=NO_RESET_PIN, 
2
uint8_t i2c_address=0x3C, uint_fast8_t width=128, uint_fast8_t height=32, bool isSH1106=false);

> Auch sollte mein Display 128*64 sein hier sind aber 128*32 eingetragen.

Das sind nur die default Werte für optionale Parameter. Du kannst ja die 
richtigen Werte beim Konstruieren angeben:
1
OLED display=OLED(4,5,NO_RESET_PIN,0x3C,128,64,false);

von MWS (Gast)


Lesenswert?

Al. K. schrieb:
> Man darf doch mal fragen ob es ein einfaches Testprogramm ohne Include
> Dateien gibt.
> Warum ist doch hier nicht relevant!

Kommt darauf an...
Nachdem es zweckmäßig ist, Displaytreiber mit ein wenig Komplexität als 
Lib auszuführen, so ist das Einbinden per include der Standard.
Wenn Du sinnlos und ohne erkennbaren Grund etwas anderes willst, dann 
ist das relevant.

von Carl D. (jcw2)


Lesenswert?

MWS schrieb:
> Wenn Du sinnlos und ohne erkennbaren Grund etwas anderes willst, dann
> ist das relevant.

ich leih dir ein "nicht" ;-)

von MWS (Gast)


Lesenswert?

Al. K. schrieb:
> Es geht um Lösungen, nicht warum es dieser Lösung bedarf!

Um die Lösung als Selbstzweck geht es allein für Dich.

Nachdem Du es aber nicht selbst erledigt bekamst, hast Du hier die 
Helferin bemüht und die interessiert eben auch noch mehr.

Das ist doch kein Supportforum hier, in dem es eine Verpflichtung 
anderer Teilnehmer gibt, dem Beschwerde- oder Fragesteller möglichst zu 
dessen Konditionen behilflich zu sein.

von MWS (Gast)


Lesenswert?

MWS schrieb:
> Helferin
= Helferlein

Fluch der Autokorrektur.

von Al. K. (alterknacker)


Lesenswert?

MWS schrieb:
> Das ist doch kein Supportforum hier, in dem es eine Verpflichtung
> anderer Teilnehmer gibt, dem Beschwerde- oder Fragesteller möglichst zu
> dessen Konditionen behilflich zu sein.

Du hast die Verpflichtung erfüllt!
Du hast nicht geholfen und nur dazwischen geredet!



Stefanus F. schrieb:
>> Auch sollte mein Display 128*64 sein hier sind aber 128*32 eingetragen.
>
> Das sind nur die default Werte für optionale Parameter. Du kannst ja die
> richtigen Werte beim Konstruieren angeben:
> OLED display=OLED(4,5,NO_RESET_PIN,0x3C,128,64,false);


Werde ich Testen , aber vielleicht ist es wirklich nur ein 128*32 
Display, da
das Display Maximal genutzt wird.

Das mit der Adressbildung war mir wieder mal entfallen.

von MWS (Gast)


Lesenswert?

Al. K. schrieb:
> Du hast die Verpflichtung erfüllt!

Lesekompetenz und logisches Denken ist jetzt nicht so Deine Stärke.
Versuch's nochmal.

von Al. K. (alterknacker)


Lesenswert?

Al. K. schrieb:
>> OLED display=OLED(4,5,NO_RESET_PIN,0x3C,128,64,false);

Alles jetzt o.k.
Der Anzeigetafel steht nichts mehr im Wege,hoffentlich.

..ach MWS,
wieder mit der Giftspritze unterwegs!

Danke an Stefanus

: Bearbeitet durch User
von Al. K. (alterknacker)


Lesenswert?

Zitat:
------------------------------------------------------------------------ 
---
Nur so am Rande: Es gibt SSD1306 OLEDs die sich nicht mit einem I2C 
Scanner finden lassen, weil sie kein ACK senden. Natürlich ist das dann 
auch kein richtiges I2C...

Hast du denn mal versucht das display anszusprechen? Beispielsweise mit 
u8g2 software emulated I2C (welches das ACK nicht auswertet)?
------------------------------------------------------------------------ 
----
Was hat dies für Auswirkungen auf verschiedene Arduino Programme?
Wenn das ACK nicht gesendet wird , aber es im Arduino Prog ausgewertet 
wird,
was ist dann?


Wie gehe ich am besten/einfachsten vor um eine Textzeile zu invertieren?
Prinzip den entsprechenden Grafikbereich der Zeile Invertieren.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Al. K. schrieb:
> Wie gehe ich am besten/einfachsten vor um eine Textzeile zu invertieren?
> Prinzip den entsprechenden Grafikbereich der Zeile Invertieren.

Mit meiner OLED Library kannst du einen weißen Kasten zeichnen und 
danach Text in schwarz darüber schreiben.

Ich würde das aber vermeiden, denn je länger und heller die Pixel 
leuchten, umso schneller verschleißen sie.

von W.S. (Gast)


Lesenswert?

Al. K. schrieb:
> Wie gehe ich am besten/einfachsten vor...

Ach Leute,
nachdem auch dieser Thread mal wieder fast entgleist ist (ohne daß ICH 
involviert gewesen wäre), sag ich erstmal nur: Ohne Fleiß kein Preis. 
Das kannten schon unsere Vorfahren.

Das Allererste, was man beim Kauf eines Displays tun sollte ist, die 
Dokumentation zu diesem Display zu suchen, zu finden und zu LESEN. Gilt 
für das Display als solches als auch für den verwendeten Grafikchip.

Wenn so ein Display kein ACK sendet, dann ist das seltsm und nicht 
konform zu den Regeln. Ich zweifle da zunächst dran, allerdings habe ich 
mit chinesischen 3D-Magnet-Sensor-Moduln (für 'ARDUINOOOHH') eine 
ähnliche Erfahrung machen müssen.

In solchen Fällen ist grundsätzlich ein spezieller, auf genau dieses 
Teil zugeschnittener Lowlevel-Handler nötig - und den muß man sich 
vermutlich selber schreiben.

Grundsätzlich sollte man aber Lowlevel-Dinge strikt von Hilevel-Dingen 
trennen. Deswegen ist die Frage "Wie gehe ich am besten/einfachsten vor 
um eine Textzeile zu invertieren?" komplett falsch. Wirklich KOMPLETT 
falsch. Ich formuliere das mal ganz anders:
1. Man habe einen Bild-Speicher im RAM, wo man das Bild mit diversen 
Hilevel-Funktionen aufbaut.
Also mit sowas:
- Füllen eines Rechtecks mit einer Farbe
- Schreiben von Textzeichen in einer anderen Farbe und in einem 
bestimmten Font
- Zeichnen von Linien und anderen Kringeln

Bei monochromen Displays hat man als Farbauswahl da nur hell, dunkel, 
invertiert. Aber das ist ja nur eine Art Untermenge von Farbe1 bis 
FarbeXXX.
2. Man habe einen Lowlevel-Treiber, der nach Fertigstellung der 
Zeichenarbeiten den Inhalt des Bild-Speichers en bloc in das Display 
befördert.

So herum geht es, "die Textzeile zu invertieren".

W.S.

von Stefan F. (Gast)


Lesenswert?

Die SSD1306 Controller senden alle ACK ganz normal wie es sein soll.

von Joachim B. (jar)


Lesenswert?

Stefanus F. schrieb:
> Joachim B, wann kommt denn dein hilfreicher Beitrag zum Thema.
> Versuche es doch bitte wenigstens.

gerne

Joachim B. schrieb:
> ausserdem gibt es diese Displays mit SSD1306 und SH1106 Chip, beide
> differieren etwas in der Ansteuerung.

ich habe über ein halbes Dutzend dieser OLED Displays bestellt, von 
verschiedenen Quellen man sieht aber leider nicht immer welcher Chip 
verbaut ist und manche haben echte Probleme und benötigen den reset.

Ich habe mich mit der UG8 LIB rangetastet.

Wenns beim TO nun läuft ist ja alles gut zumal er den Reset Pin ja nicht 
erreichbar hat.

Für andere bei denen es klemmt empfehle ich die UG8 zu probieren wie ich 
es tat und alle Optionen zu probieren
https://github.com/olikraus/u8glib

Die OLED Lib am ESP mit OLED ist auch etwas zickig, nerven tut dabei das 
es fast unzählige LIBs gibt die man alle probieren muss bis es klappt.

von Al. K. (alterknacker)


Lesenswert?

Joachim B. schrieb:
> nerven tut dabei das
> es fast unzählige LIBs gibt die man alle probieren muss bis es klappt.

Das nervt wirklich, noch dazu wenn alle halbe Jahre mal ein Projekt für 
den Club ansteht.

Stefanus F. schrieb:
> Mit meiner OLED Library kannst du einen weißen Kasten zeichnen und
> danach Text in schwarz darüber schreiben.
>
> Ich würde das aber vermeiden, denn je länger und heller die Pixel
> leuchten, umso schneller verschleißen sie.

..werde ich mal testen!

Ich möchte ja nicht das gesamte Innenleben studieren nur um eine 
Anzeigetafel der 70/80 Jahre für den Club zu konzipieren wie W.S. 
andeutet.
Es war nur eine Festschriftanzeige wo der Aktuelle Stand  beleuchtet 
wurde.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Joachim B. schrieb:
> nerven tut dabei das es fast unzählige LIBs gibt die man
> alle probieren muss bis es klappt.

Sicher nervt das. Andererseits sollte man bedenken, das Konkurrenz das 
Geschäft belebt.

Wenn man für alles nur eine Wahlmöglichkeit hat, muss diese eine Lösung 
sehr hohe Qualität haben. Die erreicht man wohl nur im Laufe vieler 
Jahre oder beschleunigt wenn kommerzielle Interessen dahinter stecken.

Aber selbst das ist kein Garant, wie man bei den Libraries von Adafruit 
gut sehen kann.

Natürlich gibt es aufeinander abgestimmte Produkte mit der dazugehörigen 
Software. Nur kosten die "etwas" mehr, als 5 Euro. Im Industriebereich 
sind sie dennoch Standard.

von Al. K. (alterknacker)


Lesenswert?

Hallo Stefanus,
habe jetzt getestet,inverser Anzeigetext funktioniert.

Habe aber eine Frage zum Aufruf.
       display.draw_string(4,52,"Erfurt  20:34",0,0);
hiermit Funktionierte es, Schwarze Schrift ins weise Feld.

 //      display.draw_string(4,52,"Erfurt  20:34",0,BLACK);
Dieser Aufruf z.B. erzeugt Compiler Fehler.

Wie sieht ein Ordnungsgemäßer Aufruf aus?

Stefanus F. schrieb:
> Natürlich gibt es aufeinander abgestimmte Produkte mit der dazugehörigen
> Software. Nur kosten die "etwas" mehr, als 5 Euro. Im Industriebereich
> sind sie dennoch Standard.

Deshalb habe ich bis jetzt immer Intelligente Displays genommen.
Mit Tx/Rx Ansteuerung war das immer recht einfach.

https://www.amazon.de/s/ref=nb_sb_noss?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&url=search-alias%3Daps&field-keywords=nixtion+Display
So ein Teil will ich demnächst Nutzen.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Guck von meinem Beispielprogramm ab. Du musst "OLED::BLACK" schreiben.

Eine Konstante, die einfach nur BLACK heißt wäre mir zu heiß gegeben. 
Das gäbe sicher schnell einen Konflikt mit anderen Libraries.

> So ein (Nextion Display) Teil will ich demnächst Nutzen.

Die haben auch einen guten Ruf. Werden hier immer wieder empfohlen.

von Al. K. (alterknacker)


Lesenswert?

Stefanus F. schrieb:
> Guck von meinem Beispielprogramm ab. Du musst "OLED::BLACK" schreiben.

Hatte ich auch getestet, na ja werde ich nochmals machen.
Was ist mit dem Textparameter.
0 und 1 habe ich getestet, aber was muss ich richtig schreiben?

Edit
     display.draw_string(4,52,"Erfurt  20:34",0,OLED::BLACK);
getestet und o.k.
Edit:
display.draw_string(4,52,"Erfurt 20:34",OLED::NORMAL_SIZE,OLED::BLACK);
getestet und o.k.

Hatte ich aber schon mal versucht!

: Bearbeitet durch User
von Al. K. (alterknacker)


Lesenswert?

Heute im Modellbahnclub tauchte die Frage auf ob mehrere Displays 
angesteuert werden können.
Ware dies möglich mit wenigen Anpassungen?

von Ralph S. (jjflash)


Lesenswert?

Mit den SPI-OLEDS sind auf jeden Fall mehrere Displays möglich, weil du 
hier über die CS Leitung des Displays bestimmen kannst, für wen der 
Datenstrom ist.

Bei den I2C Displays mußt du sehen, ob du auf der Platine die I2C 
Adresse von 0x78 auf eine andere Adresse legen kannst (ich glaube aber 
eher nicht).

von Johannes S. (Gast)


Lesenswert?

Oder einen kleinen LPC824 benutzen, der hat 4x I2C und 8 kB RAM und 
damit genug für 4 oled im Grafikmode.

Beitrag #5554844 wurde von einem Moderator gelöscht.
von M. K. (sylaina)


Lesenswert?

Ralph S. schrieb:
> Bei den I2C Displays mußt du sehen, ob du auf der Platine die I2C
> Adresse von 0x78 auf eine andere Adresse legen kannst (ich glaube aber
> eher nicht).

Ich hab hier einige Displays mit SSD1306-Controller, da ist ein Jumper 
drauf mit dem ich zwischen 0x78 (0x3C) und 0x7A (0x3D) wählen kann. Zwei 
Displays sollten damit also gehen. Würde aber bei so einem Fall auch 
eher nach SPI-Displays schaun.

von Al. K. (alterknacker)


Lesenswert?

Es geht hier um das Arduinoprogramm, ob mit wenig Anpassung 
mehreremeiner I2C Displays angesteuert werden können.
Das  ist zu meinen Verständnis nur möglich wenn ich die Pins und/oder 
Adresse zur Laufzeit ändern kann.
Es ist ja ein Soft I2C!

Man könnte auch einen I2C Multiplexer extern nutzen, das ist aber 
zusätzliche externe Hardware.

von Harry L. (mysth)


Lesenswert?

Al. K. schrieb:
> Es ist ja ein Soft I2C!

Und was hat das mit dem I²C-Slave auf dem Display zu tun?

von Stefan F. (Gast)


Lesenswert?

Al. K. schrieb:
> Es geht hier um das Arduinoprogramm, ob mit wenig Anpassung
> mehreremeiner I2C Displays angesteuert werden können.
> Das  ist zu meinen Verständnis nur möglich wenn ich die Pins und/oder
> Adresse zur Laufzeit ändern kann.

Bei meiner oled.h Library (in 
http://stefanfrings.de/esp8266/WIFI-Kit-8-Test2.zip) kann man beliebige 
I/O Pins und beliebige Slave-Adressen als Konstruktor-Argument angeben.

> Es ist ja ein Soft I2C!

Eben deswegen geht das. Hier bekommt man mehr Flexibilität auf Kosten 
der Performance.

Wobei ich hervorheben möchte, dass diese Library eigentlich für den 
ESP8266 gedacht war, der erreicht auch mit Soft I²C die maximale 
Geschwindigkeit, die das Display verträgt.

von Al. K. (alterknacker)


Lesenswert?

Stefanus F. schrieb:
> Bei meiner oled.h Library (in
> http://stefanfrings.de/esp8266/WIFI-Kit-8-Test2.zip) kann man beliebige
> I/O Pins und beliebige Slave-Adressen als Konstruktor-Argument angeben.

..ist dies aber zur Laufzeit möglich?

Es einer im Club, welcher gleich 8 Displays ansteuern wollte!?

Kann der ACK vom Display ignoriert/ausgeblendet  werden?
Hatte mal eine I2C Ansteuerung zum Slave mit reinen Out Pegel L/H.

Habe das Programm mal in den Arduino Nano geladen, lief aber nicht!

Die Zeit ist bei meiner möglichen Anwendung untergeordnet!

: Bearbeitet durch User
von Harry L. (mysth)


Lesenswert?

Al. K. schrieb:
> Stefanus F. schrieb:
>> Bei meiner oled.h Library (in
>> http://stefanfrings.de/esp8266/WIFI-Kit-8-Test2.zip) kann man beliebige
>> I/O Pins und beliebige Slave-Adressen als Konstruktor-Argument angeben.
>
> ..ist dies aber zur Laufzeit möglich?
>
> Es einer im Club, welcher gleich 8 Displays ansteuern wollte!?
>
> Kann der ACK vom Display ignoriert/ausgeblendet  werden?
> Hatte mal eine I2C Ansteuerung zum Slave mit reinen Out Pegel L/H.
>
> Habe das Programm mal in den Arduino Nano geladen, lief aber nicht!
>
> Die Zeit ist bei meiner möglichen Anwendung untergeordnet!

Das ist so oder so Murks!
Bei 8 Displays solltest du SPI nehmen!

von Al. K. (alterknacker)


Lesenswert?

Harry L. schrieb:
> Das ist so oder so Murks!
> Bei 8 Displays solltest du SPI nehmen!

Mensch , das ist auch mir bekannt,es besteht aber die Frage ob es geht.
...und wenn man 30 Stück für 15 Euro bekommt, ist dies auch wichtig!

: Bearbeitet durch User
von Al. K. (alterknacker)


Lesenswert?

TCA9548A I2C Multiplexer /ADA2717

Das ist die einfachste Art 8 I2C Schnittstellen zu bedienen.
Die Adressansteuerung ist leicht in das Arduino Programm einzubinden.

von Stefan F. (Gast)


Lesenswert?

Al. K. schrieb:
> Stefanus F. schrieb:
>> Bei meiner oled.h Library (in
>> http://stefanfrings.de/esp8266/WIFI-Kit-8-Test2.zip) kann man beliebige
>> I/O Pins und beliebige Slave-Adressen als Konstruktor-Argument angeben.
>
> ..ist dies aber zur Laufzeit möglich?

Das Objekt enthält Zustandsdaten und den RAM Puffer für das jeweilige 
Display. Du musst schon für jedes Display ein eigenes Objekt anlegen. Ob 
du das zur Laufzeit machst, oder einmal beim Programmstart, bleibt Dir 
überlassen.

> Kann der ACK vom Display ignoriert/ausgeblendet  werden?

Es wird bereits ignoriert. Die Funktion i2c_send liefert den Wert des 
ACK zurück, aber der return Wert wird nirgends ausgewertet.

von Al. K. (alterknacker)


Lesenswert?


von Stefan F. (Gast)


Lesenswert?

Bitte beachten: Auch andere Libraries kann man nur bedingt mit so einem 
I²C Multiplexer verwenden, weil beim Umschalten der RAM-Puffer ungültig 
wird.

von Al. K. (alterknacker)


Lesenswert?

@Stefanus,
werde demnächst es erst mal mit 2 Displays versuchen.
Habe noch 2 Displays gefunden welche mit SPI angesteuert werden sollten.
Hast du zum Test auch ein einfaches Prog mit SPI Ansteuerung.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Al. K. schrieb:
> Hast du zum Test auch ein einfaches Prog mit SPI Ansteuerung.

Nein

von Johannes S. (Gast)


Lesenswert?

an welchem µC hängt das Display? Der Code von Stefan war ja auch für den 
ESP8266, wenn man den nimmt sollte der auch 4 Instanzen des Oled mit 
Soft-I2C treiben können. Der ESP hat genug RAM das man da keine 
Verrenkungen im Code braucht. Und der hat gleich ein WLan über das man 
die Displaydaten vorgeben kann. Wenn man I2C Display mit zwei 
verschiedenen Adressen nimmt sollte der ESP sogar die gewünschten 8 Oled 
bedienen können.

von Al. K. (alterknacker)


Lesenswert?

Stefanus F. schrieb:
> Nein

na, da muss ich mich auf die Socken eh Suche  machen.;-)

von Knacker Amüsiert (Gast)


Lesenswert?

Al. K. schrieb:
> na, da muss ich mich auf die Socken eh Suche  machen.;-)

Na das kann ja wieder ein (neues) Affentheater hier auf uC.net werden.

von Stefan F. (Gast)


Lesenswert?

Wie wäre es, wenn du SPI Unterstützung selbst hinzu fügst?
Oder klöppelt man heutzutage seine Programme nur noch as fertigen 
Libraries zusammen?

von Al. K. (alterknacker)


Lesenswert?

Stefanus F. schrieb:
> Wie wäre es, wenn du SPI Unterstützung selbst hinzu fügst?
> Oder klöppelt man heutzutage seine Programme nur noch as fertigen
> Libraries zusammen?

Das Fahrrad wird nicht nochmals erfunden, gebe es weiter und nutze es 
für mich kaum noch!

von Al. K. (alterknacker)


Lesenswert?

Knacker Amüsiert schrieb:
> Na das kann ja wieder ein (neues) Affentheater hier auf uC.net werden.

leider ist es kurzfristig nicht mehr nötig, da mein schwerkranke Kollege 
und Musiker  mit 61 Jahren verstorben ist.
Er wollte eins dieser Displays benutzen, selbst programmieren konnte er 
krankheitsbedingt  nicht mehr!


Ich schreibe dies nur um den vielen Nölern etwas über das Maul zu 
fahren.
wenn nach einer schnellen und angeblichen fertigen Lösung gesucht wird 
und man das Handwerkszeug nicht nochmals selbst herstellen will.
Die letzte Arbeit der Anwendung ist in den meisten Fällen ohne Hilfe zu 
bewerkstelligen das ist nur Logik und Anwendung der Befehle,egal welche 
Programmiersprache.
..noch dazu wenn man selten Programmiert.

So das wars!

MfG

: Bearbeitet durch User
von ichBinGast (Gast)


Lesenswert?

Al. K. schrieb:
> So das wars!

Nicht jeder kann die oft seltsamen Fragen der Arduinojünger beantworten 
oder verstehen!
Du siehst aber es gibt immer wieder vernünftige Antworten auf alle 
Fragen!

von Al. K. (alterknacker)


Lesenswert?

ichBinGast schrieb:
> Du siehst aber es gibt immer wieder vernünftige Antworten auf alle
> Fragen!

Ich bin auch der Meinung das Hilfsbereitschaft und Verständnis den 
größten Teil der User zugeordnet werden kann.
Mit nörgelnden nicht zielführenden Antworten von Pseudofachleuten
muss man umgehen  können.
Diese nicht zielführenden Vorschläge kosten aber oftmals viel Sinnlose 
Zeit!

: Bearbeitet durch User
von Al. K. (alterknacker)


Lesenswert?

Hallo,
habe die I2C Anzeige mal wieder in Benutzung.
Nutze die Include von Stefanus.
Will erst mal eine Char Variable übergeben.Es erfolgt auch eine Anzeige 
im Display.
Die Übergabe einer nächsten wird nicht angezeigt.
Wie ist der richtige  Befehlsaufruf um eine Char Variable auf dem 
Display anzeigen zu lassen.

Zeichen='4';
display.draw_character(Sp,Ze,Zeichen,OLED::NORMAL_SIZE,OLED::WHITE);

display.draw_string(Sp,Ze,Zeichen,OLED::NORMAL_SIZE,OLED::WHITE);
Einmal geht es!

Es sollte sich auch ein Char Array anzeigen lassen.
Wie sieht der Richtige Befehl dazu aus.
...oder geht das nicht?
display.draw_string(Sp,Ze,*mystring,OLED::NORMAL_SIZE,OLED::WHITE);

von Stefan F. (Gast)


Lesenswert?

Al. K. schrieb:
> Einmal geht es!

Sollte auch mehrmals mit draw_character() gehen. Bei mir geht es. Hast 
du das beigelegte Beispielprogramm mal ausprobiert? 
http://stefanfrings.de/esp8266/WIFI-Kit-8-OLED.zip

> Es sollte sich auch ein Char Array anzeigen lassen.

Hänge ein Null-Zeichen hinten dran und benutze draw_string(). Oder 
benutze draw_character() und baue eine for-schleife drumherum. Etwas 
anderes macht die draw_string() Funktion im Prinzip auch nicht.
1
char[] meinArray={'A','B','C'};
2
for (int i=0; i<3; i++)  // oder sizeof(meinArray) anstelle der 3
3
{
4
    draw_character(i*5,0,meinArray[i]);
5
}
6
7
char[] meinString="ABC";
8
draw_string(0,0,meinString);

Der Unterschied ist, dass Strings automatisch mit einem Null-Zeichen 
terminiert sind, während Arrays von Zeichen es nicht sind. Die 
draw_string Funktion erkennt das Ende (bzw. die Größe) des Arrays an 
diesem Zeichen. Wenn es fehlt, passiert irgend etwas blödes.

Das gilt allgemein für alle String-Funktionen in c.

von Al. K. (alterknacker)


Lesenswert?

Hallo,
Das mit der Nul habe ich auch versucht!
Dann auch dies einfache

Zeichen='1';
display.draw_string(Sp_Text+58,Ze_Text+4*TeZeAbst,Zeichen,OLED::NORMAL_S 
IZE,OLED::WHITE);

Zeichen='2';
display.draw_string(Sp_Text+58,Ze_Text+4*TeZeAbst,Zeichen,OLED::NORMAL_S 
IZE,OLED::WHITE);

Zeichen='3';
display.draw_string(Sp_Text+58,Ze_Text+4*TeZeAbst,Zeichen,OLED::NORMAL_S 
IZE,OLED::WHITE);

Zeichen='4';
display.draw_string(Sp_Text+58,Ze_Text+4*TeZeAbst,Zeichen,OLED::NORMAL_S 
IZE,OLED::WHITE);

Werde jetzt erst mal weiter testen, muss ja mal klappen;-))

ha,ha, ich glaube ich sollte es mit der Draw.charakter Funktion nochmals 
testen!

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Al. K. schrieb:
> Zeichen='1';
> display.draw_string(Sp_Text+58,Ze_Text+4*TeZeAbst,Zeichen,OLED::NORMAL_S
> IZE,OLED::WHITE);

Für einzelne Zeichen musst du draw_character() verwenden. Draw String 
durchläuft den Speicher bis zum nächsten '\0' Zeichen, welches das Ende 
der Zeichenkette markiert.

von Helmut (Gast)


Lesenswert?

Unter der angegeben Adresse bekomme ich nur ein ERROR.
http://stefanfrings.de/esp8266/WIFI-Kit-8-Test2.zip)
Hast du eine neue Adresse?

von Stefan F. (Gast)


Lesenswert?

Helmut schrieb:
> Unter der angegeben Adresse bekomme ich nur ein ERROR.
> Hast du eine neue Adresse?

Ja, bitteschön: http://stefanfrings.de/arduino_oled/index.html

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.