21 Commits
Author SHA1 Message Date
hulk 000781e2f5 GUI v0.2.13: chart Y-axis range control (right-edge dual-handle slider)
- TemperatureChart gains a right-edge slider on a FIXED -20..120C rail
  (user-specified): top handle = upper bound, bottom handle = lower bound,
  drag middle band = pan keeping span, click free rail = snap that bound.
  First drag engages manual mode (yManualEngaged -> sync button state +
  config); release quantizes to 0.1C via yRangeChanged, min span 0.5C.
  Bound values during drag must come from live display range, not the
  stale paint cache (two drags without repaint made pan jump the range).
- Auto/manual toggle moved into the card header (was a wrapped second
  row); pause/clear merged into header too; legend moved to top-left.
- Value labels next to handles only visible on hover/drag (constant
  labels covered the curve per user feedback).
- Out-of-range curves clipped back to the plot area (setClipRect);
  current-value marker suppressed outside the manual range.
- Draft textbox rows from v0.2.10 superseded; versions v0.2.10..v0.2.13.
- Fixed "no data yet" hint never disappearing: set_source cached a
  stale _has_data bool once at build time while data flows through the
  same list references; now evaluated live at paint time.
- config: y_axis key persists mode/bounds; invalid stored values fall
  back to auto. selftest settings isolated to a temp dir (user json with
  stored manual state broke the fresh-default assertions).
- selftest_gui: slider hit/drag/clamp/pan/clipping regression + hint
  gating; 83 checks all pass.
FilmForge-GUI-v0.2.13
2026-10-15 21:30:21 +08:00
hulk 2f43efb94b Tools: PID debug toolchain from V0.1.x bring-up
test_run.py: judged closed-loop test over COM5 (fixed sequence, J1~J4
2026-10-15 20:55:29 +08:00
hulk 8900240c65 Heater: PID v0.1.14 - banded controller + sensor glitch guards
Rebuild PID as three-zone banded controller: far field P/D full power,
2026-10-15 20:55:02 +08:00
hulk 8035f9b7d3 GUI v0.2.9: fix chronic-lag root cause (log trim crash on PySide6 6.11) + 5 hardening fixes
- log trim used instance-level enum access (removed in PySide6 6.11), crashed
FilmForge-GUI-v0.2.9
2026-10-12 16:14:53 +08:00
hulk 60908a7709 CMake: support older ARM linker versions 2026-10-12 11:39:42 +08:00
hulk c9aa41685f Heater: segmented PID (full-power / slow-band / overtemp-cutoff) + 2s/5pct PWM 2026-10-10 14:49:24 +08:00
hulk 974a077e29 Heater: force output off in overtemp region (err<0); Kp 4->10 2026-10-10 14:14:09 +08:00
hulk 12ba9de05f Heater: setpoint ramping to suppress thermal-lag overshoot 2026-10-10 13:59:43 +08:00
hulk 5b24b956d2 PID anti-windup: conditional integration (back-calculation lite) FilmForge-GUI-v0.2.0 FilmForge-GUI-v0.2.1 2026-10-10 10:12:42 +08:00
hulk 30540d884d Heater PID closed-loop on PB12 (HEAT_EN) with safety protections 2026-10-10 10:04:48 +08:00
hulk 6246a87c3c Add PA11 power-hold output (PMOS self-latch keep-alive) 2026-10-10 09:51:51 +08:00
hulk 9c7aafb78c Protocol v1.0: add M3 heater switch / M4 target temp (reserved); protocols.md 2026-10-10 00:28:42 +08:00
hulk 3b00ed30d7 M2 protocol: replace toggle with idempotent explicit control 2026-10-10 00:06:42 +08:00
hulk 6d9f1f54a8 Shared NTC sampling + M2 continuous temperature report 2026-10-09 23:56:58 +08:00
hulk bae56ad6cb Add M1 single-shot temp query command; NTC trimmed-mean filter 2026-10-09 22:47:18 +08:00
hulk 318d4c60f4 RS485 send: disable RX during tx + drain/clear after (anti-loopback); COM_DEBUG on with RX byte trace 2026-10-09 19:58:51 +08:00
hulk 5771fee576 Port command protocol framework from E23x (RS485 data link) 2026-10-09 19:47:49 +08:00
hulk cda8f482d2 NTC: add open/short detection (V near rails) instead of bogus temp 2026-10-09 19:28:28 +08:00
hulk 061fa4d950 Enable _printf_float: nano.specs strips %f, NTC temp printed blank 2026-10-09 19:25:28 +08:00
hulk 24ddb7046e FilmForge: RS485 data link (USART0+DE PA8) and NTC temp (PC5 ADC0) 2026-10-09 19:13:15 +08:00
hulk 8feba5e015 Initial commit 2026-10-09 18:45:50 +08:00