Display power consumption is a critical constraint for wearables, portable medical devices, agricultural equipment, and IoT sensor nodes. Sparklet provides framework-level features — dirty-region rendering, display sleep API, RTOS task sleep integration, and partial refresh — that minimise CPU wake cycles and display energy draw without application-layer complexity.
Low-power embedded GUI refers to the techniques and framework features that minimise energy consumed by the display subsystem of a battery-powered embedded device. The display subsystem — backlight, display controller, and CPU render cycles — is typically the largest single power consumer in a portable embedded product, often exceeding the microcontroller core itself. For wearables, portable medical instruments, and IoT field equipment, display power directly determines battery life and recharge frequency.
Power optimisation in embedded GUI requires addressing four distinct power consumers: the display backlight, CPU render cycles, GPU or DMA activity per frame, and DRAM refresh energy on MPUs. Sparklet provides specific mechanisms for each. One consumer electronics customer deploying Sparklet on a wearable device achieved a 60% reduction in display-related RAM usage and a 25% increase in battery life through dirty-region rendering, RTOS sleep integration, and backlight fade API.
For wearable-specific architecture, see Wearable Display GUI. For RTOS sleep integration details, see RTOS Support. For CPU render time benchmarks per platform, see Performance & Memory Benchmarks.
Each technique addresses a different power consumer in the display subsystem. Apply them in combination for maximum battery life improvement.
A full-screen redraw renderer activates the CPU and DMA for a complete frame computation at every display refresh cycle — even if the screen shows a static clock face with only the seconds hand moving. At 60 fps this is 60 full render passes per second regardless of content change rate, burning energy continuously on pixels that have not changed.
Sparklet's dirty-region renderer marks only changed widget bounding rectangles. On a mostly static screen — an idle health monitor displaying heart rate that updates once per second — the dirty region is typically less than 3% of total display pixels. CPU and DMA are active for a few microseconds per second rather than continuously. The processor returns to sleep between dirty events, entering RTOS tickless idle or platform deep-sleep mode.

In a typical TFT LCD display module, the LED backlight consumes 50–80% of total display subsystem power. At full brightness a 3.5-inch TFT backlight draws 40–80 mA at 3.3 V — 130–260 mW — from a battery that may supply only 500 mWh total. A wearable that dims after 5 seconds of inactivity and blanks after 15 seconds reduces average display power by 60–80% compared to always-on operation at full brightness.
Sparklet exposes a display sleep API accepting a brightness level (0–100%) and a transition duration in milliseconds for smooth fade. A hard on/off switch creates a visible flash on LCD backlights — the fade API eliminates this. Waking on touch or button input requires one API call — the display returns to the last active screen state without reloading the widget tree, as the tree is preserved in RAM during sleep.

OLED displays consume power proportional to the number of illuminated pixels and their brightness — a black pixel on OLED consumes near zero power. Sparklet's dirty-region renderer naturally minimises OLED power by updating only changed pixels per frame. An always-on OLED watch face that updates only the seconds digit illuminates approximately 1,200 new pixels per second rather than refreshing all 240×240 = 57,600 pixels at 60 fps — a 2,880× reduction in pixels processed.
E-ink displays have a unique constraint: a full waveform refresh takes 0.5–2 seconds and consumes significant energy, while a partial refresh updates only changed pixels in 100–300 ms with 70–90% lower energy. Sparklet supports partial refresh mode for e-ink compatible display controllers — the dirty-region map is passed directly to the HAL display driver as the partial refresh region, eliminating full-screen waveform updates for all incremental content changes.

Smartwatches and fitness trackers require an always-on display mode where a minimal watch face — time, date, step count — remains visible continuously on OLED or Memory-in-Pixel (MIP) displays at the lowest possible power. Sparklet supports an always-on mode where the render task updates only the specific widgets carrying time-sensitive data on each RTC wake.
In always-on mode, the MCU wakes from deep sleep on a 1-second RTC tick, updates the time widget's dirty region (approximately 40×60 pixels for a seconds digit), renders and flushes only that region to the display, then returns to deep sleep. Total MCU active time per second: 100–500 µs. Average MCU power contribution: under 0.1 mW. The display panel itself consumes 0.5–2 mW in always-on mode depending on lit pixel count. See the full architecture at Wearable Display GUI.

| Technique | Power Saving | Use Case | Sparklet API / Feature |
|---|---|---|---|
| Dirty-Region Rendering | 80–95% CPU render energy | All battery-powered devices | Default behaviour — no API call required |
| Display Backlight Sleep | 50–80% display subsystem | Wearables, handheld devices | sparklet_display_set_brightness(level, fade_ms) |
| RTOS Tickless Idle | MCU deep sleep between events | FreeRTOS, Azure RTOS, Zephyr targets | Render task blocks on semaphore — all RTOS PM compatible |
| Hardware Acceleration | 60–80% CPU active time per frame | MCUs with DMA2D, PXP, D/AVE2D | HAL driver config — CPU enters WFI during DMA transfer |
| Partial Buffer Mode | Eliminates DRAM refresh energy | Devices with external LPDDR or SDRAM | sparklet_init() buffer size parameter in HAL |
| E-Ink Partial Refresh | 70–90% energy per display update | E-paper, shelf labels, utility meters | Dirty-region map passed to HAL as partial refresh region |

CPU and DMA activate only when a widget is marked dirty. Static screens generate zero render activity between data updates. Render wake events are microseconds in duration rather than continuous 60 fps activity — the rest of the time the CPU can remain in deep sleep with ~1 µA current draw.

Brightness fade (0–100% in configurable milliseconds), display blank on configurable inactivity timer, and instant wake on any input event. Application specifies inactivity duration — Sparklet manages the fade transition. Saves 40–80% of display subsystem power on TFT LCD products versus continuous full-brightness operation.

Sparklet's render task blocks on a binary semaphore between dirty events. Compatible with FreeRTOS tickless idle, Azure RTOS power-save, and Zephyr PM. MCU enters deep sleep automatically when all tasks are blocked — woken only by a dirty flag, sensor interrupt, timer event, or input event. No application power management code required.

DMA2D on STM32, D/AVE2D on Renesas, PXP on NXP offloads pixel operations from the CPU. CPU issues the operation and enters WFI sleep, waking only when DMA completes with an interrupt. Offloading 70% of render work to DMA reduces CPU active time by 70% per render pass — directly proportional reduction in CPU energy per frame.
Address the four power consumers in order of impact: (1) dim and sleep the backlight on inactivity — use Sparklet's display sleep API with a fade transition; (2) eliminate full-screen redraws — Sparklet's dirty-region renderer is on by default; (3) enable hardware acceleration so the CPU sleeps while DMA handles pixel operations; (4) use partial buffer mode to minimise DRAM footprint and eliminate external SDRAM refresh energy. On FreeRTOS, enable tickless idle so the MCU enters deep sleep between dirty events.
Download the Sparklet evaluation binary for your wearable or portable device target. Includes FreeRTOS integration samples with RTOS sleep and dirty-region rendering configured out of the box.