SSD1333 brightness: dimming policy refit from the measured response surface (stage 3) - #570
Merged
Merged
Conversation
… surface (stage 3) Replaces the multiplicative axis model in DisplaySSD1333.set_brightness with three measured response tables (stage-3 rig calibration), one per regime: pre-charge codes 4-0x17 one per level (1-20), ceiling 5-31 one step per level (21-47), then a power law inverted through the measured drive response (48-255, soft top at 75% of clean max). The bottom is now the panel's measured 151 ADU/s emission floor, 40x below the old policy's dimmest state; span 6998:1 (3.84 decades), rig-verified end-to-end at all 255 levels with zero dead keypresses under the UI's +20%/-10% stepping. Amends ADR 0023 (separability, pre-charge linearity/cut-out, drive floor claims all corrected to measurement), updates the Display CONTEXT.md regime vocabulary, rewrites the unit tests around the measured tables and real keypress trajectories, and retires the fulfilled stage-3 handoff. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
brickbots
marked this pull request as ready for review
August 2, 2026 21:26
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stage 3 of the panel-characterization effort (follows #568):
DisplaySSD1333.set_brightnessis refit against the rig-measured response surface, and the shipped curve is verified end-to-end on the photometer rig.What changed
The old policy factored a target into per-axis multipliers — a model the stage-2 photometry falsified (the axes don't multiply; contrast and master are one drive-product axis; pre-charge authority runs 32× to 1.1× depending on drive). The new policy walks three measured response tables, one per regime:
Tables come from a dedicated same-day calibration session (
stage3-calibration-20260802.jsonl, 74 points; repeat-point agreement 0.02%, reference within 0.9% of stage 2). Standing user decisions kept: dim-weighted knee shape, tonal-range rule (ceiling ≥ 4, value-64 canary),MAX_CONTRAST = 160and the 70% blooming cap (eyeball constants, unexamined), top at ~75% of clean max, panel-agnostic harness.Rig verification (acceptance test)
Selftest gates all PASS, then one measurement per level, all 255 levels, axes exactly as the policy programs them (
stage3-verification-20260802.jsonl):Saved settings shift (like the 2026-07 reshape — call-out)
The knee state is unchanged, so settings ≥ 20 render within ~30% of before (old 50 ≈ new 48, old 125 ≈ new 96; the top is 18% dimmer under the soft cap). Below the knee the range runs 40× deeper: the old dimmest setting's light now lives around level 8, and levels 1–7 are darkness the old model couldn't reach. Field users who lived at the old bottom will want to press up a few times.
Docs
ssd1333-response.md§7 marked resolved; stage-3 handoff file retired (fulfilled).🤖 Generated with Claude Code