[
{
"id": "/can-sample-point.html",
"title": "Two nodes at 1 Mbit/s that sampled the bit in different places",
"date": "2026-10-10",
"bus": "CAN",
"tags": [
"sample point",
"time quanta",
"oscillator tolerance"
],
"summary": "Two controllers on one 1 Mbit/s segment sampling 125 ns apart, the time-quantum arithmetic behind it, and why 87.5 per cent is a default worth matching.",
"keywords": "tseg1 tseg2 sjw prescaler bit timing resynchronisation"
},
{
"id": "/can-no-terminator.html",
"title": "A 95-metre CAN trunk that went quiet when I pulled one terminator",
"date": "2026-09-28",
"bus": "CAN",
"tags": [
"termination",
"reflection"
],
"summary": "Seventeen nodes, 500 kbit/s and a missing 120 ohm resistor that failed long frames while short ones kept working.",
"keywords": "120 ohm impedance round trip overshoot trunk stub"
},
{
"id": "/i2c-clock-stretch.html",
"title": "A sensor that held the clock low for 1.4 ms",
"date": "2026-08-05",
"bus": "I2C",
"tags": [
"clock stretching",
"master timeout"
],
"summary": "A device stretching SCL after the address byte, and a master whose 25 microsecond timeout aborted the read halfway.",
"keywords": "scl held low conversion fast mode bus error 400 khz"
},
{
"id": "/uart-baud-error.html",
"title": "Two boards agreed at 9600 and argued at 115200",
"date": "2026-06-11",
"bus": "UART",
"tags": [
"clocks",
"divider error"
],
"summary": "A 12 MHz crystal against an 11.0592 MHz one, a seven per cent divider error, and why the failures depended on the byte value.",
"keywords": "115200 oversampling budget framing error crystal"
},
{
"id": "/i2c-pullups.html",
"title": "310 pF of bus capacitance and the rise time I ignored",
"date": "2026-03-02",
"bus": "I2C",
"tags": [
"rise time",
"bus capacitance"
],
"summary": "Eleven devices and 1.8 kilohm pull-ups that passed at 100 kHz and corrupted the last acknowledgement at 400 kHz.",
"keywords": "pull-up resistor rc curve 310 pf acknowledge v_ol"
},
{
"id": "/rs485-isolation.html",
"title": "Four hundred metres of RS-485 and two grounds that disagreed",
"date": "2025-11-19",
"bus": "RS-485",
"tags": [
"isolation",
"grounds"
],
"summary": "A link that logged errors only in the morning, and the ground-potential measurement that led to an isolated transceiver.",
"keywords": "common mode bias transients isolated dc-dc half duplex 19200"
},
{
"id": "/spi-daisy-chain.html",
"title": "A SPI daisy chain where the last word came back short",
"date": "2025-09-16",
"bus": "SPI",
"tags": [
"chip select",
"propagation"
],
"summary": "Three ADCs in series and a chip-select edge released 90 ns too early for the farthest device's top bits.",
"keywords": "shift register propagation delay truncated mode 0 8 mhz guard"
},
{
"id": "/spi-mode-mismatch.html",
"title": "Every reading came back at exactly half: a CPHA mismatch",
"date": "2025-07-08",
"bus": "SPI",
"tags": [
"CPHA",
"mode"
],
"summary": "A mode mismatch at 8 MHz that halved every value, and why slowing the clock made the wrong answer look plausible.",
"keywords": "clock phase polarity sampling edge ratio 0.5"
},
{
"id": "/analyzer-aliasing.html",
"title": "Three samples per bit are not evidence",
"date": "2024-12-14",
"bus": "instruments",
"tags": [
"sampling ratio",
"aliasing"
],
"summary": "The first entry, and a confession: 24 MS/s against an 8 MHz clock, and four hours spent chasing a sampling artefact.",
"keywords": "logic analyser glitch capture probability nyquist duty"
}
]
