Forum: Mikrocontroller und Digitale Elektronik Ist mein SSD1306 OLED defekt?


von int 21h (Gast)


Lesenswert?

Hallo,

ich hatte mir vor kurzem erst ein OLED (0.96 Zoll - 126px * 64px) aus 
China zugelegt.
Darauf habe ich einfach mal zum testen das OLED Sketch von Adafruit für 
den Arduino Uno drauf geladen, dass auch ohne Einschränkungen 
funktioniert hat.
Mein nächstes Ziel war es ein eigenes Assembler Programm zum Ansteuern 
des Displays zu schreiben, was ich bis heute nicht hinbekommen hatte 
trotz der Hilfe hier im Forum.
Nun habe ich heute mal aus Laune wieder das Arduino Uno OLED Sketch 
drauf geladen, aber es hat nicht funktioniert.
An der Schaltung hatte sich nichts verändert, alles blieb beim alten.
Nun zu meiner Frage, kann das OLED durch falsche Assembler Anweisungen 
kaputt gegangen sein (z.B. weil ich nicht an das Bitrate Register 
gedacht hatte)?

Ich bedanke mich schon mal :D

von Stefan F. (Gast)


Lesenswert?

Vielleicht hast du dem COB eine elektrostatische Ladung verpasst.
oder er hat durch zu viel Bewegung den Kontakt zum Kabel verloren.
Oder du hast versehentlich den Ausgang der Ladungspumpe kurzgeschlossen.

von pegel (Gast)


Lesenswert?

int 21h schrieb:
> ein OLED

Nur eins? Normal kauft man doch mehr davon zum spielen.

von Willi S. (ws1955)


Lesenswert?

Zum Kern der Frage:
Nein, durch Software lässt sich dieses Modul nicht zerstören.

Steinalte Weißheit:
Wer den Fehler nicht findet, sucht an der falschen Stelle...

: Bearbeitet durch User
von M. K. (sylaina)


Lesenswert?

int 21h schrieb:
> An der Schaltung hatte sich nichts verändert, alles blieb beim alten.

Wie genau sieht die denn aus? Hast du den I2C richtig eingestellt, 
stimmt die Adresse, sind Pullups an SDA/SCK vorhanden? Lässt du das 
Display auch aktualisieren (display()-Funktion wird benutzt? ;))?

von int 21h (Gast)


Lesenswert?

Stefanus F. schrieb:
> Vielleicht hast du dem COB eine elektrostatische Ladung verpasst.

Was ist ein COB?

Stefanus F. schrieb:
> Oder du hast versehentlich den Ausgang der Ladungspumpe kurzgeschlossen.

Ladungspumpe kurzgeschlossen?
Ist das ein Bauteil am OLED oder an der Schaltung?

pegel schrieb:
> int 21h schrieb:
> ein OLED
>
> Nur eins? Normal kauft man doch mehr davon zum spielen.

Ich habe mir jetzt mal 3 weitere Nachbestellt, aber wird eine ganz Weile 
dauern bis die antreffen.

Willi S. schrieb:
> Zum Kern der Frage:
> Nein, durch Software lässt sich dieses Modul nicht zerstören.

Ganz Sicher?
Die Schaltung im OLED kann durch zu schnelle oder falsche 
Datenübertragung nicht kaputt gehen?

M. K. schrieb:
> int 21h schrieb:
> An der Schaltung hatte sich nichts verändert, alles blieb beim alten.
>
> Wie genau sieht die denn aus? Hast du den I2C richtig eingestellt,
> stimmt die Adresse, sind Pullups an SDA/SCK vorhanden? Lässt du das
> Display auch aktualisieren (display()-Funktion wird benutzt? ;))?

Ja natürlich, ich musste lediglich den fertigen Quellcode compilieren 
und hochladen ohne etwas umzustellen.
Der Code lief ja auch bis vor kurzem.
Die Jumper und Pull-ups an der Schaltung habe ich auch vorsichtshalber 
ersetzt.
Der Arduino Uno samt uC ist auch heil.

von Stefan F. (Gast)


Lesenswert?

int 21h schrieb:
> Was ist ein COB?

Der Display-Controller. Er befindet sich bei diesen OLED auf dem 
Flachkabel nahe dem Display-Glas.

COB = Chip On Board

> Ladungspumpe kurzgeschlossen?
> Ist das ein Bauteil am OLED oder an der Schaltung?

Ich dachte, du hast mit dem Datenblatt gearbeitet. Die Ladungspumpe 
erhöht die Versorgungsspannung für das OLED. Sie ist Bestandteil des 
COB, kann aber auch ausgeschaltet werden und durch eine externe zweite 
Spannungsquelle ersetzt werden.

>> Nein, durch Software lässt sich dieses Modul nicht zerstören.
> Ganz Sicher?

Ich würde dafür keine Garantie geben, aber Zerstörung durch Software 
halte ich für sehr unwahrscheinlich. Was aber leicht geht: Das OLED mit 
zu viel Kontrast frühzeitig verschleissen.

