Habe hier mit der Darstellung auf einem OLED Display Probleme, wenn ich es mit einer Demo-App ssd13ß6_128x64_i2c (Beispielprogramm aus der AdaFruit SSD1306 Library) auf einem ESP32-WROOM Board laufen lasse. Mit einem STM32F103 (Blue Pill) habe ich die Funktion parallel dazu heute noch mal verifiziert. Das allerdings mit einem anderen Treiber. Auch schon 2k2 Pullup Widerstände an SCLK und SDA probiert. 3,3V liegen an Vcc des Displays an. Sind aus Versehen zwei gleiche Anhänge hochgeladen worden. Weiß nicht, wie und ob man die doppelten löschen kann.
:
Bearbeitet durch User
Mache mal einen Gegentest mit http://stefanfrings.de/arduino_oled/index.html Wenn es damit geht, ist die Hardware wohl in Ordnung. Ich denke, diese Erkenntnis wäre hilfreich, auch wenn du weiterhin die Adafruit Bibliothek nutzen willst.
Steve van de Grens schrieb: > Mache mal einen Gegentest mit > http://stefanfrings.de/arduino_oled/index.html > > Wenn es damit geht, ist die Hardware wohl in Ordnung. Ich denke, diese > Erkenntnis wäre hilfreich, auch wenn du weiterhin die Adafruit > Bibliothek nutzen willst. Abgesehen davon, daß es bei der jüngsten Version zeilenweise einen Versatz gibt, so daß es kein bündiges Bild ergibt, konnte ich eine ältere Version von OLED.zip finden, die ich früher mal gespeichert hatte. Da mußte ich noch in der ::display() Methode die 0x00 in 0x02 ändern und dann ergab sich ein vernünftiges Bild. In der Demo wird allerdings bei der Demonstration des horizontalen Scrollings der unterstrichene "Hello" Text ein paar Pixel zu hoch abgeschnitten und es scrollt dann noch ein bißchen "Müll" mit, aber im Prinzip kann ich das evtl. sogar nutzen oder ich muß den Code in C überführen. Die nachfolgende Version von ::display benutze ich jetzt:
1 | void OLED::display() |
2 | { |
3 | size_t index = 0; |
4 | for (uint_fast8_t page = 0; page < pages; page++) |
5 | { |
6 | // Set memory address to fill |
7 | i2c.beginTransmission(i2c_address); |
8 | i2c.write(0x00); // command |
9 | if (isSH1106) |
10 | { |
11 | i2c.write(0xB0 + page); // set page |
12 | i2c.write(0x02); // lower columns address =0 << hier 02 statt 00 |
13 | i2c.write(0x10); // upper columns address =0 |
14 | } |
15 | else |
16 | { |
17 | i2c.write(0xB0 + page); // set page |
18 | i2c.write(0x21); // column address |
19 | i2c.write(0x00); // first column =0 |
20 | i2c.write(width - 1); // last column |
21 | } |
22 | i2c.endTransmission(); |
23 | |
24 | // send one page of buffer to the display |
25 | i2c.beginTransmission(i2c_address); |
26 | i2c.write(0x40); // data |
27 | for (uint_fast8_t column = 0; column < width; column++) |
28 | { |
29 | // Split the transaction into chunks of 32 bytes because that is a limitation of Arduino |
30 | if (column>0 && (column % 31 == 0) ) |
31 | { |
32 | i2c.endTransmission(); |
33 | i2c.beginTransmission(i2c_address); |
34 | i2c.write(0x40); // data |
35 | } |
36 | |
37 | i2c.write(buffer[index++]); |
38 | } |
39 | i2c.endTransmission(); |
40 | yield(); // to avoid that the watchdog triggers |
41 | } |
42 | } |
:
Bearbeitet durch User
Na vielleicht funktionierte es nicht weil es ein SH1106 ist statt SD1306.
Das Problem ist, dass es die Displays nicht nur mit unterschiedlicher Anzahl von Zeilen und Spalten gibt, sondern dass deren Zuordnung zum steuernden Chip (befindet sich auf dem Flachkabel) manchmal vom Standard abweicht. Wenn man das dann auch noch ohne passendes Datenblatt gekauft hat, ist die "trial-and-error" Methode angesagt. Der Test hat dennoch gebracht, was ich beabsichtigt hatte. Du weißt nun, dass die Hardware funktionsfähig ist. Die Fehlersuche beschränkt sich damit auf die Software.
J. S. schrieb: > Na vielleicht funktionierte es nicht weil es ein SH1106 ist statt > SD1306. Das war's vermutlich. Hatte mich nur irritieren lassen, da ich in einem früheren Projekt (STM32) ein Paket benutzt hatte, das ssd1306.c hieß (* original author: Tilen Majerle<tilen@xxxxx.eu> * modification for STM32f10x: Alexander Lutsai<xxlyra@xxxxx>) Allerdings scrollt da immer noch ein Streifen im oberen Bereich während die Adafruit Demo läuft. Der stammt von der zuvor geflashten OLED app (stefanfrings.de), weil der flash gerade in dem Moment passierte, als die App den Scrollmode gesetzt hatte. Die Adafruit Demo setzt den Modus offenbar nicht zurück.
Horizontal Scrollen ist eh blöd, würde ich auf solchen Displays nie ernsthaft benutzen.
Steve van de Grens schrieb: > Horizontal Scrollen ist eh blöd, würde ich auf solchen Displays nie > ernsthaft benutzen. Da hast Du völlig recht. Würde ich auch nicht. Aber die Demo macht's halt und es zeigt dann auch wieder, daß die Adafruit SH1106-Demoapp das Display nicht vollständig und richtig initialisiert.
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.