Hi Leute,
Hatte jemand schon ein OLED SSD1306 erfolgreich zum Laufen bekommen? Ich
versuche gerade, eine etwas optimierte graphische Library (am STM8
laufend) für das Display zu schreiben - also nicht das in den Tutorials
übliche Warten auf Flags, sondern reiner Interruptbetrieb (Wieso ich
keine fertige Lib nehme wie ug8lib? Weil der Weg das Ziel ist). Was mir
Kopfzerbrechen bereitet, ist die Auswahl der Adressierungsmodi. Dem
Datenblatt nach - https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf -
sollte dafür das Kommando 0x20 + 0x0[0...3] dienen. Diesen Wert
übermittle ich per SPI, in diesem Fall 0x20 & 0x01. (Siehe erstes Bild:
Initialisierungssequenz und gleich danach der Befehl). Das sollte dem
Datenblatt nach senkrechte Adressierung sein, das Display verbleibt aber
in Page Adressing Mode - das Testmuster (Bild 2) füllt eine Zeile und
fängt am Anfang der Zeile wieder an. Die Frage ist: Ist das Display hin?
Es stammt zwar aus der E-Bucht, aber dass NUR dieser eine Befehl nicht
geht ist schon arg ungewöhnlich. Manche der anderen Befehle, z.B. set
page adress funktionieren (hab aber noch nicht alle ausprobiert). Hatte
das schon jemand? Ist es ein gewöhnliches Problem oder hat ausgerechnet
bei mir ein hochenergetisches Neutrino genau den einen Transistor
zerschossen, der im OLED-Chip für diesen Befehl zuständig war?
MfG,
coldlogic
Viktor B. schrieb:> Hi Leute,> Hatte jemand schon ein OLED SSD1306 erfolgreich zum Laufen bekommen?
Nein, garantiert noch nicht...
> sollte dafür das Kommando 0x20 + 0x0[0...3] dienen. Diesen Wert> übermittle ich per SPI, in diesem Fall 0x20 & 0x01. (Siehe erstes Bild:> Initialisierungssequenz und gleich danach der Befehl). Das sollte dem> Datenblatt nach senkrechte Adressierung sein, das Display verbleibt aber> in Page Adressing Mode - das Testmuster (Bild 2) füllt eine Zeile und> fängt am Anfang der Zeile wieder an. Die Frage ist: Ist das Display hin?
Poste lieber den Quellcode. Oder soll jetzt jeder aus der Grafik sich
die Befehle zurechtfrickeln?
Hast Du Befehl 21h (Set Column Address) und 22h (Set Page Address) ans
Display geschickt?
John Doe schrieb:> Viktor B. schrieb:>> Hi Leute,>> Hatte jemand schon ein OLED SSD1306 erfolgreich zum Laufen bekommen?>> Nein, garantiert noch nicht...
Dann freut es mich, der Erste zu sein! /s
John Doe schrieb:> Poste lieber den Quellcode. Oder soll jetzt jeder aus der Grafik sich> die Befehle zurechtfrickeln?
Mit blauen Kästchen sind die Werte unterlegt, die an dem SPI-Bus vom
Logic Analyser erkannt werden. Da muss man sich nichts zurechtfrickeln.
Soll ich den Quelltext meiner main.c, SPI.c oder der SSD1306.c anhängen?
Alle wäre ein wenig zu viel, fürchte ich.
> Hast Du Befehl 21h (Set Column Address) und 22h (Set Page Address) ans> Display geschickt?
Ja, diese funktionieren.
Viktor B. schrieb:> Mit blauen Kästchen sind die Werte unterlegt, die an dem SPI-Bus vom> Logic Analyser erkannt werden. Da muss man sich nichts zurechtfrickeln.> Soll ich den Quelltext meiner main.c, SPI.c oder der SSD1306.c anhängen?> Alle wäre ein wenig zu viel, fürchte ich.
Die Init-Sequenz und die Datensendesequenz reichen.
Nachträgliche Berichtigung: Die Befehle 21h (Set Column Address) und 22h
(Set Page Address) funktionieren NICHT. Hab mich vertan und nicht
gesehen, dass sie exklusiv für vertikale bzw horizontale Adressierung
sind. Das Programm mit den oben genannten Befehlen produziert schöne
Muster, das wärs aber auch. Auf dem Logic Analyser sieht alles richtig
aus. Achja, durch das Wackeln an den Kontakten lässt sich das Display
übrigens auch aus dem Tritt bringen, da muss ich auch aufpassen.
Achja, meine Frage nach 21h und 22h war deswegen, weil der Reset-Default
ein 128x64-Display konfiguriert.
Wenn Du was anderes hast, musst Du die Befehle entsprechend ausführen.
Die beiden Befehle (0x00, 0x10) wurden weggelassen, das Ergebnis hat
sich nicht geändert.
Und ja, das Display ist 128x64. Hab ich vergessen zu erwähnen, sorry.
So, habe mal genau Deine oben gepostete (nicht ganz korrekte)
Initialisierung auf einen STM32F407 mit 128x64-SSD1306-OLED geschmissen.
Funktioniert soweit einwandfrei, Unterschied ist nur, dass das bei mir
so spiegelverkehrt erscheint und dunkler ist mit Deiner Config.
Check am besten mal Deine Verkabelung. Du schreibst ja, dass Wackeln ein
Problem ist. An der Config liegt es nicht.
Erwin E. schrieb:> Wenn du den Vertical Address Mode benutzen willst, musst du ihn> einschalten. Nach dem Reset ist erstmal der Page Adressing Mode aktiv.>>
1
>0x200x01//set vertical adressing mode
2
>
3
>0x21//Set Column Adress
4
>0//Column Start Address = 0
5
>127//Column End Address = 127
6
>
7
>0x22//Set Page Address
8
>0//Page Start Address = 0
9
>3//3 = 4 Pages (128x32), 7 = 8 Pages (128x64)
10
>
Das Thema hatten wir schon abgehakt. Daran liegt es bei ihm nicht.
Die Verbindungen von dem Display hab ich überprüft, es sind nur zwei
Stecker: einmal zur Platine und einmal zum Logic Analyzer. Nach etwas
Rumexperimentieren ist nun das Display unbenutzbar geworden: eine Hälfte
lässt sich nicht mehr ansteuern, sieht aus als ob das Mapping von RAM zu
den Segmenten flöten gegangen ist. Das ist jetzt ein etwas größeres
Problem als das nicht verfügbare Horizontal Address Mode. Ein Reset
bringt nichts, ich versuch noch was dran zu machen.