4.3 KiB
Adafruit and other OLED displays
Main README
SPI Pin names and wiring
The names used on the Pyboard are the correct names for SPI signals. Some OLED displays use different names. Adafruit use abbreviated names where space is at a premium. The following table shows the correct names followed by others I have seen. The column labelled "Adafruit" references pin numbers on the 1.27 and 1.5 inch displays. Pin numbering on the 0.96 inch display differs: pin names are as below (SCK is CLK on this unit).
Pyboard pins are for SPI(1). Adapt for SPI(2) or other hardware.
Pin | Pyboard | Display | Adafruit | Alternative names |
---|---|---|---|---|
3V3 | 3V3 | Vin (10) | ||
Gnd | Gnd | Gnd (11) | ||
X1 | X1 | DC (3) | ||
X2 | X2 | CS (5) | OC OLEDCS | |
X3 | X3 | Rst (4) | R RESET | |
X6 | SCK | SCK | CL (2) | SCK CLK |
X8 | MOSI | MOSI | SI (1) | DATA SI |
X7 | MISO | MISO | SO (7) | MISO (see below) |
X21 | X21 | SC (6) | SDCS (see below) |
The last two pins above are specific to Adafruit 1.27 and 1.5 inch displays and only need to be connected if the SD card is to be used. The pin labelled CD on those displays is a card detect signal; it can be ignored. The pin labelled 3Vo is an output: these displays can be powered from +5V.
Pyboard pins are arbitrary with the exception of MOSI, SCK and MISO. These can be changed if software SPI is used.
I2C pin names and wiring
I2C is generally only available on monochrome displays. Monochrome OLED panels typically use the SSD1306 chip which is officially supported. At the time of writing (Sept 2018) this works only with software SPI. See this issue. Wiring details:
Pin | Pyboard | Display |
---|---|---|
3V3 | 3V3 | Vin |
Gnd | Gnd | Gnd |
Y9 | SCL | CLK |
Y10 | SDA | DATA |
Typical initialisation on a Pyboard:
pscl = machine.Pin('Y9', machine.Pin.OPEN_DRAIN)
psda = machine.Pin('Y10', machine.Pin.OPEN_DRAIN)
i2c = machine.I2C(scl=pscl, sda=psda)
Adafruit - use of the onboard SD card
If the SD card is to be used, the official scdard.py
driver should be
employed. This may be found
here.
It is necessary to initialise the SPI bus before accessing the SD card. This is
because the display drivers use a high baudrate unsupported by SD cards. Ensure
applications do this before the first SD card access and before subsequent ones
if the display has been refreshed. See
sdtest.py.
Notes on OLED displays
Hardware note: SPI clock rate
For performance reasons the drivers for the Adafruit color displays run the SPI bus at a high rate (currently 10.5MHz). Leads should be short and direct. An attempt to use 21MHz failed. The datasheet limit is 20MHz. Whether a 5% overclock caused this is moot: with very short leads or a PCB this might well work. Note that the Pyboard hardware SPI supports only 10.5MHz and 21MHz.
In practice the 41ms update time is visually fast for most purposes except some games.
Update: even with a PCB and an ESP32 (which supports exactly 20MHz) it did not work at that rate.
Power consumption
The power consumption of OLED displays is roughly proportional to the number
and brightness of illuminated pixels. I tested a 1.27 inch Adafruit display
running the clock.py
demo. It consumed 19.7mA. Initial current with screen
blank was 3.3mA.
Wearout
OLED displays suffer gradual loss of luminosity over long periods of illumination. Wikipedia refers to 15,000 hours for significant loss, which equates to 1.7 years of 24/7 usage. However it also refers to fabrication techniques which ameliorate this which implies the likelihood of better figures. I have not seen figures for the Adafruit displays.
Options are to blank the display when not required, or to design screens where the elements are occasionally moved slightly to preserve individual pixels.