PEC Monitor — Debug Console

disconnected code → V = code · Vref / 2²³

Live reading (AIN0–AINCOM)

V
code  |  0 S/s

Burst capture (7.5 kS/s)

ms → 3750 samples ms ms
no burst captured yet

Log

Acquisition

ADC input MUX

ADS1256 registers

Receive mux (r1–r16)

Pulse-drive mux (1–16)

ms before pulse
S/s — use averaging for noise, not higher rate
shots stacked — noise ÷ √N
µs RX-enable toggle at capture START — clears a latch left by the previous shot (0 = off)

Fire+Capture drives the channel above and listens on the Receive mux channel (they can differ on the bench). Records baseline → pulse → switch-off → decay, then fits τ.

drive idle
fires every TX ch, reports RX peak (uses Receive-mux channel)

Fire drives the selected coil channel. Hold keeps the drive on continuously so you can meter the chain with a DMM — release when done.

1×4 Line Scan — live τ monitoring

idle ms

Each pair drives its TX channel and listens on its RX channel — match them however your coils are wired. Acquisition uses the Bench settings (pulse, window, rate, averages, fit-skip). Tip: with a few-ms decay, drop Burst duration to ~50–100 ms for a much faster loop.

τ trend — no data yet

4×4 Array — thickness map

idle
mm thick → d = dref·√(τ/τref)

Cells are channels 1–16, row-major (1–4 across the top). The scan runs one full Fire+Capture per node using the Bench settings (pulse, window, rate, averages) and fits τ per node. Thickness uses the single-node inversion d ∝ √τ against the calibration cell — relative until you calibrate on a known-thickness spot.

Harness Builder — TX↔RX pairing & polarity

idle
ms ms scanned after each edge mV

Pick the RX channel a coil's receive leads are on, then sweep every TX. The TX with the largest RX response is its drive partner. Polarity is read from which edge the response lands on: a kick at the pulse cut-off = wired normal; a kick at the pulse start = flipped (swap that coil's RX leads). The 0–3.3 V output clamp is what makes only one edge survive, so the test is near all-or-nothing. Auto-map sweeps all 16 RX (256 captures), builds the full coupling matrix, then assigns each RX a unique TX strongest-pair-first — so two RX can't both claim the same drive line.

TX sweep for RX

Pairing map

Tip: click 📈 on any RX box (or any TX sweep / matrix cell) to open the captured waveform and verify the edge by eye. Each RX box is editable — use the dropdown to reassign its TX and the polarity button to flip it; manual edits move the green ring in the matrix and are marked manual. Matching now ranks a genuine decay tail above a taller cross-talk spike, so a false high-amplitude spike no longer steals a TX (spikes are flagged spike?).

Acquisition (auto-scan)

stopped
ms/node µs

Auto-scan stays off until you start it. It cycles every non-dead node with these settings and broadcasts the live map to all viewers; it pauses automatically for a few seconds whenever you run a manual scan or harness sweep.

Reconstruction

colour centres on the baseline; the scale stays fixed across scans
ms τ mm → thickness = mm·√(τ / τcal); choose the “thickness (mm)” metric to view the reconstruction

Each node is a sensor pixel: RX = receive channel, TX = drive channel (shown on each node as T<tx>R<rx>). The N<id> name is just an internal id. A node only shows a value when its TX→RX capture yields a clean decay; channels with nothing coupling stay blank. If the map only lights up a node or two, the node TX/RX usually don't match your wiring — run the Harness Auto-map, then click From harness below to copy the real pairing onto the map. Click any node to pop up its captured waveform + τ fit.

τ trends

collecting…

Geometry editor

Drag nodes to place them anywhere — no grid is assumed; the map auto-fits. Click a node to edit its label, TX/RX channels, or mark it a dead pixel (excluded from the reconstruction so it reads as the surrounding field, never an artefact). Coordinates are arbitrary units.