display: Add configuration options for OLED displays (#3084)

Add user-configurable contrast, vcomh (affects "smearing"), and invert options for SSD1306/SH1106 type OLED displays.

Signed-off-by:  James Esau <james_esau@hotmail.com>
This commit is contained in:
Iakabos 2020-07-19 17:18:08 -07:00 committed by GitHub
parent 0f24406acc
commit b0901daa85
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 5 deletions

View File

@ -1831,8 +1831,16 @@
# optional. The cs_pin and a0_pin parameters must be provided when # optional. The cs_pin and a0_pin parameters must be provided when
# using an uc1701 display. # using an uc1701 display.
#contrast: 40 #contrast: 40
# The contrast to set when using a uc1701 type display. The value may # The contrast to set when using a uc1701 or SSD1306/SH1106 type display
# range from 0 to 63. Default is 40. # For UC1701 the value may range from 0 to 63. Default is 40.
# For SSD1306/SH1106 the value may range from 0 to 256. Default is 239.
#vcomh: 0
# Set the Vcomh value on SSD1306/SH1106 displays. This value is
# associated with a "smearing" effect on some OLED displays.
# The value may range from 0 to 63. Default is 0.
#invert: FALSE
# TRUE inverts the pixels on certain OLED (SSD1306/SH1106) displays
# The default is FALSE
#cs_pin: #cs_pin:
#dc_pin: #dc_pin:
#spi_bus: #spi_bus:

View File

@ -202,6 +202,9 @@ class SSD1306(DisplayBase):
io_bus = io.spi io_bus = io.spi
self.reset = ResetHelper(config.get("reset_pin", None), io_bus) self.reset = ResetHelper(config.get("reset_pin", None), io_bus)
DisplayBase.__init__(self, io, columns) DisplayBase.__init__(self, io, columns)
self.contrast = config.getint('contrast', 239, minval=0, maxval=255)
self.vcomh = config.getint('vcomh', 0, minval=0, maxval=63)
self.invert = config.getboolean('invert', False)
def init(self): def init(self):
self.reset.init() self.reset.init()
init_cmds = [ init_cmds = [
@ -215,12 +218,12 @@ class SSD1306(DisplayBase):
0xA1, # Set Segment re-map 0xA1, # Set Segment re-map
0xC8, # Set COM output scan direction 0xC8, # Set COM output scan direction
0xDA, 0x12, # Set COM pins hardware configuration 0xDA, 0x12, # Set COM pins hardware configuration
0x81, 0xEF, # Set contrast control 0x81, self.contrast, # Set contrast control
0xD9, 0xA1, # Set pre-charge period 0xD9, 0xA1, # Set pre-charge period
0xDB, 0x00, # Set VCOMH deselect level 0xDB, self.vcomh, # Set VCOMH deselect level
0x2E, # Deactivate scroll 0x2E, # Deactivate scroll
0xA4, # Output ram to display 0xA4, # Output ram to display
0xA6, # Normal display 0xA7 if self.invert else 0xA6, # Set normal/invert
0xAF, # Display on 0xAF, # Display on
] ]
self.send(init_cmds) self.send(init_cmds)