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?
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!
>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.
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. ^^
dediggefedde schrieb: > Extra dafür 6 Transistoren zu nehmen scheint mir auch etwas unpraktisch. Haben sich Andre auch gedacht. :) Bustransceiver, da gibst alles mögliche zur Auswahl. https://www.google.de/search?num=50&source=hp&ei=BeHQW6-yPIWdkwXnhZiYDw&q=bustransiver&oq=bustransiver&gs_l=psy-ab.3...1670.5946.0.6827.13.12.0.0.0.0.138.1106.9j3.12.0..2..0...1.1.64.psy-ab..1.9.870.0..0j35i39k1j0i131k1j0i10k1j0i10i203k1j0i10i30k1j0i5i30k1j0i30k1.0.wD_6ZaI4tO4
Wenn das ein SSD1306 ist, kann man das via Software Ein- bzw. Aus-schalten.
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
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.
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.
Bei deinem ATmega musst du AVCC an die Spannungsversorgung anschließen. Sonst kommt es zu weiteren irritierenden Fehlfunktionen.
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...
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.