Skip to content

HT16K33

Holtek HT16K33 16×8 LED matrix / 7-segment I²C controller (the Adafruit-style "backpack" driver).

Live catalog

Prefer labwired_describe with the catalog id over guessing pins or addresses.

Status at a glance

Aspect Status
Catalog id ht16k33
Bus I²C
Address 0x70 (A2..A0 low); 0x70..0x77
Datasheet Holtek HT16K33 V1.10 (May 2011): Command Summary p.30–31, Display Memory p.13, Slave Addressing p.26
Source configs/devices/ht16k33.yaml (declarative, no Rust model)
Tier smoke-proven (register-level tests: crates/core/tests/parts_batch5.rs)

Pins / attachment

Pin / net Role
SDA / SCL I²C
ROW/COM Not modelled (no panel)
INT, K pins Not modelled
VDD/GND Power (digital twin)

Support matrix

Behavior Status Notes
Display RAM 00h..0Fh write + read back ✅ Auto-increment
System setup, display setup (on, blink), dimming, ROW/INT ✅ Decoded into inspector variables
Key RAM 40h..45h, INT flag 60h ⚠️ Read 0x00 (no keys)
Pointer wrap past 0Fh, key scan, LED panel artifact ❌

Stimulus

None.

How to run

  1. Place the part and an MCU in Playground, or add it to a system YAML:
    external_devices:
      - id: "ht16k33"
        type: "ht16k33"
        connection: "i2c1"
    
  2. Agent: labwired_list → labwired_describe id=ht16k33 → wire → labwired_validate → labwired_run / labwired_verify.
  3. Register-level smoke: cargo test -p labwired-core --test parts_batch5 — oscillator/display/dimming commands, a 16-byte display-RAM write read back from 00h and 05h, and key RAM; ht16k33_decodes_its_setup_commands covers the command decode. The same file's negative control proves the check fails against a stand-in that answers only 0x00 or only 0xFF.

Limitations

  • A burst past 0Fh walks into 10h instead of wrapping.
  • No LED-panel artifact is rendered.

See the YAML header for the full datasheet trace and every named approximation.