von int 21h (Gast)


Lesenswert?

Ich habe nun endlich den Fehler? gefunden.
Es macht für mich irgendwie keinen Sinn, aber wenn ich beim Arduino OLED 
Sketch die Slave Adresse von 0x3D auf 0x3C änder, funktioniert es.
Von mir blieb dieser Wert unverändert (Steht sogar als Kommentar 0x3D 
daneben)!
Ich kann mir das irgendwie nicht erklären

von m.n. (Gast)


Lesenswert?

Du hast vermutlich den Pin D/C# nicht beschaltet, sodaß sein Pegel nicht 
eindeutig ist.
Den SSD1306 spreche ich übrigens unter der Basisadresse 0x78 mit D/C# 
auf GND an ;-)

von Syndedi Sator (Gast)


Lesenswert?

m.n. schrieb:
> Du hast vermutlich den Pin D/C# nicht beschaltet

An den Displays mit I2C Interface gibt es keinen D/C Pin!

von Stefan F. (Gast)


Lesenswert?

Ich empfehle, zwischen Display und Platine mit Display drauf zu 
unterscheiden.

von Syndedi Sator (Gast)


Lesenswert?

Stefanus F. schrieb:
> Ich empfehle, zwischen Display und Platine mit Display drauf zu
> unterscheiden.

So wie sich der TO gibt bin mir fast sicher dass er eine Platine
mit Display draufgepappt vorliegen hat.

von Syndedi Sator (Gast)


Lesenswert?

m.n. schrieb:
> Den SSD1306 spreche ich übrigens unter der Basisadresse 0x78 mit D/C#
> auf GND an ;-)

So so, übrigens ich bediene das D/C Bit mit dem beim I2C-Protokoll
(das du ja auch meinst) mit dem Control Byte. Siehe auch Protokoll-
Hinweise im Datenblatt des SSD1306.

von m.n. (Gast)


Lesenswert?

Syndedi Sator schrieb:
> An den Displays mit I2C Interface gibt es keinen D/C Pin!

Gut, daß Du sie alle kennst ;-)
Aber am Controller gibt es diesen Pin und das ist das Entscheidende. 
Vielleicht nennt sich der Anschluss ja A0 oder SA0 oder Arduino-XY. 
Keine Ahnung, was die Leute sich alles einfallen lassen - Hauptsache es 
gibt eine LIB.

von Syndedi Sator (Gast)


Lesenswert?

m.n. schrieb:
> Aber am Controller gibt es diesen Pin und das ist das Entscheidende.

Nö, das Entscheidende ist ob er wirksam ist. Und das ist er nicht
da er im Fall der I2C-Bus Selektion als Slave Adresse wirkt.
Und diese ist damit fest verdrahtet.

von m.n. (Gast)


Lesenswert?

Syndedi Sator schrieb:
> da er im Fall der I2C-Bus Selektion als Slave Adresse wirkt.

Was hast Du nicht verstanden? Es geht doch gerade um die eingestellte 
Adresse :-(

von Willi S. (ws1955)


Lesenswert?

Das Modul wird von mehreren Firmen hergestellt und sind die Adressen 
nicht überall gleich. Es gibt genau 4 Möglichkeiten mit gerade/ungerade 
und linksbündig 8-Bit oder rechtsbündig 7-Bit ausgedrückt. 
Logischerweise zieht sich diese Problematik auch durch alle Software und 
Doku hindurch, jenachdem welches Modul der Bastler zufällig im Einsatz 
hatte...

von Stefan F. (Gast)


Lesenswert?

Manchmal denke ich, es wäre besser gewesen, bei I²C mit 8-bit Adressen 
zu arbeiten. Dann wäre das R/W Flag das neunte Bit und niemand käme auf 
die Idee, diese beiden Sachen zu einer Zahl zusammen zu fassen.

von Willi S. (ws1955)


Lesenswert?

Stefanus F. schrieb:
> Manchmal denke ich, es wäre besser gewesen, bei I²C mit 8-bit Adressen
> zu arbeiten. Dann wäre das R/W Flag das neunte Bit und niemand käme auf
> die Idee, diese beiden Sachen zu einer Zahl zusammen zu fassen.

Im Standard ist es ausdrücklich geregelt, aber sogar die IC-Hersteller 
scheinen komplett verzweifelt und geben die Adressen in ihren 
Datenblättern meistens BINÄR mit 1/0 und R/W-Bit auf A0 an. Echt 
köstlich...

von int 21h (Gast)


Lesenswert?

Stefanus F. schrieb:
> Manchmal denke ich, es wäre besser gewesen, bei I²C mit 8-bit
> Adressen zu arbeiten. Dann wäre das R/W Flag das neunte Bit und niemand
> käme auf die Idee, diese beiden Sachen zu einer Zahl zusammen zu fassen.

Endlich spricht es mal jemand aus.
Ich sehe es genauso

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.