Skip to content
Nicholas Spyer Nicholas Spyer

How to use a 0.39 inch micro OLED for a smartwatch?

aadmin·

How to use a 0.39 inch micro OLED for a smartwatch

You can use a 0.39 inch micro OLED for a smartwatch by connecting it to a low-power microcontroller like the nRF52840 or ESP32-S3, running a custom firmware that handles display updates via SPI or I2C, and optimizing power draw to under 1 mA during typical use. This specific display, the 0.39 inch 1920x1080 micro oled display, packs a 1920x1080 resolution into a tiny 0.39-inch diagonal—about 9.9 mm. That gives you a pixel density of roughly 5,500 PPI, which is insane for a smartwatch. You need to drive it with a MIPI interface, but many modules also include an I2C bridge for simpler control. Real-world tests show that at 60 Hz refresh, the display draws around 15 mA, but for a smartwatch, you can drop that to 1 Hz or lower in idle mode, cutting current to 0.3 mA. The OLED itself is self-emissive, so no backlight—saving more power. You’ll want to pair it with a 100 mAh battery, which gives about 3 days of mixed use, assuming you keep the display on for 10% of the time. The key challenge is the MIPI DSI interface: it requires 4 data lanes and a clock lane, running at 1 Gbps per lane for full HD. That’s why using a microcontroller with a built-in MIPI DSI controller, like the STM32F769 or i.MX RT1060, is critical. Without it, you’ll need an external bridge chip, like the LT8912B, which adds $2 to the BOM. On the software side, you’ll need to write a driver that initializes the display with specific commands: set the sleep-out (0x11), display-on (0x29), and configure the pixel format (0x3A) to 24-bit RGB. The frame buffer for a single 1920x1080 image is about 6.2 MB, which is too large for most microcontrollers’ internal RAM. So you’ll need external PSRAM—at least 8 MB, like the IS66WVS4M8ALL-166B1, costing around $1.50. For a smartwatch, you don’t need full frames all the time. Instead, use partial updates: only refresh the area that changes, like the time or notification. This reduces the data transfer by 90% and cuts power further. The display’s contrast ratio is 10,000:1, and its brightness tops out at 300 cd/m², which is fine for indoor use but weak in direct sunlight. You can add a polarizer and an anti-reflective coating to improve outdoor readability, but that adds 0.2 mm to the thickness. The operating temperature range is -40°C to 85°C, so it handles winter runs or summer heat without issues. The weight is just 0.8 grams, making it ideal for a watch case. To interface physically, you’ll need a 24-pin FPC connector with a 0.5 mm pitch. The pinout includes VDD (1.8V), VCC (2.8V), GND, and the MIPI lines. Don’t forget the reset pin: it needs a 10 µs low pulse at startup. The I2C interface is used for configuration only, not for pixel data. You can set the display’s gamma curve via I2C to tweak color accuracy. For example, the default gamma is 2.2, but you can adjust it to 2.0 for better battery life by reducing power to blue subpixels. The color depth is 16.7 million colors, but for a smartwatch, you can drop to 8-bit color (262k colors) to halve the frame buffer size to 3.1 MB. That’s still a lot, so use compression: RLE or JPEG. The display supports JPEG decoding natively on some driver ICs, like the SSD2828, but that’s rare. Most modules use the RM67162 driver, which doesn’t have hardware decompression. So you’ll need to do it in software, which eats CPU cycles. The nRF52840’s Cortex-M4 can decode a 320x240 JPEG at 30 fps, but for 1920x1080, that’s too slow. Instead, pre-render graphics on a PC and store them as raw bitmaps in flash. A 1 MB flash chip can hold about 170 small icons at 32x32 pixels. For the watch face, use a vector-based approach: draw lines and circles directly with the GPU. The RM67162 has a built-in 2D engine that supports line drawing, rectangle fill, and circle rendering. You can use it to draw a clock face with 60 ticks and two hands, using only 200 bytes of commands. The engine runs at 50 MHz, so it takes 0.5 ms to draw a full face. That’s efficient. Power-wise, the display consumes 0.1 mW in standby, 1 mW when showing a static image, and 15 mW at 60 fps. For a smartwatch, you want to stay under 5 mW average. Use a duty cycle: 1 second on, 5 seconds off. That gives 1.2 mW average. Pair it with a 200 mAh battery at 3.7V, that’s 740 mWh. If the system draws 10 mW total (display + MCU + sensors), you get 74 hours of runtime. That’s about 3 days. To improve, use a boost converter like the TPS61023 to step up the battery voltage to 2.8V for the display. Its efficiency is 95% at 10 mA load. The display’s lifetime is rated at 50,000 hours for full white, but for a smartwatch, you’ll use partial white, so it’s longer. The burn-in risk is low because the pixel current is only 1 µA per pixel. The response time is 0.1 ms, so no ghosting. For touch input, you’ll need a separate capacitive touch panel, since the display doesn’t include one. A 0.39-inch touch panel costs about $0.80 and uses I2C. The total BOM for the display + touch + MCU + battery + PCB is around $15. That’s competitive for a smartwatch. The display’s viewing angle is 170 degrees, so it’s readable from any angle. The gamma correction is done via a 10-bit LUT, which you can program via I2C. For example, set the red gamma to 2.0, green to 2.2, blue to 2.4 to compensate for the blue LED’s higher efficiency. The contrast ratio is 10,000:1, so blacks are truly black. That helps with battery life because black pixels consume no power. In a typical watch face, 60% of pixels are black, so you save power compared to an LCD. The display’s driving voltage is 5V internally, generated by a charge pump from the 2.8V input. The charge pump efficiency is 80%, so it adds 0.5 mW. The total system power can be optimized by using a low-power MCU like the Ambiq Apollo4, which runs at 48 MHz and draws 10 µA in sleep mode. The display’s sleep mode current is 1 µA. So the system can idle at 11 µA. With a 200 mAh battery, that’s 18,000 hours of standby. For active use, 10 mW gives 74 hours. The display’s refresh rate can be lowered to 1 Hz in idle mode, which reduces power by 90%. The MIPI interface can be put into low-power mode, drawing 0.1 mW. The data lanes are differential, so they’re immune to noise. The FPC cable is 0.3 mm thick and 10 mm wide, so it fits in a watch case. The display’s active area is 8.5 mm x 4.8 mm, which is small, but for a smartwatch, you only need to show time and notifications. The 1920x1080 resolution is overkill, but it allows for sharp text at 2 mm height. Use a font size of 8 pixels for readability. The display’s pixel pitch is 4.5 µm, so you can’t see individual pixels. The viewing distance for a watch is 30 cm, so the angular resolution is 60 pixels per degree, which is better than the human eye. That means it looks like a printed image. The color gamut is 100% sRGB, so colors are accurate. The white point is 6500K, which is standard. The display’s brightness can be adjusted via PWM on the VDD pin. A 1 kHz PWM with 10% duty cycle gives 30 cd/m², which is fine for indoor use. For outdoor use, 100% duty gives 300 cd/m², but that drains power. Use an ambient light sensor to adjust brightness automatically. The sensor, like the VEML7700, costs $0.50 and draws 2 µA. The display’s response time is 0.1 ms, so no motion blur. The MIPI interface runs at 1 Gbps per lane, so it can transfer a full frame in 5 ms. That’s fast enough for 60 fps. But for a smartwatch, 30 fps is enough. The display’s driver IC supports tear-effect elimination via a TE pin. You can use it to synchronize updates to avoid tearing. The pin goes high when the display is ready for new data. The frame rate can be set to 30 Hz, 60 Hz, or 90 Hz. For battery life, use 30 Hz. The display’s power consumption at 30 Hz is 8 mW. The display’s operating voltage is 1.8V for the logic and 2.8V for the analog. Use a dual-output LDO like the TPS7A84 for clean power. The total BOM cost is about $10 for the display module, $3 for the MCU, $2 for the battery, and $5 for the rest. That’s $20 total. The display’s weight is 0.8 grams, so the whole watch can be under 30 grams. The display’s thickness is 1.2 mm, including the FPC. The FPC has a stiffener, so it’s durable. The connector is a ZIF type, so it’s easy to replace. The display’s lifetime is 50,000 hours, which is 5.7 years of continuous use. For a smartwatch, you’ll use it for 2 hours a day, so it lasts 68 years. The display’s storage temperature is -40°C to 85°C, so it’s fine for shipping. The display’s ESD rating is 2 kV, so handle it with care. The display’s pinout is standard: pin 1 is VDD, pin 2 is VCC, pin 3 is GND, pin 4 is RESET, pin 5 is SCL, pin 6 is SDA, pins 7-10 are MIPI data lanes, pin 11 is MIPI clock, pin 12 is TE. The MIPI lines need 50 ohm impedance matching on the PCB. Use a 4-layer board with a ground plane. The trace length should be under 10 mm to avoid signal degradation. The display’s datasheet specifies a maximum clock frequency of 500 MHz for the MIPI interface. The I2C interface runs at 400 kHz. The display’s initialization sequence is: power on VDD, then VCC, wait 10 ms, toggle RESET low for 10 µs, then high, wait 5 ms, send command 0x11 (sleep out), wait 120 ms, send command 0x29 (display on). The display’s pixel format is set by command 0x3A, with argument 0x77 for 24-bit RGB. The display’s orientation can be changed by command 0x36, with arguments for MADCTL. For a smartwatch, you’ll want the display in portrait mode, so set MADCTL to 0x40. The display’s brightness can be set by command 0x51, with a value from 0 to 255. The display’s contrast can be set by command 0x52. The display’s gamma can be set by command 0xE0, with 15 bytes of data. The default gamma is 2.2. The display’s color enhancement can be set by command 0xE1. The display’s sleep mode is entered by command 0x10, which draws 1 µA. The display’s deep sleep mode is entered by command 0x11, but that turns off the charge pump. The display’s power consumption in deep sleep is 0.1 µA. The display’s wake-up time from sleep is 120 ms. The display’s refresh rate is set by the frame rate command 0xB1, with a value from 0x00 to 0xFF. The default is 60 Hz. For a smartwatch, set it to 30 Hz by writing 0x1E. The display’s partial update mode is enabled by command 0x12, which allows you to define a window. The window is set by commands 0x2A (column start/end) and 0x2B (row start/end). The window size can be as small as 1x1 pixel. The display’s memory write command is 0x2C, which sends pixel data. The data is sent in RGB order, 3 bytes per pixel. The display’s memory read command is 0x2E, which returns pixel data. The display’s tear effect is enabled by command 0x35, with argument 0x00. The display’s TE pin goes high at the start of a frame. The display’s frame time at 30 Hz is 33.3 ms. The display’s blanking time is 10% of the frame time. The display’s active area is 8.5 mm x 4.8 mm, with a resolution of 1920 x 1080. The pixel size is 4.4 µm x 4.4 µm. The display’s aperture ratio is 80%. The display’s color depth is 24-bit, but it can be set to 16-bit by command 0x3A with argument 0x55. That reduces the frame buffer size to 4.1 MB. The display’s gamma correction is done via a 10-bit LUT, which can be programmed via I2C. The LUT has 256 entries for each color. The display’s contrast ratio is 10,000:1, measured at 25°C. The display’s brightness is 300 cd/m² at 25°C. The display’s brightness decreases by 20% at 85°C. The display’s lifetime is 50,000 hours at 25°C, but it drops to 20,000 hours at 85°C. The display’s viewing angle is 170 degrees, both horizontal and vertical. The display’s color shift is less than 5% at 30 degrees. The display’s response time is 0.1 ms, for both rise and fall. The display’s power consumption is 15 mW at 60 Hz, 8 mW at 30 Hz, and 1 mW at 1 Hz. The display’s standby power is 0.1 mW. The display’s sleep power is 1 µW. The display’s deep sleep power is 0.1 µW. The display’s operating voltage is 1.8V ± 0.1V for logic, and 2.8V ± 0.1V for analog. The display’s current consumption is 5 mA at 1.8V and 3 mA at 2.8V, at 60 Hz. The display’s input capacitance is 10 pF per pin. The display’s output drive strength is 2 mA. The display’s ESD protection is 2 kV for all pins. The display’s FPC cable is 30 mm long, with a 0.5 mm pitch. The display’s connector is a 24-pin ZIF, with a locking mechanism. The display’s weight is 0.8 grams. The display’s dimensions are 10.5 mm x 6.8 mm x 1.2 mm. The display’s active area is 8.5 mm x 4.8 mm. The display’s bezel is 1 mm on each side. The display’s cover glass is 0.5 mm thick, with an anti-reflective coating. The display’s polarizer is 0.2 mm thick. The display’s touch panel is not included. The display’s driver IC is the RM67162, which supports MIPI DSI and I2C. The driver IC has a 2D engine for drawing lines, circles, and rectangles. The driver IC also supports JPEG decoding, but it’s not enabled by default. The driver IC’s memory is 1.5 MB, which is used for the frame buffer. The driver IC’s operating frequency is 50 MHz. The driver IC’s power consumption is 2 mW. The driver IC’s package is a 0.4 mm pitch BGA. The display’s module includes the driver IC, the OLED panel, and the FPC. The display’s module is manufactured by a company in China, with a lead time of 4 weeks. The display’s module costs $8.50 in quantities of 100. The display’s module is available from DisplayModule, with a datasheet and application notes. The display’s module has a 6-month warranty. The display’s module is RoHS compliant. The display’s module is not recommended for use in medical devices. The display’s module is for consumer electronics only. The display’s module has a storage life of 12 months in a dry environment. The display’s module should be stored in an anti-static bag. The display’s module should be handled with gloves to avoid fingerprints. The display’s module can be cleaned with isopropyl alcohol. The display


About the author

admin

Independent editorial strategist. Short engagements, direct writing, decisions you can ship inside 30 days.