SSD1333 brightness: photometer harness, four-axis driver, and measured response surface (stages 1+2) - #568
Merged
Conversation
Camera-measured response surface for the 1.91" SSD1333, replacing the by-eye brightness model's measured claims: - Contrast and master collapse onto one drive product P = c*(m+1) (1.6% single-valuedness); dark below P=4, ~flat to P~32, sqrt(P) above. - Gray-scale ceiling duty law (n-1)/30 confirmed to ~1%. - Separability fails: pre-charge authority spans 32x (low drive) to 1.1x (high drive); cut-out edges move with operating point. - Emission floor within the tonal rule: 148 ADU/s at c4 m0 L4 pc4 — ~3.8 decades reachable; the shipped policy stops 40x short of it. - Pixel-value remap validated at reference drive; canary distinct at all measured operating points; pre-charge glow found under level 1. Adds raw journals + sweep specs/runners, ssd1333-response.md (the measured model stage 3 fits against), CONTEXT.md vocabulary (drive product, pre-charge glow), and the stage-3 handoff. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… revision (stage 1) The stage-1 changeset the stage-2 measurements build on: - panel_photometry.py: camera-as-photometer bench rig (selftest/measure/ sweep/monitor CLI, period-locked exposure ladder, JSONL journals). - ssd1333_device.py: emitted-light-space gray-scale-ceiling LUT and the pre-charge voltage (0xBB) command. - displays.py: four-axis set_brightness with bounded ceiling fit search, MIN_TONAL_CEILING canary floor, pre-charge regime, knee curve. - precharge_sweep.py: the by-eye 2026-07 pre-charge harness (kept for visual artifact checks the photometer cannot do). - ADR 0023: the four-axis revision this branch's ssd1333-response.md measures against (its measured claims are amended in stage 3). - test_ssd1333_brightness.py: 12 unit tests holding the canary line. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
Summary
Stages 1 and 2 of the SSD1333 brightness re-characterization: the photometer harness + four-axis driver + ADR 0023 revision (stage 1), and the panel's photometrically measured response surface (stage 2) — raw journals, the sweep specs/scripts that produced them, the measured-model writeup (
docs/ax/display/ssd1333-response.md), CONTEXT.md vocabulary, and the stage-3 handoff (docs/ax/display/HANDOFF-stage3-dimming-policy.md).Stage 1 (commit
feat(display): …)python/PiFinder/panel_photometry.py— camera-as-photometer rig (selftest/measure/sweep/monitor, period-locked exposure ladder, JSONL journals).ssd1333_device.py— emitted-light-space ceiling LUT + pre-charge voltage command;displays.py— four-axisset_brightness(bounded fit search, canary floor, pre-charge regime, knee curve);precharge_sweep.py— by-eye harness kept for visual artifact checks.test_ssd1333_brightness.py(12 unit tests, passing).Stage 2 headline findings
P = contrast × (master+1)(single-valued within 1.6% across independent sessions). Dark below P=4, cliff to 28.5% of reference, near-flat to P≈32, ≈√P above P≈128.(n−1)/30confirmed to ~1% — the one axis the model got right.ssd1333-response.md§7 flags (does not fix) the ADR 0023 claims that fell; amending the ADR is stage 3's job alongside the policy refit — see the handoff.Verification
pytest tests/test_ssd1333_brightness.py: 12 passed.ruff checkon all touched Python: clean.🤖 Generated with Claude Code