ich habe einen Nucleo-L152RE Mikrocontroller und ein LCD-Display 1602. Ich möchte in der Arduino-IDE Zeichen über I2C zum Display schicken (im Beispiel den Buchstaben "A".
Leider wird auf dem Display nichts angezeigt. Die Verbindung selbst ist korrekt.
Der Quellcode ist im Anhang.
Ich wäre sehr dankbar, wenn mir jemand meinen Quellcode korrigieren könnte.
Du kannst nicht einfach auf diese Weise Buchstaben an das Display senden.
Das Display muss für 4 Bit Kommunikation initialisiert werden. Dann musst du die Buchstaben in 4 Bit zerlegen und die Steuerleitungen des Display ansteuern.
Also lies das Datenblatt von HD44780 und von dem Port-Expander, der damit verbunden ist.
Da das kein Job für Anfänger ist, empfehle ich dir die Verwendung eines Display ohne Portexpander. Dann hast du einen Chip weniger beteiligt, was die Sache sehr vereinfacht.
Wire.begin ();
Initialisiert weder den LCD Controller noch den Portexpander, sondern nur die I2C Schnittstelle des Mikrocontrollers.
Alternativ zu Wire.h kann man z. B. auch über das Library
LiquidCrystal_PCF8574.h ansteuern. Das klappt bei mir auch.
Wenn es geht, warum muss das dann die andere Bibliothek sein??
Dann nimm doch die funktionierende Bibliothek und analysiere auf Sourcecode Ebene, was sie auf den Bus schickt. Dann brauchst du nur das gleiche schicken. Der Sourcecode sollte ja vorhanden sein.
Alternativ ein Scope mit I2C Analysator anschliessen. Das teilt dir genau mit, was alles gesendet werden muss.
Kein Blödsinn: Scope nehmen. SDA,SCL und GND verbinden. I2C Analysemodus einschalten. Einmal mit LyquidCristal hochfahren. Und alles steht im Scope.
Alternativ LiquidCristal Sourcecode nehmen. In der Senderoutine (die selbst wahrscheinlich Wire benutzt) die Sendebytes mit printf herausschreiben. Dann steht alles auf der Konsole.
https://www.mikrocontroller.net/articles/HD44780
Lesen.
Das Display hat ein Parallel Interface, der I2C Expander macht nur die Umsetzung serielles I2C auf Daten- und Steuerleitungen. Da müssen die richtigen Sequenzen ausgegeben werden, einfach ein ‚A‘ ausgeben reicht nicht.
https://www.mikrocontroller.net/articles/HD44780
Lesen.
Das Display hat ein Parallel Interface, der I2C Expander macht nur die
Umsetzung serielles I2C auf Daten- und Steuerleitungen. Da müssen die
richtigen Sequenzen ausgegeben werden, einfach ein ‚A‘ ausgeben reicht
nicht.
Ja, und von daher wäre es doch etwas einfaches, die funktionierende LyquidCristal zu nehmen, und Reverse Engineering zu betreiben.
Ich habe letztens erst so ein Display mit einen FPGA bedient, weiss also, was man für Codes hinschicken muss, und wo man welche Wartezeiten beachten muss.
Das ist schön, aber erstmal sollte dem TO klar werden warum es nicht so
einfach geht und sich die Hardware sowie Datenblatt des Displays dazu
ansehen.
Bei I2C muss man Instructions "maskieren", da ja keine "Hardware"-Pins für R/W, RS und Enable da sind. Das macht entweder der Portadapter oder das Display hat die Ansteuermöglichkeit I2C.
Im Beispiel wie der Enable-Impuls "maskiert" wird.
LiquidCrystal_I2Clcd(0x27,16,2);// I2C address 0x27, 16 column and 2 rows
4
5
voidsetup()
6
{
7
lcd.init();// initialize the lcd
8
lcd.backlight();
9
}
Das, was
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2
da macht, musst du herausfinden und selbst nachbasteln.
bei VSCode und Platformio markierst Du lcd und drückst F12, um in die Bibliothek zu gelangen. dort kannst Du dir ansehen, wie die eigentliche Initialisierung aussehen muss.
Also: Eine möglichkeit.
Du kannst auch mit Wire.write() nacheinander, meinethablen untereinder geschrieben, alle Bytes rausschicken, die dein LCD benötigt, BEVOR es in der Lage ist, ein "A" darzustellen.
oder eben komplett zu Fuß. Das kann man ja leicht abwandeln. UNterscheiden musst Du halt nur, ob du ein KOMMANDO oder DATEN schicken willst. Also zB <Cursor links> oder "HALLO".
Hier machen die das für einen STM32.
https://controllerstech.com/i2c-lcd-in-stm32/
Wie habe ich das bloß 2015 bei meinem ersten ernsthaften Arduino-Gerät gemacht? Das lief nicht auf Anhieb, weil unterschiedliche I2C-Boards im Umlauf sind. Klar ist auf jeden Fall, dass neben "Wire.h" auch die "LiquidCrystal_I2C.h" eingebunden werden muß. Soweit ich mich erinnere, muß die "LiquidCrystal_I2C.h" zum I2C-Board passen.
Es finden sich im Netz massenhaft Beispiele, aus denen man abmalen kann.
empfehle ich dir die Verwendung eines
Display ohne Portexpander. Dann hast du einen Chip weniger beteiligt,
was die Sache sehr vereinfacht.
Auch das muss initialisiert und bedient werden, dafür bindet man die "LiquidCrystal.h" ein. Finde ich irgendwie doof, weil das Display mehr Portleitungen belegt.
Eigentlich hatte ich mir gewünscht und auch erhofft, dass ich den Quellcode für ein einfaches, aber funktionierendes Beispiel bekomme. Und auf diesem wollte ich dann aufbauen und dieses erweitern.
Sieht aber so aus, als ob mein Wunsch nicht in Erfüllung geht und ich mich doch wesentlich eingehender damit beschäftigen muss.
Sieht aber so aus, als ob mein Wunsch nicht in Erfüllung geht und ich
mich doch wesentlich eingehender damit beschäftigen muss.
Wenn du dich endlich von Arduino trennen könntest und eine
richtige IDE verwenden würdest (z.B. Atollic Truestudio oder
STM CubeIDE) könnte dir leicht geholfen werden. Aber dazu
müsste "man" halt richtig programmieren können und nicht nur
ein paar "Libs" zusammen kopieren und nicht verstehen was
da eigentlich passiert. Nachdem du aber nicht den Anschein
erweckst dich vom oben Erwähntem lösen zu können mache ich
auch keine Anstalten dir was vorzuschlagen.
Eigentlich hatte ich mir gewünscht und auch erhofft, dass ich den
Quellcode für ein einfaches, aber funktionierendes Beispiel bekomme
Das Display wurde dazu konzipiert, an den Adress- und Datenbus eine klassischen 8 Bit Mikroprozessors angeschlossen zu werden. Dann wäre es relativ einfach einfach gewesen. Dann hättest du es im 8 Bit Modus verwenden können und sowohl die Initialisierungs-Befehle als auch die Buchstaben einfach 1:1 an das Display senden können.
Aber bei deiner Hardware muss der Bus (da nicht vorhanden) durch Software simuliert werden. Weil bei dir auch noch ein I²C Portexpander dazwischen hängt, wird es noch eine Nummer komplexer.
Ein
einfaches, aber funktionierendes Beispiel
kann es nicht geben. Eine funktionierende Bibliothek hast du.
Lies die Datenblätter der beiden Mikrochips. Probiere sie einzeln unabhängig voneinander aus. Solche Displays gibt es ohne Portexpander (mit paralleler Bus-Schnittstelle) zu kaufen. Die Portexpander kannst du mit ein paar LEDs und Schaltern ausprobieren. Erst wenn du mit beiden vertraut bist, solltest du sie miteinander kombinieren.
So eine Software baut man in Schichten eine nach der anderen auf, damit es einfacher zu verstehen ist.
Aber bei deiner Hardware muss der Bus (da nicht vorhanden) durch
Software simuliert werden. Weil bei dir auch noch ein I²C Portexpander
dazwischen hängt, wird es noch eine Nummer komplexer.
Nein, natürlich könnte er sein 1602 Display direkt an sein
Nucleo-L152RE Board hängen. "Bus" wäre sozusagen vorhanden,
aber auch mit diesem muss man erst mal umgehen (können). Ob
das aus der Arduino IDE überhaupt vorgesehen ist weiss ich
nicht, kann mir es nicht so recht vorstellen.
Ideal wäre es sich erst mal vom Nucleo-L152RE zu verabschieden
und ein gängiges Arduino Board zu verwenden, das ist alles
(fast) ganz einfach.
ein gängiges Arduino Board zu verwenden, das ist alles
(fast) ganz einfach.
Ich bin ziemlich sicher, den TO richtig verstanden zu haben: Er möchte ausdrücklich nicht die fertigen Arduino Bibliotheken verwenden, sondern es auf niedrigerer Ebene selbst programmieren.
Ich bin ziemlich sicher, den TO richtig verstanden zu haben:
Ich bin ziemlich sicher dass der TO zwar viel möchte, aber wenig
kann. Er muss noch viel lernen. Mich bringt meine Annahme dazu
wenn ich sehe wie er mit der Arduino IDE "arbeitet" und mit
existierenden Lösungen nichts zustande bringt. Siehe:
Ich möchte in der Arduino-IDE Zeichen über I2C zum Display schicken (im
Beispiel den Buchstaben "A".
Da ist der Weg sehr weit sich von fertigen Arduino Bibliotheken zu
trennen und auf eigenen Beinen zu stehen. Insbesondere dann wenn
es sich um einen Arduino-fremden Controller handelt. Auch wenn
es dazu (fast) fertige Lösungen gibt.
Harry L. (mysth) hat eine fertige Lösung für STM32 Controller
hier präsentiert, ich finde sie nur auf die Schnelle nicht.
Ich kann keinen Wunsch nach "Grundlagenarbeit" erkennen.
Ich denke, die Notwendigkeit haben wir ihm deutlich genug gesagt. Jetzt kommt es darauf an, was er daraus macht. Sprüche wie
"Ich bin ziemlich sicher dass der TO ... wenig kann."
wirken dabei eher kontraproduktiv. Lasst ihn die nächsten Schritte wagen, die er sich zutraut. Wenn ihr freundlich seid, wird er sich dabei weiter von euch beraten lassen.
Also mit Wire.h kommste bei einem I2C lCD nicht weit, du musst die besagte Library mit I2C Ansteuerung nehmen alles andere ist Mehrarbeit.
Beim STM gibt es im übrigen mehrere I2C Ports auch hier musste den richtigen aussuchen. Ich hatte das gleiche Problem.Zudem würde ich erst einen Portscanner aufspielen, damit kannst du im übrigen auch den I2C Port ausfindig machen.
Zudem würde ich erst
einen Portscanner aufspielen, damit kannst du im übrigen auch den I2C
Port ausfindig machen.
Der zeigt aber nur die Adresse des Portexpanders, der I²C auf parallel umwandelt, an; nicht das Display.
Mit dem Portexpander könnte man auch ein x-beliebiges anderes (paralleles) Display ansteuern.
Die funktioniert definitiv.
Kopiere dir raus, was du brauchst.
Ich hatte nämlich auch vor kurzem so eine Platine dran gelötet und das ausprobiert.
Nur mit wire.h geht das auch nicht.
Du musst schon noch das Display drin haben.
Wire.h schickt das raus, aber wo hin?
Dann noch gleich eine hinterher.
Wenn du ein Oled Display SSD1306 nehmen willst.
Hier auch noch eine Testdatei.
Die sind viel schöner.
Da steht jetzt nur der Text drin. Das war nur der Test, ob es klappt und bekomme ich alle Informationen angezeigt.
Da lohnt es sich auch, sich in die Bibliothek einzuarbeiten.
Sieht aber so aus, als ob mein Wunsch nicht in Erfüllung geht und ich
mich doch wesentlich eingehender damit beschäftigen muss.
Das Leben ist kein Wunschkonzert und Weihnachten ist noch ein bisschen hin.
Krieg den A.sch hoch und fang an. Oder kauf dir einen fertig passend programmierten µC mit Display, bei dem du dann mit dafür bezahlst, dass andere die Arbeit für dich machen. Ingenieurbüros, die diesen Job gerne übernehmen, gibt es genug, wenn du mit den passenden Scheinen winkst.
Jetzt musste doch "nur" die Reihenfolge raussuchen und mit wire.write ( oder was es da gibt) die Bytes nacheinander rausschicken.
Weil das eben niemand zu Fuß beim Arduino macht (warum auch?) gibt es das fertig in der besagten Bibliothek. Wenn Du nicht nehmen willst, musst du es eben zu Fuß machen. Niemand wird sich jetzt hinsetzen und das für dich tun.
Ganz tolle Sache, wenn man spielen will. Die Dinger brauchen im µC dermaßen viele Ressourcen, dass ernsthafte Anwendungen kaum noch machbar sind, hat mich an einem ATMega328 angeschissen.
Die sind viel schöner.
Vor allem sind sie bei starkem Umgebungslicht nicht mehr ablesbar und deren Lebensdauer beglückt auch nicht.
Ganz tolle Sache, wenn man spielen will. Die Dinger brauchen im µC
dermaßen viele Ressourcen, dass ernsthafte Anwendungen kaum noch machbar
sind, hat mich an einem ATMega328 angeschissen.
Wie das? Sobald die mit Daten beschickt sind, muss man sich nicht mehr drum kümmern, und beim Beschicken brauchen sie nicht mehr Ressourcen, als andere Monochromdisplays mit der jeweiligen Auflösung.
Zudem würde ich erst
einen Portscanner aufspielen, damit kannst du im übrigen auch den I2C
Port ausfindig machen.
Der zeigt aber nur die Adresse des Portexpanders, der I²C auf parallel
umwandelt, an; nicht das Display.
Mit dem Portexpander könnte man auch ein x-beliebiges anderes
(paralleles) Display ansteuern.
Das Display ist am Portexpander angeschlossen oder? Also wird mit dieser Adresse das LCD angesprochen oder? Das geht das über die sogenannte Liquid library mit I2C support.
Ich verstehe die Frage jetzt selber nicht die du mir damit gegeben hast.Wenn du aber meinst das es nicht so ist, dann bitte. Ich selber habe schon ziemlich viele von den LCD in der Schublade liegen und in gebrauch. Entweder über I2C oder Paralell.
Beides geht mit der entsprechenden Library.
Das Display ist am Portexpander angeschlossen oder? Also wird mit dieser
Adresse das LCD angesprochen oder? Das geht das über die sogenannte
Liquid library mit I2C support.
Jups.
Ich verstehe die Frage jetzt selber nicht die du mir damit gegeben
hast.Wenn du aber meinst das es nicht so ist, dann bitte. Ich selber
habe schon ziemlich viele von den LCD in der Schublade liegen und in
gebrauch. Entweder über I2C oder Paralell.
Beides geht mit der entsprechenden Library.
Das verstehe ich nun wieder nicht.
Man ändert mit dem Portexpander einfach nur die Schnittstelle.
Um die Konfiguration und "Ansteuerung" (z.B. Löschen des Displays o. dergl.) muss man sich weiterhin kümmern bzw. das übernimmt die LCD-Library.
Die könnte vermutlich auch mit einem anderen Schnittstellentreiber (Software wie die wire.h) ein Display ansteuern.
Klassischer Fall eine Abstraktionsebene.
Ganz tolle Sache, wenn man spielen will. Die Dinger brauchen im µC
dermaßen viele Ressourcen, dass ernsthafte Anwendungen kaum noch machbar
sind, hat mich an einem ATMega328 angeschissen.
Dann hast du vielleicht eine unpassende Bibliothek verwendet. Ein Font braucht etwa 500 Byte Flash, und wenige 100 Bytes für den Code. Pufferspeicher im RAM ist gar keiner nötig.
Für gemischte Text/Grafik Ausgabe kann ich dir meine Klasse als Alternative zu der deutlich größeren von Adafruit anbieten. Ihr Speicherbedarf passt zum ATmega328.
http://stefanfrings.de/arduino_oled/
Wie das? Sobald die mit Daten beschickt sind, muss man sich nicht mehr
drum kümmern, und beim Beschicken brauchen sie nicht mehr Ressourcen,
als andere Monochromdisplays mit der jeweiligen Auflösung.
Eben, der TO will ein monochromes 2x16 7-Segment Display mit integriertem Zeichengenerator ansteuern (32 Byte Daten), du redest von einem farbigen 128 x 64 Pixel Graphikdisplay mit lupenverdächtiger Schriftgröße.
Das Display ist am Portexpander angeschlossen oder? Also wird mit dieser
Adresse das LCD angesprochen oder?
Jein, über I2C wird genau der Portexpander angeschlossen und darüber muss man dann die 4-Bit Parallelschnittstelle mit Control-Port vom Display per Bit-Banging emulieren. Das LCD besitzt keine Adresse, sondern nur seinen Parallelport.
Also wenn du das über wire.h machen willst, dann musst du die Adresse vom Portexpander wissen. Die einzelnen Pins vom Portexpander zum LCD must du dann auch wissen, und welches Bit was macht muss du auch wissen. Diese Kombination von Init mit der Initalisierung musst du natürlich von hand dann nach und nach auf den Portexpander schieben, damit das Display weiß wie es funktionieren soll.
Ein blick in die LiquidCrystal_I2C.cpp und in die LiquidCrystal_I2C.h offenbart das Geheimnis
Also wenn du das über wire.h machen willst, dann musst du die Adresse
vom Portexpander wissen.
Bei der Nutzung mit anderen Libraries oder eigenen Funktionen ist das nicht anders.
Für einen PCF8574 gibt es 8 verschiedene Möglichkeiten, die Adresse zu konfigurieren. Die in der SW angesprochene Adresse muss zu der Beschaltung auf dem I2C-Board passen.
Also wenn du das über wire.h machen willst, dann musst du die Adresse
vom Portexpander wissen.
Bei der Nutzung mit anderen Libraries oder eigenen Funktionen ist das
nicht anders.
Für einen PCF8574 gibt es 8 verschiedene Möglichkeiten, die Adresse zu
konfigurieren. Die in der SW angesprochene Adresse muss zu der
Beschaltung auf dem I2C-Board passen.
Ich glaube nicht das du mir das erklären mußt. Siehe Post weiter oben. Ich habe Erfahrung mit den I2C Lcd Expander. Hatte ein von Pollin und musste die Library anpassen.
Für gemischte Text/Grafik Ausgabe kann ich dir meine Klasse als
Alternative zu der deutlich größeren von Adafruit anbieten. Ihr
Speicherbedarf passt zum ATmega328.
http://stefanfrings.de/arduino_oled/
Hallo Stefan!
Neuer Name?
Werde mir deinen ZIP auch ansehen. Danke dafür!
Für alle anderen hier, die auf mich wegen des Displays losgegangen sind. Das war nur ein Vorschlag. In allen Büchern und Tutorials werden diese, höchstens zweizeilige, LCD Displays gezeigt. Diese OLEDs sind günstig, können viel mehr anzeigen und benutzen I²C.
Wenn der TO möchte, kann er das benutzen.
Zuerst hatte ich eine funktionierende Datei geschickt, die sein Display funktionieren lässt. Das andere war nur ein Angebot, auch im eine andere Richtung zu schauen.
Viel wichtiger, beides funktioniert definitiv.
Und Ressourcenverbrauch, klar, wenn man die Adafruit nimmt. Aber das ist eine geänderte lib.
Für alle anderen hier, die auf mich wegen des Displays losgegangen sind.
Tut mir leid, damit kann ich nicht dienen.
Erfülle aber gerne deine Erwartungshaltung.
Mir scheint es recht egal zu sein, ob man mit einem Opel oder einem VW zum Supermarkt fährt. Es wäre allerdings gut, wenn man das Fahrzeug bedienen kann und darf.
Gut, für ein Display braucht man keinen Führerschein, aber eben doch die nötigen Fähigkeiten.
Soweit bisher ersichtlich, möchte der TO keine weitere Lib zwischen Display und Wire, sondern diese Schicht selber bauen. Leider scheint dabei eine Überforderung aufgetreten zu sein....
Meinst du nicht, dass das bei einem OLED um Größenordnungen komplexer wird?
Also noch mehr Überforderung.
Zudem halten die billigen LCD durchaus eine Generation durch.
Ein OLED kann nach 1/2 Jahr schon halb blind sein.
Soweit bisher ersichtlich, möchte der TO keine weitere Lib zwischen
Display und Wire, sondern diese Schicht selber bauen. Leider scheint
dabei eine Überforderung aufgetreten zu sein....
Das stand nicht in seinem Eingangspost. Irgendwer, ich schaue jetzt nicht nach, hat das so interpretiert und ich sehe es nicht so. Außerdem hat der TO sich nicht dagegen geäußert.
Trotzdem kann er anhand dieser funktionierenden Beispiele lernen und dann selbst seine Lib schreiben, wenn man will.
Kann natürlich auch an Hand vom Datenblatt alles selbst raus finden. Aber da er schon bei wire nicht weiter wusste, wird das schwer.
Soweit bisher ersichtlich, möchte der TO keine weitere Lib zwischen
Display und Wire, sondern diese Schicht selber bauen. Leider scheint
dabei eine Überforderung aufgetreten zu sein....
Das stand nicht in seinem Eingangspost. Irgendwer, ich schaue jetzt
nicht nach, hat das so interpretiert und ich sehe es nicht so. Außerdem
hat der TO sich nicht dagegen geäußert.
Zudem halten die billigen LCD durchaus eine Generation durch.
Ein OLED kann nach 1/2 Jahr schon halb blind sein.
Ich habe jetzt eines von den großen Displays (2,42") drei Tage, also so um die 70 Stunden durchlaufen lassen und es funktioniert noch.
Generationen benutzt du vielleicht (ich auch; mein Firmentelefon wurde jetzt nach 8 Jahren ausgetauscht, weil der Akku kaputt ist), aber in der Regel ist nach ein paar Jahren doch Schluss.
Und selbst wenn, dann bestellt er gleich zwei und die halten dann zusammen eine Generation.
Aber nochmal, es war nur ein Angebot, dass es da mehr gibt, als die in den Büchern beschriebenen Displays. Wenn man sowieso auf I²C gehen will.
P.S.: Wenn jemand diese Dinger nehmen will, da muss man ein bisschen was umbauen.
Ich habe jetzt eines von den großen Displays (2,42") drei Tage, also so
um die 70 Stunden durchlaufen lassen und es funktioniert noch.
....
dann bestellt er gleich zwei und die halten dann
zusammen eine Generation.
Ist es! Da habe ich wohl drüber gescrollt.
Asche auf mein Haupt.
Teilweise lese ich auf dem Mobiltelefon. Vielleicht hatte ich es deshalb überlesen.
Dann sind meine Beiträge sicher nutzlos für den TO.
Tut mir leid, den Faden hier verbogen zu haben.
Hahaha! (Bin ja auch kein Ing.)
Aber wo ich dich hier so gerade dran habe. Weißt du noch, vor Jahren, wie wir hier Arduino verteidigen mussten?
Da hat sich in meiner zeitweise Abwesenheit einiges getan.
Ich habe jetzt eines von den großen Displays (2,42") drei Tage, also so
um die 70 Stunden durchlaufen lassen und es funktioniert noch.
Doch schon so lange?
Bei OLED geht es, genauso wie bei LEDs, nicht um funktioniert/funktioniert nicht, sondern um die Abnahme des Wirkungsgrades mit der Betriebszeit. Meist wird die Lebensdauer als die Halbwertszeit der Leuchtdichte definiert.
LG gibt für seine neusten OLED Panele eine Lebensdauer von 100000 Stunden an. Bin gespannt, was dein Display nach so einer Betriebsstundenzahl noch so von sich gibt. Berichte bitte mal.
LG gibt für seine neusten OLED Panele eine Lebensdauer von 100000
Stunden an. Bin gespannt, was dein Display nach so einer
Betriebsstundenzahl noch so von sich gibt. Berichte bitte mal.
Das wären ~ 11 Jahre. Bis dahin bin ich ganz sicher tot. Wenn ich diese Jahr überhaupt überlebe ...
Klasse Stefan!
Die werden mir sehr weiter helfen. Vor allem das zweite, das wird wohl 100% zu den billigen Dingern passen.
Da werde ich mich in Zukunft sehr genau mit befassen.
Und was die Zeiten anbetrifft. Wenn's kaputt ist, kommt ein neues dran.
Stefan, ich lebe schon seit 1,5 Jahren auf Kredit. Im Moment geht es mir auch nicht so gut. Morgen erfahre ich was das MRT sagt. Ich muss nichts mehr für eine ferne Zukunft machen. Obwohl ich so weiter lebe (so gut es halt geht), als wäre das Ende in normaler Entfernung (aber was ist schon noch normal, nach den Spritzen; kippen doch alle um), so weiß ich was die Statistik sagt.
Ich nehme die Chemo jeden Tag und werde mich hüten eine Tablette zu vergessen, trotzdem ist das keine Garantie.
Mein Leben lang habe ich wie irre gearbeitet (arbeiten bin ich immer noch), für mich das Wenigste ausgegeben. Scheiß auf so ein doofes Display. So wie ich die Umwelt geschont habe, schon seit meiner Jugend, da kann ich im Zweifel so ein Display austauschen.
Ja, auf jeden Fall!
Habe das gerade kurz angesehen.
Kann ich die Adresse ändern?
1
Slave address bit (SA0)
2
SSD1306 has to recognize the slave address before transmitting or receiving any information by the
3
I
4
2
5
C-bus. The device will respond to the slave address following by the slave address bit (“SA0” bit)
6
and the read/write select bit (“R/W#” bit) with the following byte format,
7
b7 b6 b5 b4 b3 b2 b1 b0
8
0 1 1 1 1 0 SA0 R/W#
9
“SA0” bit provides an extension bit for the slave address. Either “0111100” or “0111101”, can be
10
selected as the slave address of SSD1306. D/C# pin acts as SA0 for slave address selection.
11
“R/W#” bit is used to determine the operation mode of the I2
12
C-bus interface. R/W#=1, it is in read
13
mode. R/W#=0, it is in write mode.
Angenommen ich will zwei Displays anschließen, die unterschiedliche Daten ausgeben.
Ah, hab gerade gelesen, dann muss man die Adresse wohl erst ins Data Command Register schreiben.
Hast du da was fertig?
Danke erstmal für die Datenblätter!
Angenommen ich will zwei Displays anschließen,
die unterschiedliche Daten ausgeben.
Dann musst du bei einem die SA0 Leitung (= D/C#) auf High setzen, und beim anderen auf Low. Fraglich ist, auf welchen Modulen die dazu nötigen Lötbrücken oder Pins erreichbar sind.
Ein paar Beiträge höher habe ich ein Bild von einem 2,42" Display eingestellt. Das hat auch SPI. Man muss für I²C ein wenig was ändern.
Steht aber alles in Stefans Beitrag.