I have a few
Adafruit 1.27" Color OLED Breakout Boards.
I found that the initialization in their graphics library set the brightness to extreme levels.
I re-wrote their library to optimize memory size and tame down the color intensity to hopefully increase the display lifespan.
There is a power-down sequence noted in the datasheet somewhere...
But here is the command sequences I use to dim and power down the SSD1351:
Edit: See section, 8.10.1 VDD Regulator in Sleep Mode, in the SSD1351 datasheet. int screenSaver=0; // 1Hz screen saver counter
//
// TURN THE OLED ON
//
if (screenSaver == 0) {
SSD1351_Write2(SSD1351_CONTRASTMASTER, 0x09);
SSD1351_Write2(SSD1351_FUNCTIONSELECT, 0x01); // Enable Vdd Regulator
SSD1351_Write(SSD1351_DISPLAYON); // Sleep Out
}
//
// DIM THE OLED
//
else if (screenSaver == 20) {
SSD1351_Write2(SSD1351_CONTRASTMASTER, 0x01);
}
//
// TURN THE OLED OFF
//
else if (screenSaver == 60) {
SSD1351_Write(SSD1351_DISPLAYOFF); // Sleep In
SSD1351_Write2(SSD1351_FUNCTIONSELECT, 0x00); // Disable Vdd Regulator
}
My setup commands:
// SSD1351 OLED pins
#define SSD1351_CSpin PORTAbits.RA3 // OLED pin 5 OLED Chip Select
#define SSD1351_RSTpin PORTAbits.RA2 // OLED pin 4 OLED Reset
#define SSD1351_DCpin PORTAbits.RA1 // OLED pin 3 OLED Data/Command
#define SSD1351_CStris TRISAbits.TRISA3 // OLED Chip Select
#define SSD1351_RSTtris TRISAbits.TRISA2 // OLED Reset
#define SSD1351_DCtris TRISAbits.TRISA1 // OLED Data/Command
void SSD1351_Setup(void)
{
SSD1351_CStris = 0;
SSD1351_RSTtris = 0;
SSD1351_DCtris = 0;
// Reset SDD1351
SSD1351_CSpin = 1;
SSD1351_RSTpin = 0;
__delay_us(2);
SSD1351_RSTpin = 1;
// Command Lock #1 {reset=0x12}
SSD1351_Write2(SSD1351_COMMANDLOCK, 0x12);
// Command Lock #2 {reset=0xB0}
SSD1351_Write2(SSD1351_COMMANDLOCK, 0xb1);
// Sleep Mode On
SSD1351_Write(SSD1351_DISPLAYOFF);
// Re-map / Color Depth {Vertical flip}
//SSD1351_Write2(SSD1351_SETREMAP, 0x66);
SSD1351_Write2(SSD1351_SETREMAP, 0x74);
// Display Start Line {reset=0}
SSD1351_Write2(SSD1351_STARTLINE, 0);
// Display Offset {reset=60h}
SSD1351_Write2(SSD1351_DISPLAYOFFSET, 0);
// Display Mode
SSD1351_Write(SSD1351_NORMALDISPLAY);
// Internal Vdd Regulator and Interface Select {reset A[7:6]=00b, A[0]=1b}
SSD1351_Write2(SSD1351_FUNCTIONSELECT, 0x01);
// Reset/Pre-charge Periods {reset A[7:4]=1000b 8_DCLKs], A[3:0]=0010b 5_DCLKs}
SSD1351_Write2(SSD1351_PRECHARGE, 0x62);
// Display Enhancement
//SSD1351_Write4(SSD1351_DISPLAYENHANCE, 0xa4, 0x00, 0x00);
// Clock Divider and Oscillator Frequency {reset A[7:4]=1101b, A[3:0]=0001b}
SSD1351_Write2(SSD1351_CLOCKDIV, 0xf1);
// Segment Low Voltage
SSD1351_Write4(SSD1351_SETVSL, 0xa0, 0xb5, 0x55);
// GPIO {reset A[3:2]=10b, A[1:0]=10b}
SSD1351_Write2(SSD1351_SETGPIO, 0x00);
// Second Pre-charge Period {reset A[3:0]=1000b 8_DCLKS]}
SSD1351_Write2(SSD1351_PRECHARGE2, 0x01);
// Pre-charge Voltage {reset A[4:0]=17h}
SSD1351_Write2(SSD1351_PRECHARGELEVEL, 0x15);
// COM Deselect Voltage {reset A[2:0]=05h}
SSD1351_Write2(SSD1351_VCOMH, 0x03);
// Contrast Current {reset=8Ah, 51h, 8Ah}
SSD1351_Write4(SSD1351_CONTRASTABC, 0x60, 0x50, 0x60);
// Master Contrast Current {reset A[3:0]=1111b}
SSD1351_Write2(SSD1351_CONTRASTMASTER, 0x09);
// MUX Ratio {reset A[6:0]=127}
SSD1351_Write2(SSD1351_MUXRATIO, 95);
// Zero RAM
SSD1351_Clear();
// Sleep Mode Off
SSD1351_Write(SSD1351_DISPLAYON);
}