Forum: Mikrocontroller und Digitale Elektronik OLED über Transistor ausschalten


von dediggefedde (Gast)



Lesenswert?

Ich würde gerne ein OLED-Display von Waveshare, das über 4-Wire SPI von 
einem ATMega328 angesteuert wird, von diesem über eine 
Transistor-Schaltung ein- und ausschalten.

Leider schaltet das Display nicht ab, obwohl die Transistor-Basis auf 
GND gelegt wird.

OLED-Display: SSD1306 
https://www.waveshare.com/w/upload/9/95/SSD1306.pdf
Transistor: BC547B https://www.farnell.com/datasheets/410427.pdf

Das ganze betreibe ich mit 3.3V (ATMega auf Steckbrett)

Mit einem einfachen Multimeter kam ich auf einen Stromverbrauch von etwa 
4mA für das Display.
Nach dem Artikel von hier ( 
https://www.mikrocontroller.net/articles/Basiswiderstand ) berechnet 
sich der Basis-Widerstand über

R_{basis} ≤ ( 3.3V * 0.9 - 0.78V ) / (4mA / 20) = 11kΩ

Ich habe hier 10 kOhm genommen.

Nun ist das Display aber immer an. Im angehangenen Schaltplan habe ich 
die Transistorbasis mal gleich über den Basiswiderstand auf GND gelegt, 
um das Problem zu verdeutlichen. Später soll das über einen 
ATMega-Ausgang geregelt werden.

Nach Datenblatt kann das OLED auch max 15mA ziehen, wodurch man auf ≤3kΩ 
käme... aber mit einem 2kΩ Widerstand gibt es auch keine Änderung.


Wird Das OLED intern irgendwo mit GND über die SPI-Schnittstelle 
versorgt? Oder habe ich die Transistor-Schaltung noch nicht ganz 
verstanden?
Oder gar verrechnet?

von Teo D. (teoderix)


Lesenswert?

dediggefedde schrieb:
> Wird Das OLED intern irgendwo mit GND über die SPI-Schnittstelle
> versorgt?

Ja, das wird die bei fast allem passieren, dem du den GND klaust. Gesund 
ist das auch nicht immer. Schalte VCC und die Welt ist wieder in 
Ordnung!

von holger (Gast)


Lesenswert?

>Schalte VCC und die Welt ist wieder in
>Ordnung!

Nö, dann sorgt jeder Pin der auf High liegt für eine
ausreichende Stromversorgung. Man muss ALLE angeschlossenen
Datenleitungen entsprechend schalten damit das Display nicht mehr
parasitär versorgt wird.

von dediggefedde (Gast)


Lesenswert?

Danke für die schnellen Antworten!

Hab jetzt mal ohne VCC und GND Anschlüsse getestet und das Display geht 
weiterhin.

Wenn ich die Ausgänge per software auf Low setze, kann ich keine anderen 
Chips über SPI ansprechen, ohne das Display einzuschalten.

Extra dafür 6 Transistoren zu nehmen scheint mir auch etwas unpraktisch.
Da werde ich noch etwas herumspielen müssen. ^^

von Teo D. (teoderix)


Lesenswert?


von Harry L. (mysth)


Lesenswert?

Wenn das ein SSD1306 ist, kann man das via Software Ein- bzw. 
Aus-schalten.

von Klaus (Gast)


Lesenswert?

dediggefedde schrieb:
> Wenn ich die Ausgänge per software auf Low setze, kann ich keine anderen
> Chips über SPI ansprechen, ohne das Display einzuschalten.

Man könnte aber auch mal schauen, was man im Display selbst per Software 
abschalten kann. Register hat es ja genug. An ein Kommando, es 
einzuschalten kann ich mich erinnern. Ohne dieses funktioniert es nicht. 
Da wird es auch was zum Ausschalten geben.

Das kost dann gar keinen Transistor.

MfG Klaus

von Alex G. (dragongamer)


Lesenswert?

Willst du stromsparen, oder was genau?
Wenn alle Pixel schwarz sind, sieht man einem OLED ja nicht an, dass er 
an ist.
Interessant wäre durchaus der Stromverbrauch in dem Zustand.

von Stefan F. (Gast)


Lesenswert?

Du musst dafür sorgen, dass das Display keine Signal-Spannungen bekommt, 
wenn es ausgeschaltet ist.

Da du den GND Anschluss unterbrcihst, musst du vorher alle Signale auf 
HIGH schalten. Nur dann liegt an dem Display (aus seiner Sicht 
betrachtet) nirgendwo mehr Spannung an.

Weniger verwirrend ist es, die Spannungsversorgung abzuschalten, dazu 
kann ich nur dringend raten. Dabei musst du alle Signale auf LOW 
schalten.

In beiden Fällen kannst du den SPI Bus nicht mehr für andere Geräte 
benutzen, denn dann müsstest du ja andere Spannungen an den 
Signal-Leitungen zulassen. Das darf aber nicht sein.

Für beinahe alle CMOS IC's (auch das Display) gilt, dass die Spannungen 
an allen Pins zwischen VCC und GND liegen müssen. Da dein Display in 
abgeschaltetem Zustand zwischen VCC und GND genau Null Volt hat, darfst 
du auch keine Signale anlegen.

von Stefan F. (Gast)


Lesenswert?

Bei deinem ATmega musst du AVCC an die Spannungsversorgung anschließen. 
Sonst kommt es zu weiteren irritierenden Fehlfunktionen.

von dediggefedde (Gast)


Lesenswert?

Ja, Strom sparen ist das Ziel des ganzen.

Eben mit dem Multimeter nachgemessen:
Bildschirm an: 2.5mA
Bildschirm aus (Software): 11µA

Software:
Bildschirm aus:
1
display.ssd1306WriteCmd(SSD1306_DISPLAYOFF);
Bildschirm an:
1
display.ssd1306WriteCmd(SSD1306_DISPLAYON);

Es wird empfohlen den OLED-Reset-pin nach dem Einschalten zu triggern. 
Ich hab direkt danach (und nach dem Auswachen des ATMega aus dem 
Ruhezustand) ein
1
display.begin(&Adafruit128x64, OLED_CS, OLED_DC, OLED_RST);
gesendet.

Danke für den Hinweis mit AVCC!
Das hatte ich in hier einfach in dem Plan vergessen.

Ich habe noch ein paar Sensoren (z.B. bmp280) und ein SD-Karten-Modul. 
Bei diesen kann ich aber einfach die SPI-Eingänge auf 0V legen.
Ist der Bildschirm an, kann ich auf den Ruhezustand verzichten. Und im 
Ruhezustand brauche ich den Bildschirm dann nicht...

von Alex G. (dragongamer)


Lesenswert?

dediggefedde schrieb:
> Ja, Strom sparen ist das Ziel des ganzen.
>
> Eben mit dem Multimeter nachgemessen:
> Bildschirm an: 2.5mA
Damit meinst du an, aber alle Pixel schwarz?

von dediggefedde (Gast)


Lesenswert?

Alex G. schrieb:
> Damit meinst du an, aber alle Pixel schwarz?

Nein, hier war eine Zeile an.
Das sollte nur zeigen, dass es funktioniert und 11µA ist für mich zum 
Strom sparen ausreichend.

Display aus: 11µA
Alle Pixel aus, Display an: 1.6mA
1 Reihe , Display an: 2.4mA
4 Reihen, Display an: 5.2mA

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.