← AXS-001

Circuit review & bench-test guide

AXS-001 — Button & switch pack PMOD module

Design-stage — board not yet fabricated

Document purpose#

This document explains the axs-001-buttons PMOD module at component level and turns the design evidence into a practical manual-review and bench-test plan. It is based on the authoritative generator script (generate_design.py), the generated schematic, the README, and the ERC report in this directory.

This board has never been fabricated. Its status is schematic-only: ERC clean (0 errors, 0 warnings), netlist reviewed, PCB layout not started, not released. Every voltage, current, and timing number below is a design target to verify on a future first article, not a proven measurement.

1. What the board does#

The board is a passive input pack for the AruviX sensor line (catalog #1, level L1, GPIO). Four tactile buttons drive PMOD pins 1–4 active low (10 kΩ pull-up to 3V3, button shorts the node to GND), and one SPDT slide switch drives PMOD pin 7 with a rail level (3V3 or GND) selected by its position. There is deliberately no hardware debouncing: observing and debouncing contact bounce in FPGA fabric is the point of the module. Every module-driven line leaves through a 100 Ω series resistor (the line-wide miswire-tolerance rule).

There are no active devices, no regulators, and no protection diodes. The module consumes essentially zero current until a button is held.

Functional block diagram#

        3V3 (PMOD 6/12)
         │
         ├── R1 10k ──┬── BTN1_N ── R5 100R ──> BTN1 (PMOD 1)
         │           SW1 (to GND)
         ├── R2 10k ──┬── BTN2_N ── R6 100R ──> BTN2 (PMOD 2)
         │           SW2 (to GND)
         ├── R3 10k ──┬── BTN3_N ── R7 100R ──> BTN3 (PMOD 3)
         │           SW3 (to GND)
         ├── R4 10k ──┬── BTN4_N ── R8 100R ──> BTN4 (PMOD 4)
         │           SW4 (to GND)
         │
         └──(throw A)─┐
                     SW5 SPDT ── SLIDE_C ── R9 100R ──> SLIDE (PMOD 7)
        GND ─(throw B)─┘

        GND (PMOD 5/11)

2. Safety and scope boundaries#

3. Signal and power sequence#

  1. 3V3 and GND arrive on PMOD pins 6/12 and 5/11 (or the bench supply). There is no local regulation or bulk capacitance; the host rail is used directly.
  2. With no button pressed, R1–R4 pull BTN1_N–BTN4_N to 3V3. The PMOD lines BTN1–BTN4 read logic 1 through R5–R8 (no DC load, so no drop).
  3. Pressing SWx shorts BTNx_N to GND. The line falls to about 0 V; the only static current is 3.3 V / 10 kΩ ≈ 0.33 mA through the pull-up.
  4. On press and release the mechanical contacts bounce for a device- and press-dependent time (typically a few ms; Alps does not publish a bounce spec for this part). The host sees multiple edges — this is expected and is the debouncing lesson.
  5. SW5's common (SLIDE_C) is tied to 3V3 in one position and GND in the other, so SLIDE always carries a defined level except during the brief non-shorting transition, when the line floats (no pull resistor on SLIDE_C — position, not level, defines the state).

4. Interfaces#

One connector only. PMOD Type 1 (GPIO), Digilent spec 1.2, 2×6 right-angle male plug.

PMOD pin123456789101112
NetBTN1BTN2BTN3BTN4GND3V3SLIDENCNCNCGND3V3

Buttons read 0 when pressed. SLIDE reads the switch position. Pins 8–10 are unconnected. There are no test points in the current schematic; probe the PMOD pins and the resistor pads directly.

5. Component-by-component review#

5.1 Connector#

Ref.PartFunction and why neededIf absent/openIf wrong or misassembled
J1Generic 2×6 right-angle 2.54 mm male header (PMOD plug, MPN TBD)Sole power and signal interface to the hostNo board functionMirrored/mispinned assembly can put 3V3 on a signal pin or swap GND and 3V3 at the host — buzz the pinout before first plug-in; a cold joint on pin 5/11 (GND) makes all levels float or read high

5.2 Buttons and slide switch#

Ref.Part / datasheet summaryFunction and why neededIf absent/openIf shorted, wrong, or misassembled
SW1–SW4Alps Alpine SKQGABE010, 5.2 × 5.2 × 1.5 mm SMD tactile, 50 mA/12 V DC max, 10 µA/1 V DC min, ≤100 mΩ contact, 1.57 N force, 0.25 mm travel, 1M cycles, −40…+90 °CShorts BTNx_N to GND when pressed; the active-low input sourceChannel is stuck at logic 1 (pull-up wins); press has no effectA stuck-closed or solder-bridged switch holds the line at 0 permanently; a rotated part may connect the wrong pin pair (verify the footprint's pin pairing — many 4-pad tactiles have internally paired pins)
SW5C&K JS102011SAQN, JS-series subminiature SPDT slide, 0.3 A/6 V DC rating, ≤70 mΩ contact, 5k cycles at full rating, positive detent, SMD reflow-capableSelects whether SLIDE_C is tied to 3V3 or GND, giving a static level inputSLIDE floats and reads an undefined level (no pull resistor on this net by design)Pins 1/3 swapped inverts the position-to-level mapping (annoying, not damaging); a bridge across the throws shorts 3V3 to GND through ≤70 mΩ — this is the one solder defect on this board that directly shorts the rail

5.3 Resistors#

Refs.Value / partFunction and why neededIf absent/openIf wrong value or shorted
R1–R410 kΩ 0603, Yageo RC0603FR-0710KLPull-up making each button channel active-low with a defined idle level; sets the 0.33 mA pressed currentBTNx_N floats when the button is up: the line reads erratic/EMI-driven levels and the host sees phantom pressesToo small (e.g. 100 Ω by reel mix-up) burns 33 mA per pressed button and may exceed the switch's 50 mA rating margin under transients; too large (1 MΩ) makes the node slow and noise-prone; a shorted pull-up ties the line hard to 3V3 so presses drive 3.3 V across 10 k∥switch — line never reads low
R5–R8100 Ω 0603, Yageo RC0603FR-07100RLSeries protection between BTNx_N and the PMOD line; limits contention current to ~33 mA if the host mistakenly drives the lineChannel is open: line floats at the host regardless of button state (reads stuck or erratic)A wrong high value (10 k by mix-up) forms a divider with the host input and slows edges but usually still works — measure to catch it; shorted (0 Ω) removes miswire protection only, normal function unchanged
R9100 Ω 0603, Yageo RC0603FR-07100RLSame series-protection rule on the slide line; limits host-vs-switch contention to ~33 mASLIDE floats at the host in both switch positionsSame failure modes as R5–R8; note a host output fighting SW5 sees a hard rail through 100 Ω, so sustained contention dissipates ~0.11 W in a resistor rated for less — do not leave a misconfigured host connected

(#FLG01/#FLG02 in the schematic are ERC power flags, not physical parts.)

6. Datasheet summary and design interpretation#

DeviceKey manufacturer factsBoard-specific interpretation
Alps SKQGABE01050 mA/12 V DC max, 10 µA/1 V DC minimum rating, ≤100 mΩ initial contact resistance, 1.57 N operating force, 0.25 mm travel, 1,000,000 cycles, −40…+90 °C, 250 V AC dielectricThe 0.33 mA/3.3 V switched load sits comfortably between the min and max contact ratings, which matters for long-term contact reliability. Alps publishes no bounce-time figure: capture actual bounce on a scope per unit rather than assuming a number. 100 mΩ contact resistance is negligible against 10 kΩ (pressed level within microvolts of GND)
C&K JS102011SAQNSPDT on-on, 0.3 A/6 V DC contact rating, ≤70 mΩ contact resistance, 5,000 cycles at full rating, positive detent, reflow to 260 °CStatic load is zero (the common only feeds a high-impedance input through R9), so the switch operates far below rating and life should exceed the 5k-cycle full-load figure. Slide switches also bounce and can scrub between contacts — expect a messier transition than the buttons, plus a genuine floating interval (non-shorting)
Yageo RC0603 seriesGeneral-purpose thick film, 1%, 0.1 W at 70 °C10 k pull-ups dissipate ~1 mW pressed. The 100 Ω parts dissipate ~0.11 W in a sustained 33 mA contention fault — slightly above the 0.1 W rating, acceptable as short-term miswire protection but not as a permanent operating mode

Official references: Alps SKQGABE010 product page, C&K JS-series datasheet (C&K is now Littelfuse; the URL redirects to the current hosting), Yageo RC thick-film series. Check the latest revision before procurement.

7. Expected values before bench testing#

All values are calculated targets — no board has ever been built or measured.

QuantityDesign targetWhat to measure
Idle current, nothing pressed≈ 0 (leakage only)Bench supply current readout
Current per held button3.3 V / 10 kΩ ≈ 0.33 mASupply current step when pressing
All four buttons held≈ 1.32 mASupply current
BTNx released (idle level)3.30 V (within mV of rail; no DC load)DMM on PMOD pin 1–4
BTNx pressed< 5 mV above GND (contact ≤100 mΩ vs 10 kΩ)DMM on PMOD pin, button held
SLIDE, position "3V3"3.30 VDMM on PMOD pin 7
SLIDE, position "GND"< 5 mVDMM on PMOD pin 7
SLIDE mid-travelfloating (undefined; brief)Scope, slow sweep during actuation
Contact bounce durationnot specified by Alps; typically ≤ ~5 ms, unit-dependentScope single-shot on press and release edges
Resistance PMOD pin to 3V3, button up≈ 10.1 kΩ (R pull-up + R series)Ohmmeter, board unpowered
Resistance PMOD pin to GND, button held≈ 100 Ω (R series + contact)Ohmmeter, board unpowered
3V3-to-GND resistanceopen (> MΩ), both SW5 positionsOhmmeter before first power

8. Manual schematic and assembly review checklist#

9. Ordered bench-test procedure#

Stop at the first abnormal result. Record board serial, equipment, and operator. Phases A–C are standalone (bench supply); phase D repeats the functional checks on a real PMOD host.

A. Unpowered inspection and resistance tests#

  1. Complete the section 8 checklist under magnification.
  2. Ohmmeter 3V3-to-GND: expect open. Repeat with SW5 in the other position.
  3. For each button channel: PMOD pin to 3V3 ≈ 10.1 kΩ released; PMOD pin to GND ≈ 100 Ω held. Verify pin N responds to switch N only (no crosstalk from solder bridges between adjacent channels).
  4. PMOD pin 7 to 3V3 ≈ 100 Ω in one SW5 position, pin 7 to GND ≈ 100 Ω in the other, never both.

B. Standalone power-up (current-limited bench supply)#

  1. Set a bench supply to 3.30 V with the current limit at 50 mA. Connect + to PMOD pins 6/12 and − to pins 5/11 (use both pin pairs if the harness allows; they are commoned on the module).
  2. Power on with nothing pressed: supply current should read ≈ 0 mA (below the resolution of most bench supplies). Any mA-scale idle current means a short or wrong resistor — power down and investigate.
  3. DMM each line: BTN1–BTN4 = 3.30 V, SLIDE = rail level matching position.
  4. Press each button in turn: its line falls to < 5 mV and supply current steps up by ≈ 0.33 mA. Hold all four: ≈ 1.32 mA total. Release: levels and current return.
  5. Toggle SW5 both ways several times; pin 7 alternates cleanly between 3.30 V and < 5 mV.

C. Standalone dynamic tests (scope)#

  1. Scope on a BTNx PMOD pin, 1 V/div, single-shot trigger on falling edge, 1 ms/div. Press the button: capture the press bounce burst. Measure the time from first falling edge to the last transition — this is the number your fabric debouncer must exceed. Repeat on the rising (release) edge, which often bounces differently.
  2. Repeat for all four buttons and several press speeds/angles; record the worst-case bounce duration per switch. Expect unit-to-unit and press-to-press variation; Alps specifies no maximum.
  3. Scope SLIDE during slow actuation: expect a defined level, a brief noisy /floating interval (non-shorting transition), then the opposite level. Confirm no simultaneous-rails behavior (that would be a shorting or bridged switch).
  4. Optional miswire-rule check (bench supply still current-limited): with a button held, source 3.3 V through an ammeter into that BTN pin. Expect ≈ 33 mA limited by the 100 Ω series resistor. Keep it brief — this dissipates ~0.11 W in an 0.1 W part.

D. PMOD host context (host provides 3.3 V)#

  1. Plug into the FPGA host PMOD socket. Confirm host pins for BTN1–BTN4 and SLIDE are constrained as inputs (with host pull-ups disabled, so the module's 10 k pull-ups are the only ones — a host pull-down would form a divider) before configuring the bitstream.
  2. Repeat the section B functional sweep reading levels at the host socket pins (or via a simple fabric design that mirrors inputs to LEDs).
  3. Run the raw-input demo: confirm each button and the slide maps to the expected PMOD pin per the section 4 table.
  4. Run the edge-detection exercise without a debouncer and count events per press — multiple counts per press confirm bounce reaches the fabric. Then enable the debouncer sized from the phase C measurement and confirm exactly one event per press and one per release.

10. Troubleshooting map#

SymptomFirst measurementsLikely areas
Line stuck high, press ignoredOhm PMOD pin to GND while heldSWx open/cold joint, R5–R8 open, wrong footprint pin pairing
Line stuck lowOhm BTNx_N to GND releasedSWx stuck/bridged, R1–R4 open (floats can read low at some hosts)
Idle current mA-scale3V3–GND resistance, per-channel isolationSW5 throw bridge, wrong (low) pull-up value, solder bridge
Pressed level not near 0 VVoltage across R5–R8 while heldHost driving the line (should be input), unexpected host pull-down
Two lines respond to one buttonOhm adjacent BTNx_N nodesSolder bridge between channels
SLIDE erratic in a detentScope pin 7, wiggle switchSW5 joint cracked, R9 open (floating line)
SLIDE inverted vs. legendOhm SLIDE_C to each rail per positionSW5 rotated/throws swapped — document or rework
Works standalone, not in hostHost constraints, host pull settingsPin mapping error, host pull-down fighting pull-up, host pin driven as output

11. Bench record template#

FieldRecord
Board revision / serial
Assembly checklist result (section 8)
Bench supply / DMM / scope IDs and calibration
Unpowered resistance results (A)
Idle and per-button current (B)
Static levels, all channels and both SW5 positions (B)
Worst-case bounce per switch, press and release (C)
SLIDE transition capture (C)
Miswire-current check result, if run (C)
Host used, constraint file hash, host-context results (D)
Deviations, photos, raw-file paths
Reviewer / date / disposition

12. Review conclusion#

The design is intentionally minimal and internally consistent: active-low buttons with defined idle levels, a rail-tied slide switch so SLIDE is never statically floating, and a uniform 100 Ω series-resistor rule that bounds host-miswire current at ~33 mA. Deliberate omissions — no debounce network, no pull on SLIDE_C, no rail protection — are documented lessons, not oversights, but they define the board's limits: it must only ever meet a 3.3 V input-configured host. The principal open risks are that nothing has ever been fabricated or measured, that switch footprint pin-pairing errors are the most likely silent build fault, and that a solder bridge across SW5's throws is the only single defect that directly shorts the host rail. Bounce duration is unspecified by the switch vendor and must be characterized per unit on the bench before the fabric debouncer constant is declared adequate.