Foundations
Internal page, not linked from navigation. The palette is settled; the long-form reading face is the open decision below.
Contrast is against the field, #111111.
-
#111111field the page — -
#1C1C1Cfield-raised cards, wells — -
#2E2E2Erule hairlines — -
#FFFFFFlegend headings, labels 18.9:1 -
#E0E0E0legend-prose long-form body 14.3:1 -
#B0B0B0hardware captions, secondary 8.7:1 -
#FFCC00yellow primary action, shipped 12.5:1 -
#6655FFindigo section bands — surface only 3.9:1 -
#8888FFindigo-text eyebrows, labels on dark 6.3:1 -
#00CCFFcyan code, SDK, technical 10:1
Why indigo is two tokens. At #6655FF it is 3.9:1 on the field — fine behind white text, but it fails as text itself, which is what the eyebrow label in the mockup was doing. #8888FF carries the same hue at 6.3:1.
Maybe it is your first rodeo
24 additional 16-bit analog inputs, a family of control satellites, and an SDK to help you write the code.
J42 I2C1 SDA/SCL 0x30–0x33
U3 ADS114S08 AIN0–AIN11 16-bit
Long-form reading, for build-log posts. Same paragraph, same size, same colour.
The hub was corrupting its own register file, but only when the host read twice in a row. Single reads were perfect. Two back-to-back and slot 1 would occasionally report movement that never happened — sometimes a clean detent, sometimes a value that looked like a neighbouring slot’s. Firmware inspection got me nowhere, because the logic was correct. What was wrong was when it ran.
Smaller, for captions and asides: the STM32 I²C peripheral fetches the next byte before the host has acknowledged wanting it.
The hub was corrupting its own register file, but only when the host read twice in a row. Single reads were perfect. Two back-to-back and slot 1 would occasionally report movement that never happened — sometimes a clean detent, sometimes a value that looked like a neighbouring slot’s. Firmware inspection got me nowhere, because the logic was correct. What was wrong was when it ran.
Smaller, for captions and asides: the STM32 I²C peripheral fetches the next byte before the host has acknowledged wanting it.
The hub was corrupting its own register file, but only when the host read twice in a row. Single reads were perfect. Two back-to-back and slot 1 would occasionally report movement that never happened — sometimes a clean detent, sometimes a value that looked like a neighbouring slot’s. Firmware inspection got me nowhere, because the logic was correct. What was wrong was when it ran.
Smaller, for captions and asides: the STM32 I²C peripheral fetches the next byte before the host has acknowledged wanting it.
- analog in
- 24 × 16-bit
- address
- 0x30–0x33
- slot link
- JST-SH 4-pin
- poll rate
- ~1 kHz