Hardware¶
What to connect between your MCU and an ISF15ACP4, with which bus settings and supply sequence, and the limits to stay inside.
All values here come from the NKK Frameless OLED Pushbutton datasheet (dated 10/03/19), and for the controller's command set from the Solomon Systech SSD1331 datasheet (Rev 1.2). When they disagree with your board's schematic, the schematic wins for pin numbers and levels.
Pins¶
Terminal numbers are not printed on the switch; take them from the footprint drawing in the datasheet.
| Pin | Signal | Function |
|---|---|---|
| 1, 2 | SW | Switch contacts, normally open; closed while pressed |
| 3 | VDD | Logic supply, 2.4 V to 3.5 V |
| 4 | SS | SPI slave select, active low (input) |
| 5 | RES | Reset, active low (input); low initialises the controller |
| 6 | D/C | Low: the byte is a command; high: the byte is display data (input) |
| 7 | SCK | SPI clock (input) |
| 8 | SDI | SPI data in (input) |
| 9 | VCC | OLED drive supply, 14 V to 16 V |
| 10 | GND | Ground |
There is no data output: the display is written, never read. The switch is a separate contact pair; wire pin 1 to an MCU input with a pull-up and pin 2 to ground, and a press reads low.
The driver names its control lines isf15acp4::CtrlPin: ChipSelect, DataCommand, Reset, VccEnable and
Switch. VccEnable is not a module pin: it is the enable input of the supply that makes VCC.
Bus settings¶
| Setting | Value |
|---|---|
| Mode | SPI mode 0 (or 3): SDI is shifted in on the rising edge of SCK, MSB first |
| Clock | tcycle 150 ns minimum, so at most about 6.6 MHz; SCK high and low 75 ns minimum each |
| Frame | Bytes; D/C is sampled with the last bit of each byte |
| Chip select | SS setup 75 ns, SS hold 60 ns; keep SS low for a command and all its parameter bytes |
| D/C | Setup and hold 40 ns around the byte |
| Data setup, hold | 40 ns each |
| SCK rise, fall | 15 ns maximum |
The driver's constants are ssd1331::kMaxSpiClockHz (6,600,000) and ssd1331::kResetPulseMinUs (3). The ESP32
examples run at 6 MHz. Each driver call is one or more SS-low transactions: a command with its parameters
(D/C low), or a block of pixel data (D/C high).
sequenceDiagram
participant H as Host (driver + port)
participant D as ISF15ACP4
H->>D: SS low, D/C low: 15h 00h 5Fh (columns 0..95), SS high
H->>D: SS low, D/C low: 75h 00h 3Fh (rows 0..63), SS high
H->>D: SS low, D/C high: 12,288 bytes of RGB565 pixels, SS high
Note over D: The address wraps inside the window: row by row
Power¶
| Parameter | VDD | VCC |
|---|---|---|
| Range | 2.4 V to 3.5 V | 14.0 V to 16.0 V |
| Typical | 2.8 V | 15.0 V |
| Absolute maximum | 4.0 V | 19.0 V |
| All pixels on | 0.17 mA (0.20 max) | 11.0 mA (13.2 max) |
| Asleep | 10 µA max | 10 µA max |
VDD feeds the logic and VCC the OLED drive. Currents are at 25 °C, VDD = 2.8 V, VCC = 15 V.
Inputs swing from 0.2 x VDD (low, maximum) to 0.8 x VDD (high, minimum) and must stay within −0.3 V to VDD + 0.3 V, so drive the module from MCU I/O at the same voltage as VDD.
Power sequence¶
The datasheet's power on / off sequence:
- Raise VDD with RES, SS, D/C, SCK and SDI low or high impedance.
- Hold RES low for at least 3 µs, then release it.
- Turn VCC on at least 3 µs later, then send the initialisation commands.
- To power off, send display off (
AEh), turn VCC off, then VDD (0 µs minimum between them).
While VCC is off it sits near VDD through the controller's ESD protection; that is expected.
SmartDisplay::Initialize(true) does steps 2 and 3: it holds Reset active (RES low) for 3 µs, releases it, waits
10 µs, sets VccEnable active, waits 1 ms and sends the initialisation table. With Initialize(false) it leaves
VCC alone, for boards that switch the supply themselves. The driver has no power-off call: send DisplayOff(),
then drop VccEnable from your own code.
Switch¶
| Parameter | Value |
|---|---|
| Circuit | SPST, normally open, momentary |
| Rating | 100 mA at 12 V DC, resistive |
| Contact resistance | 200 mΩ maximum |
| Operating force | 2.0 N ± 0.5 N; never more than 100 N on the keytop |
| Travel | 1.8 mm |
| Endurance | 1,000,000 operations, mechanical and electrical |
The contacts bounce like any switch. ButtonUI debounces them (API guide).
Display¶
| Parameter | Value |
|---|---|
| Pixels | 96 x 64 RGB, passive matrix |
| Viewing area | 21.28 mm x 18.74 mm |
| Pixel pitch | 0.222 mm x 0.293 mm: pixels are taller than wide |
| Colours | 65,536 (16-bit, R5 G6 B5) or 256 (8-bit); the driver uses 16-bit |
| Luminance | 80 to 130 cd/m², 105 typical, white, all pixels on |
| Life | 50,000 h at 100 cd/m², 40 % of pixels on, 25 °C |
| Temperature | Operating −20 °C to +70 °C, storage −30 °C to +80 °C |
Because a pixel is 0.293 / 0.222 = 1.32 times taller than wide, artwork drawn on square pixels looks stretched vertically. Scale it to about 76 % of its height before converting it (Graphics).
OLED pixels lose brightness with use, the busiest ones fastest. For a screen that stays the same for hours, move
or invert it from time to time, dim it (DisplayDim(), SetMasterCurrent()) or turn it off.
Product variants¶
The driver carries initialisation tables for three NKK SmartDisplay parts with the same controller. This repository is tested only with the ISF15ACP4.
ProductVariant |
Part | Pixels |
|---|---|---|
Isf15acp4 |
Frameless pushbutton | 96 x 64 |
Isc15anp4 |
OLED pushbutton | 64 x 48 |
Isc01p |
OLED display | 52 x 36 |
The two smaller parts show a window of the controller's 96 x 64 RAM that starts at column 16 (10h, ISC15ANP4)
or 22 (16h, ISC01P), per the NKK application notes. Every driver call takes display coordinates, 0 to width - 1
and 0 to height - 1, and adds that offset itself.
Mounting and handling¶
- The module is static sensitive: handle it at an ESD-safe bench.
- Keep the OLED below 80 °C when soldering (NKK soldering profile A); the socket AT9704-085L lets you fit the button after soldering and replace it in the field.
- NKK recommends series resistors and buffers on the signal lines against noise, and grounded bracket legs.
- Clean the keytop with a dry cloth; no solvents.
Reference documents¶
| Document | What it is for |
|---|---|
| ISF15ACP4 datasheet | Pins, supplies, timing, power sequence, switch |
| SmartDisplay resources | NKK application notes, kits, charge pumps |
| SSD1331 datasheet | Solomon Systech: the controller's commands |