Forum: Mikrocontroller und Digitale Elektronik Wieso funktioniert dieser Trick nicht (OLED-Reset-Problem)?


von Michael (Gast)


Lesenswert?

Platz-Spar-Trick, der nicht funktoniert:

Ziel: OLED+ISP-Buchse mit 8 Pins. Eigentlich würde man 9 Pins brauchen - 
aber da MISO nur für ISP benötigt wird, soll MISO auch RESET für das 
OLED sein. Dass MISO bei Hardware-SPI automatisch Eingang ist, sollte 
nicht stören: Ein Pullup am Display zieht MISO hoch, das OLED ist im 
Betrieb mit Hardware-SPI dadurch nicht im Reset. Wenn man es resetten 
will, beendet man SPI, definiert den PIN kurz als Output, gibt Low aus.

Nur klappt es nicht: Störungen im Display. Meistens Streifen, oft an 
gleicher Stelle, obwohl der Refresh den komplette Displayinhalt ersetzt. 
Der OLED-Code ist mit anderen Platinen ausgetestet, SPI-Frequenz wurde 
versuchsweise minimiert. Es gibt die Störungen nur, wenn man den 
Reset-Eingang des OLED per 2K2 oder 4K7 oder 10K auf 5V zieht - aber 
keine, wenn man ihn auf einen MCU-Pin legt, der 5V ausgibt. Der Pullup 
ist direkt am Display, das sich auf einer separaten Platine befindet.

Wenn ich die Reset-Leitung im Betrieb (nach dem initialen Reset und dem 
Starten der Display-Testscheife) von MISO auf einen anderen MCU-Pin 
umstecke, der 5V ausgibt, bleibt es störungsfrei.

Wenn ich den Reset-Pin des OLED im Betrieb von der 
Mikrocontroller-Platine trenne und nur den 2K2 wirken lassen, kommen 
nach einiger Zeit Störungen.

Ich habe irgendwo gelesen, dass der Reset bei OLEDs nicht immer korrekt 
realisiert ist (kein Spannunswandler auf 3V3), kann mich aber nicht an 
mehr erinnern. Könnte es damit zusammenhängen? Ich ziehe den ja auf 5V. 
Aber wieso geht es mit einem MCU-Pin?

von Andreas B. (bitverdreher)


Lesenswert?

Hi,
evt. zieht der Reset des Displays phasenweise mehr Strom als Du mit dem 
Pullup lieferst.
Versuch mal einen C mit 100n an den Reset des Displays zu legen.

Gruß
Andreas

von Michael (Gast)


Lesenswert?

Danke für den Tip. Es hat geholfen. Ich nehme allerdings an, Du meintest 
100N zwischen Reset-Pin und GND - damit der Pull-Up den C aufläd. Das 
hatte keinen Effekt. Seltsamerweise ist der Fehler restlos weg, wenn ich 
100N zwischen Reset und VCC installiere?!

von Michael (Gast)


Lesenswert?

Oops, zu früh gefreut. Jetzt ist es wieder passiert.

von Michael (Gast)


Lesenswert?

Der Reset-Pin muss anscheinend direkt auf 5V liegen, damit das 
SSD1306-SPI-Display störungsfrei bleibt. Selbst mit einem 1K-Pullup am 
Reset-Pin läuft das Display nicht ohne Störungen. Wenn ich von 
Hardware-SPI zu Software-SPI wechsle und damit MISO, also meinen 
OLED-Reset, als Output konfigurieren kann und High ausgebe, statt den 
Pin bei Hardware-SPI von einem Pull-Up hochziehen zu lassen, läuft es 
störungfrei.

von Peter D. (peda)


Lesenswert?

Michael schrieb:
> Nur klappt es nicht: Störungen im Display.

Ein Pullup nützt da garnichts. Bei Programmieren ist auf MISO reichlich 
Gezappel und kein konstant high.
Wenn der MISO nur immer high wäre, bräuchte man ihn ja zum Programmieren 
nicht.
Nimm den MISO als einen Datenpin des OLED.

von Michael (Gast)


Lesenswert?

> Bei Programmieren ist auf MISO reichlich Gezappel

