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?
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
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?!
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.
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.
> 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?
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?
> 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.
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
> 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.
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.
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).
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
> 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.