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
Gast
#6201084
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.
Gast
#6201183
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.
John Doe schrieb: > Die Init-Sequenz und die Datensendesequenz reichen. Init-Sequenz:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
Datensendesequenz:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
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.
Gast
#6201320
Nach Überfliegen sieht die Initialisierung fast brauchbar aus. Nur schreibst Du von vertikaler Adressierung, initialisierst aber horizontale:
1 | |
Ausserdem setzt Du Config für Page-Adressing, obwohl Du vertikale haben willst und horizontale konfigurierst, die solltest Du weglassen:
1 | |
2 | |
Gast
#6201330
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.
Gast
#6201427
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.
Wenn du den Vertical Address Mode benutzen willst, musst du ihn einschalten. Nach dem Reset ist erstmal der Page Adressing Mode aktiv.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
Gast
#6201520
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
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.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.