Das wäre egal, beim Programmieren ist das Display nicht dran, da der 
ISP-SPI-OLED-Header dann vom ISP-Programmierer belegt wird.

Im Normalbetrieb ist MISO nutzlos, das Display hat keinen Output, 
deshalb wollte ich den nutlosen Pin als Display-Reset nehmen. Leder wird 
er durch Harwdare-SPI zwangsweise zum Input: Deshalb brauche ich einen 
Pull-Up, um den Reset auf High (idle) zu halten.

Inzwischen verdächtige ich das erstmals verwendete Schaltnetzteil. Das 
scheint das Display ziemlich zu stören. Vieleicht ist der Reset des OLED 
nur eine besonderes empfindliche Antenne?

von Bernd K. (prof7bit)


Lesenswert?

Bau den Pullup mal spaßeshalber auf der displayseitigen Seite der 
Leitung ein, nahe am Displaycontroller. Wie lang ist die Leitung, wie 
dicht liegt die Reset-Leitung an den Datenleitungen? Wie liegt sie 
relativ zu den Versorgungsleitungen? Zieht das Display kurze heftig 
gepulste Ströme aus der Versorgung, ist die Versorgung displayseitig 
ordentlich abgeblockt um das zu verhindern?

: Bearbeitet durch User
von Michael (Gast)


Angehängte Dateien:

Lesenswert?

> Bau den Pullup mal spaßeshalber auf der displayseitigen Seite der
Leitung ein

Dort hatte ich es probiert.

> ist die Versorgung displayseitig ordentlich abgeblockt um das zu verhindern?

Das Display hat 10uF (keramisch) zwischen VCC und GND. Ich weiß aber, 
dass das sonst auch ohne geht, setze dieses Displays schon länger ein.

> Wie lang ist die Leitung

30-40cm

> wie dicht liegt die Reset-Leitung an den Datenleitungen?

Auf der Platine nicht nenennswert, siehe Anhang (Reset/MISO 
hervorgehoben, ganz links GND, ganz rechts VCC, neben Reset MOSI und 
SCK, so wie sich das durch die MCU-Pin-Reihenfolge ergibt). Danach kommt 
ein loses Kabelbündel.

> Wie liegt sie relativ zu den Versorgungsleitungen?

Das könnte das Problem sein. Ich setze erstmals ein 
600mA-Mini-Schaltnetzteil ein und habe damit 230V auf der Platine. Unter 
dem Schaltnetzteil soweit wie möglich eine durchgehende Massefläche auf 
dem Top-Layer. Signale überwiegend auf Bottom. Aber die OLED-SPI-Buchse 
liegt nur ~1cm daneben.

> Zieht das Display kurze heftig gepulste Ströme aus der Versorgung

Der Displaytest lässt es zwar ordentlich flackern (displayfüllende 
Animationen mit 10-20 FPS, schnelles Invertieren des ganzen Displays 
usw.), aber diese Displays sollen nicht mehr als 20-30mA brauchen. Das 
Netzteil liefert kurzzeitig auch 1A. Ich habe keinen externen Elko zur 
Pufferung dran (meines Wissens ist einer drin), aber heute versuchsweise 
mal 1000uF angeschlossen - ohne Effekt.

von Andreas B. (bitverdreher)


Lesenswert?

