Skip to content

Commit bc7822d

Browse files
mcauserdpgeorge
authored andcommitted
drivers/display/ssd1306.py: Add support for 72x40 displays.
The 72x40 OLED requires selecting the internal IREF, as opposed to the default external IREF. This is an undocumented feature in the SSD1306 datasheet, but is present in the SSD1315 datasheet. It's possible the 72x40 OLED is actually using the newer SSD1315 controller. Sending the IREF select command to SSD1306 displays has no effect on them, so it's added to the init_display() instead of wrapping in an "if width = 72". Also tested on a 128x64 OLED using the SSD1315 controller (smaller ribbon cable) and the proposed change has no effect on the display, as the module comes with the correct current limiting resistor. Internal and external IREF work the same. Fixes issue #7281.
1 parent 89945b1 commit bc7822d

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

drivers/display/ssd1306.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
SET_DISP_START_LINE = const(0x40)
1616
SET_SEG_REMAP = const(0xA0)
1717
SET_MUX_RATIO = const(0xA8)
18+
SET_IREF_SELECT = const(0xAD)
1819
SET_COM_OUT_DIR = const(0xC0)
1920
SET_DISP_OFFSET = const(0xD3)
2021
SET_COM_PIN_CFG = const(0xDA)
@@ -63,6 +64,8 @@ def init_display(self):
6364
0xFF, # maximum
6465
SET_ENTIRE_ON, # output follows RAM contents
6566
SET_NORM_INV, # not inverted
67+
SET_IREF_SELECT,
68+
0x30, # enable internal IREF during display on
6669
# charge pump
6770
SET_CHARGE_PUMP,
6871
0x10 if self.external_vcc else 0x14,
@@ -92,10 +95,11 @@ def rotate(self, rotate):
9295
def show(self):
9396
x0 = 0
9497
x1 = self.width - 1
95-
if self.width == 64:
96-
# displays with width of 64 pixels are shifted by 32
97-
x0 += 32
98-
x1 += 32
98+
if self.width != 128:
99+
# narrow displays use centred columns
100+
col_offset = (128 - self.width) // 2
101+
x0 += col_offset
102+
x1 += col_offset
99103
self.write_cmd(SET_COL_ADDR)
100104
self.write_cmd(x0)
101105
self.write_cmd(x1)

0 commit comments

Comments
 (0)