SSD1306 oled Display Kontrast ändern ,aber wie?

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?

Vielen Dank im Voraus. Grüsse Eugen

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.

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.

Grüße Uwe

Das ist doch schon fast implementiert.

Siehe Zeile 85 hier https://github.com/adafruit/Adafruit_SSD1306/blob/master/Adafruit_SSD1306.h:

#define SSD1306_SETCONTRAST 0x81

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

Die Helligkeit der Anzeige geht zu ändern, das ist drin. steht auch in der Doku. Mehr ist nicht, bei nem Oled.

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.

Trotzdem vielen Dank Grüße Yevgen

Was erhoffst du dir mit der Kontraständerung?

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);
  }
}