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
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
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.
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
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
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
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!
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.
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
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.
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
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.
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
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.
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!
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.
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.
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!
Joachim B, wann kommt denn dein hilfreicher Beitrag zum Thema. Versuche es doch bitte wenigstens.
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.
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
> 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); |
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.
MWS schrieb: > Wenn Du sinnlos und ohne erkennbaren Grund etwas anderes willst, dann > ist das relevant. ich leih dir ein "nicht" ;-)
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.
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.
Al. K. schrieb: > Du hast die Verpflichtung erfüllt! Lesekompetenz und logisches Denken ist jetzt nicht so Deine Stärke. Versuch's nochmal.
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
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
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.
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.
Die SSD1306 Controller senden alle ACK ganz normal wie es sein soll.
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.
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
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.
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
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.
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
Heute im Modellbahnclub tauchte die Frage auf ob mehrere Displays angesteuert werden können. Ware dies möglich mit wenigen Anpassungen?
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).
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.
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.
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.
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.
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
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!
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
TCA9548A I2C Multiplexer /ADA2717 Das ist die einfachste Art 8 I2C Schnittstellen zu bedienen. Die Adressansteuerung ist leicht in das Arduino Programm einzubinden.
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.
https://www.amazon.de/Everpert-Erweiterungskarte-IIC-Modul-Entwicklungsboard-8-Wege-Mehrkanal-Erweiterungskarte/dp/B07H31Y44H/ref=sr_1_5?ie=UTF8&qid=1536847709&sr=8-5&keywords=tca9548a+i2c+multiplexer Damit ist es aber sehr einfach, ich meine damit es ist eine Möglichkeit alles mit 5 Pins zu erledigen.
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.
@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
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.
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.
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?
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!
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
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!
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
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);
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.
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
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.
Unter der angegeben Adresse bekomme ich nur ein ERROR. http://stefanfrings.de/esp8266/WIFI-Kit-8-Test2.zip) Hast du eine neue Adresse?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.