micropython-nano-gui/ADAFRUIT.md

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.

Main README