Forum: Mikrocontroller und Digitale Elektronik SSD1305 mit STM32


von David S. (david_s577)


Lesenswert?

Guten Abend

Ich habe ein Display mit SSD1305-Controller 
(https://www.waveshare.com/wiki/2.23inch_OLED_HAT) gekauft, und würde 
dieses gerne mit einem STM32-Mikrocontrollerboard (STM32L432KC) 
ansteuern.
Ich hatte ursprünglich gelesen, das dieser Controller kompatibel ist mit 
dem SSD1306-Controller, und sich die beiden bloss minim unterscheiden. 
Allerdings erhalte ich mit der Library 
(https://github.com/afiskon/stm32-ssd1306/tree/master/ssd1306) bloss 
Pixelsalat.

Weiss jemand von euch ob es für diesen Controller eine funktionierende 
Library gibt oder kann mir helfen die bestehende Library anzupassen?

Vielen Dank für eure Hilfe
David

: Verschoben durch Moderator
von Sigma (Gast)


Lesenswert?

Kannst du Bilder vom Pixelsalat machen und sagen wie es eigentlich 
aussehen soll?

von David S. (david_s577)


Angehängte Dateien:

Lesenswert?

Das erste Bild (Display_after_Init.jpg) zeigt das Display, nachdem es 
mit der Initialisietungsfunktion der Library initialisiert wurde. Dabei 
wird der Befehl clear ausgerufen, das Display sollte also eigentlich 
schwarz bleiben.

Im zweiten Bild (Display_print_test.jpg) wurde mit dem Befehl put string 
eigentlich der Text "test" in der Schriftgrösse 7x11 ausgegeben. Wie man 
sieht bleiben immer noch dieselben Pixel aktiv wie nach der 
Initialisierung, eifach das weitere dazugekommen sind.

Zur Kommunikation mit dem Display benutze ich übrigens I2C.

Gruss

von Kevin M. (arduinolover)


Lesenswert?

David S. schrieb:
> Ich hatte ursprünglich gelesen, das dieser Controller kompatibel ist mit
> dem SSD1306-Controller

Da es unterschiedliche Controller sind würde ich da mal nicht so 
blauäugig davon ausgehen. Wenn ich mir alleine die Command-Table in den 
Datenblättern ansehe möchte ich doch stark bezweifeln das die so ohne 
weiteres kompatibel sind.

https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf
https://cdn-shop.adafruit.com/datasheets/SSD1305.pdf

Adafruit hat mit Sicherheit eine passende Lib, die wird aber vermutlich 
für Arduino sein. Da kannst du dir mit sicherheit einiges raus ziehen, 
der STM läuft aber auch mir C++ 😉. Die I2C Treiber wirst du anpassen 
müssen.

von Sigma (Gast)


Lesenswert?

David S. schrieb:
> Das erste Bild (Display_after_Init.jpg) zeigt das Display, nachdem
> es mit der Initialisietungsfunktion der Library initialisiert wurde.
> Dabei wird der Befehl clear ausgerufen, das Display sollte also
> eigentlich schwarz bleiben.
> Im zweiten Bild (Display_print_test.jpg) wurde mit dem Befehl put string
> eigentlich der Text "test" in der Schriftgrösse 7x11 ausgegeben. Wie man
> sieht bleiben immer noch dieselben Pixel aktiv wie nach der
> Initialisierung, eifach das weitere dazugekommen sind.
> Zur Kommunikation mit dem Display benutze ich übrigens I2C.
> Gruss

Sieht seltsam aus. Hast du noch ein zweites Display zum testen? Display 
und Controller arbeiten eigentlich monochrom, aber ich sehe da 
Graustufen. Eventuell ist das Display kaputt, was bei dem dünnen Glas 
und den flexiblen Leiterbahnen leicht passieren kann.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Wollte mal eins kaufen, habe aber nach Rezensionen u.a. bei Amazon & Co 
die Finger von diesen Boards gelassen ...

von J. S. (jojos)


Lesenswert?

Hast du in dem conf.h die  Grösse angepasst?

Also das ssd1306_conf_template.h nach ssd1306_conf.h kopieren und darin 
Höhe und Breite anpassen.
Default ist sonst 128 x 64.

: Bearbeitet durch User
von David S. (david_s577)


Lesenswert?

Sigma schrieb:
> Sieht seltsam aus. Hast du noch ein zweites Display zum testen? Display
> und Controller arbeiten eigentlich monochrom, aber ich sehe da
> Graustufen. Eventuell ist das Display kaputt, was bei dem dünnen Glas
> und den flexiblen Leiterbahnen leicht passieren kann.

Nein, ich habe leider kein zweites Display da..


J. S. schrieb:
> Hast du in dem conf.h die  Grösse angepasst?
>
> Also das ssd1306_conf_template.h nach ssd1306_conf.h kopieren und darin
> Höhe und Breite anpassen.
> Default ist sonst 128 x 64.

Ich habe im File SSD1306.h die Displaygrösse angepasst, in den Zeilen
1
/* SSD1306 settings */
2
/* SSD1306 width in pixels */
3
#ifndef SSD1306_WIDTH
4
#define SSD1306_WIDTH            128
5
#endif
6
/* SSD1306 LCD height in pixels */
7
#ifndef SSD1306_HEIGHT
8
#define SSD1306_HEIGHT           32
9
#endif

Welche Library verwendest du wo es ein ssd1306_conf_template.h File 
gibt?

von J. S. (jojos)


Lesenswert?

keine, die ist aus dem Link den du angegeben hast.

Das passt aber nicht, der Compiler sollte meckern wenn es keine 
ssd1306_conf.h gibt. Und wenn du die hast, dann werden da die Konstanten 
gesetzt und in ssd1306.h ignoriert durch die #ifdef.

von David S. (david_s577)


Lesenswert?

Kevin M. schrieb:
> David S. schrieb:
>> Ich hatte ursprünglich gelesen, das dieser Controller kompatibel ist mit
>> dem SSD1306-Controller
>
> Da es unterschiedliche Controller sind würde ich da mal nicht so
> blauäugig davon ausgehen. Wenn ich mir alleine die Command-Table in den
> Datenblättern ansehe möchte ich doch stark bezweifeln das die so ohne
> weiteres kompatibel sind.
>
> https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf
> https://cdn-shop.adafruit.com/datasheets/SSD1305.pdf
>
> Adafruit hat mit Sicherheit eine passende Lib, die wird aber vermutlich
> für Arduino sein. Da kannst du dir mit sicherheit einiges raus ziehen,
> der STM läuft aber auch mir C++ 😉. Die I2C Treiber wirst du anpassen
> müssen.

Ja, ich war da wohl etwas blauäugig das ich geglaubt habe dass das 
Display einfach mit der Library kompatibel sein wird..

Was würde das konkret bedeuten, das anzupassen? Müsste ich dafür in 
Zeilen wie
1
SSD1306_WRITECOMMAND(0xAE); //display off
2
  SSD1306_WRITECOMMAND(0x20); //Set Memory Addressing Mode   
3
  SSD1306_WRITECOMMAND(0x10);
4
  SSD1306_WRITECOMMAND(0xB0);
Die Befehle (zB 0xAE) ersetzen gemäss den Tabelen "COMMAND TABLE" im 
Datenblatt ersetzen?

von J. S. (jojos)


Lesenswert?

Oder du hast das include für die conf auskommentiert, das war aber 
sicherlich nicht so gedacht.

Man baut ein repo so das der Quellcode nicht geändert werden muss und 
die config aus dem Projekt kommt. Sonst ist die Quelle bei einer 
Änderung dirty und ein git pull macht Ärger.

von pegel (Gast)


Lesenswert?

https://www.waveshare.com/w/upload/c/c5/2.23inch-OLED-HAT-Code.7z

steht in deinem ersten link als wget ...

Da ist direkt ein Beispiel für SSD1305 und einem F10x drin.

von Sigma (Gast)


Lesenswert?

David S. schrieb:
> Sigma schrieb:
>
>> Sieht seltsam aus. Hast du noch ein zweites Display zum testen? Display
>> und Controller arbeiten eigentlich monochrom, aber ich sehe da
>> Graustufen. Eventuell ist das Display kaputt, was bei dem dünnen Glas
>> und den flexiblen Leiterbahnen leicht passieren kann.
>
> Nein, ich habe leider kein zweites Display da..


Dann bestell noch eins oder reklamier das. Ich hatte noch nicht exakt 
dieses OLED in der Hand, aber die verschiedenen Helligkeitsstufen deuten 
stark auf einen defekt hin.

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.