Hi,
was passiert denn auf der Reset Leitung, wenn das Display flackert? 
Konntest Du da irgend etwas mit dem Oszi sehen? (an Reset und GND des 
Displays gemessen?
Notfalls würde ich einen Jumper zu Vcc an die Reset legen, den Du beim 
Programmieren entfernst. So oft sollte das ja nicht vorkommen. Du kannst 
ja auch mit einem 100 Ohm Angstwiderstand jumpern, falls Du den Jumper 
mal beim programmieren vergisst.

Michael schrieb:
> aber heute versuchsweise
> mal 1000uF angeschlossen - ohne Effekt.

Das dürfte wenig helfen. Dafür ist die Induktivität von Elkos zu hoch. 
Das ist höchstens in Kombination mit mehreren Keramik C's a 100n 
sinnvoll. Auch die Vcc mal gegen GND direkt am Display mit dem Oszi 
messen.

Gruß
Andreas

: Bearbeitet durch User
von Michael (Gast)


Lesenswert?

> was passiert denn auf der Reset Leitung, wenn das Display flackert?

Ich habe kein Oszi. Offensichtlich passiert aber kein Reset. Der 
OLED-Chip gerät "nur" in einen seltsamen Zustand. z.B. streifenförmige 
Fehler an bestimmter Stelle, oder Displayversatz-Fehler, die bleiben, 
obwohl jeder Frame das Display komplett neu beschreibt - so als ob ein 
Mapping zwischen RAM und Display verloren gehen würde.

Ich habe inzwischen mal eine völlig andere, ältere Platine von mir, mit 
anderer OLED-Platine (auch SSD1306, auch SPI-Interface, andere 
Displayfarbe, Carrier-PCB von einem anderen ebay-Verkäufer), testweise 
so betrieben. In diesem Test wurde der Reset nur vom MCU-Pullup 
hochgezogen und es lief kein fordernder Displaytst:

Da gibt auch Fehler, wenn auch nicht so heftig, so doch von ähnlicher 
Art. Bildschirmbereiche verschieben sich. Das scheint mit dem 
dargestellten Inhalt zusammenzuhängen. Die getestete Firmware gibt 
meistens nur Text aus und dabei passiert nichts (innerhalb der 
Testzeit). Eine displayfüllende Animation mit maximaler Geschwindigkeit 
verursacht dagegen Versatz-Fehler.

Könnte mit der Anzahl eingeschalteter OLED-Punkte zusammenhängen. 
Vielleicht zieht/braucht der Chip aus der Reset-Leitung Strom? Ich 
müsste mal was stärkeres als 100N an den Reset-Pin hängen (an VCC ist 
schon 10uF). Inzwischen bin ich allerdings mit Software-SPI glücklich 
und treibe den Reset per MCU-Pin und werde da nicht mehr weiter 
nachforschen.

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Habe das angeblich 5V-tolerante Display zerlegt. 3.3V-Spannnunswandler 
ist zwar drauf, aber der Reset und andere IO-Leitungen gehen direkt an 
das SSD1306-Display, das IMHO nicht 5V-tolerant ist.

von Michael (Gast)


Lesenswert?

Laut Datenblatt verträgt ein SSD1306 4V, auf Inputs VCC + 0,3V, also 
betreibe ich ihn an 5V-Outputs 0,7V über dem Limit. Kann man einfach 
Dioden in die vier Leitungen MSIO, SCK, C/D und CS schalten? Daten 
fliessen nur von der MCU zum Display (bei Hardware-SPI allerdings mit 
bis zu 9,2MHz).

von Andreas B. (bitverdreher)


Lesenswert?

Michael schrieb:
> und werde da nicht mehr weiter
> nachforschen.

Das ließ Dir wohl doch keine Ruhe.  ;-)

Zur Sache: das ich schon heftig. Obwohl ich mir damit allein den Effekt 
nicht erklären kann. Das hieße ja daß Reset außerhalb der Spec 
beschaltet sein muß damit es fuktioniert.
Aber wer weiß was bei diesem Display noch alles an Designregeln 
mißachtet wurde.

Das mit den Dioden ist sehr grenzwertig. Bei kleinen  Strömen sind das 
eher 0.5V die da abfallen. Aber da vorher ja nichts kaputtging.....
Besser ist ein ordentlicher Pegelwandler

Gruß
Andreas

: Bearbeitet durch User
von Michael (Gast)


Lesenswert?

> Das ließ Dir wohl doch keine Ruhe.  ;-)

Nicht so ganz, meine Platine ist auf die Fensterbank gefallen, danach 
war das OLED kaputt und musste runter (Dremel) und man konne die 
Rückseite sehen.

Ich habe Widerstände (Reste von 4K7 bis 5K6) in MOSI, SCK, CS, C/D und 
RESET gelegt, dann schaffen es die Clamping-Dioden anscheinend, 
jedenfalls reicht es dann, den Reset per Pull-Up hochzuziehen. Das war 
aber nur ein kurzer Test mit der langsameren Geschwindigkeit von 
Software-SPI.

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.