Guten Tag. Seit Tagen versuche ich irgenwie Kontrast von Oled Display 128x64 ändern. leider klappt es nicht.
Ich verwende Adafruit_GFX.h und Adafruit_SSD1306.h Bibliotheken.
Gibt es die Möglichkeit der Kontrast zu ändern?
Soviel ich weiß hat ein OLED Display keine Kontrastregelung.
Ich korrigiere mich. es gibt den Befehl 0x81 mit dem Du den Kontrast in 256 Schritten einstellen kannst.
10.1.7 Set Contrast Control for BANK0 (81h)
This command sets the Contrast Setting of the display.
The chip has 256 contrast steps from 00h to FFh. The
segment output current increases as the contrast step value increases.
Du mußt die Bibliothek um diese Funktion erweitern.
Grüßeß Uwe
uwefed:
Soviel ich weiß hat ein OLED Display keine Kontrastregelung. https://www.adafruit.com/datasheets/SSD1306.pdf
Ich korrigiere mich. es gibt den Befehl 0x81 mit dem Du den Kontrast in 256 Schritten einstellen kannst.
Du mußt die Bibliothek um diese Funktion erweitern.
Grüßeß Uwe
Super Vielen Dank. Da meine Kenntnisse in C/C++ nicht so toll sind, frage ich lieber.
Habe ich so richtig verstanden. Es geht von 0x8100 bis 0x81FF.
Irgendwie klappt es nicht. ich hab es mit
const unsigned int kontrast = 0x8100;
probiert. Einfach oben nach dem Bibliotheken eingefügt. Trotzdem geht nicht.
Wo muss ich genau in Bibliothek einfügen. Vielen dank. grüße Yevgen
Dem Displaycontroller mußt Du diese beiden Werte senden. Ich weiß jetzt nicht wie die Biblithek das macht aber Du mußt es an den Controlelr schicken und in der biblithek steht das weis sie das auch für andere Paremeter macht.
Ich habe keine Lust die Biblithek zu analysieren aber schwerwiegender, ich hab kein Display um die veränderte Bibliothek auszutesten.
Und die Methode um Kommandos zu senden ist public, also muss man nicht mal was an der Library selbst ändern:
void ssd1306_command(uint8_t c)
Wenn man sich dann man die .cpp Datei anschaut sieht man dass man das nur zweimal aufrufen muss. z.B. wie hier:
ssd1306_command(SSD1306_SETDISPLAYCLOCKDIV); // 0xD5
ssd1306_command(0x80); // the suggested ratio 0x80
Also sollte sowas direkt im Sketch gehen:
Adafruit_SSD1306 display(OLED_RESET); //Display Objekt erzeugen. Kann auch anders aussehen wenn man SPI verwendet
display.ssd1306_command(SSD1306_SETCONTRAST);
display.ssd1306_command(125); //gewünschter Kontrast-Wert von 0-255
Rabenauge:
Die Helligkeit der Anzeige geht zu ändern, das ist drin. steht auch in der Doku.
Mehr ist nicht, bei nem Oled.
Vielen Dank. Das hat mir sehr geholfen.
Leider geht Kontrast sehr wenig runter. Es ist leider unmöglich Kontrast auf "echte 0-Wert" ein zustellen.
Bei der 0 Wert und 255 Wert ist relativ kleines Einstellungsbereichs. Es ist schwer der Kontrast (0 Wert) mit dem Kontrast (255 Wert) zu unterscheiden.
Kontrast geht nicht.
In dem Display sind lauter winzige Leuchtdioden, mehr nicht.
Daher ist eine Kontrasteinstellung wie bei einem TFT (völlig andere Technik) überhaupt nicht möglich.
Man kann nur die LED`s dimmen, was den "Kontrast" im Prinzip verringert.
Und das zeigt definitiv deutliche Wirkung, bei Wert 0 siehste nämlich nix mehr.
Höher stellen als "volle Helligkeit" kannst du vergessen.
Allerdings haben OLED durch diese Bauweise nen hundertfach höheren Kontrast als ein gutes TFT je haben wird, und da es keine Hintergrundbeleuchtung gibt, sind sie auch deutlich schärfer.
Es gibt da schlichtweg nix am Kontrast zu stellen.
Hier das Beispiel, wie man die Helligkeit (NUR die ist einstellbar!) verändert:
/*
Brightness Control
Brightness Step:0-255
Circuit:
* I2C OLED Panel attached to pins SDA, SCL
* Power inputs attached to pins 3V3, +5V,GND,GND,VIN
Created 17 Jan 2012
by: Jimbo.we(www.geekonfire.com)
*/
#include <Wire.h>
#include <GOFi2cOLED.h>
GOFi2cOLED GOFoled;
int Brightness = 0;
void setup() {
//default address is 0x3D.
GOFoled.init(0x3D);
// init done
GOFoled.display(); // show splashscreen
GOFoled.setTextSize(1);
GOFoled.setTextColor(WHITE);
}
void loop() {
GOFoled.setBrightness(Brightness++); // Change the brightness 0 - 255
GOFoled.setCursor(56,56); // Set the Cursor position
GOFoled.print("Bright:");
GOFoled.setCursor(104,56); // Set the Cursor position
GOFoled.clearArea(104, 56,24, 8); // clearArea(x,y,w,h),clear the area for nunber.
GOFoled.setCursor(104,56); // Set the Cursor position
GOFoled.print(Brightness);
GOFoled.display();
if(Brightness >= 255)
{
GOFoled.setCursor(0,56); // Set the Cursor position .
GOFoled.print("Max:255");
GOFoled.display();
while(1);
}
}