I/O modules

AXO-012 — 4×4 matrix keypad interface PMOD module

Catalog #12 in the AruviX output line, level L2. Interface board for the ubiquitous 8-pin 4×4 membrane keypad (its ribbon plugs into J2).

Level L2 ERC clean DRC clean Fab package 17 components
3D render of the AXO-012 PCB
Rendered from the PCB layout. No physical board has been manufactured.

Circuit review & bench-test guide →

Components#

Every placed component, with the reason it is on the board. Extracted directly from the schematic, so this cannot drift from the design.

RefValueWhat it does on this boardPart numberFootprint
C1 100nF 16V X7R Rail decoupling for the pull-ups / TVS rail clamp GRM188R71C104KA01D
Murata
C_0603_1608Metric
D1 CDSOT236-0504C DNP 4-channel ESD/TVS array on the keypad-side ROW lines (fit for harsh ESD) CDSOT236-0504C
Bourns
Datasheet ↗
SOT-23-6
D2 CDSOT236-0504C DNP 4-channel ESD/TVS array on the keypad-side COL lines (fit for harsh ESD) CDSOT236-0504C
Bourns
Datasheet ↗
SOT-23-6
J1 PMOD PLUG 2x6 PMOD peripheral plug (Digilent spec 1.2) not selected
generic
PinHeader_2x06_P2.54mm_Horizontal
J2 KEYPAD 1x8 SOCKET Socket for the common 8-pin 4x4 membrane keypad ribbon not selected
generic
PinSocket_1x08_P2.54mm_Vertical
R1 100R Row 1 series resistor (host-driven; miswire current bound) RC0603FR-07100RL
Yageo
Datasheet ↗
R_0603_1608Metric
R2 100R Row 2 series resistor (host-driven; miswire current bound) RC0603FR-07100RL
Yageo
Datasheet ↗
R_0603_1608Metric
R3 100R Row 3 series resistor (host-driven; miswire current bound) RC0603FR-07100RL
Yageo
Datasheet ↗
R_0603_1608Metric
R4 100R Row 4 series resistor (host-driven; miswire current bound) RC0603FR-07100RL
Yageo
Datasheet ↗
R_0603_1608Metric
R5 100R Column 1 series resistor (keypad-driven read line) RC0603FR-07100RL
Yageo
Datasheet ↗
R_0603_1608Metric
R6 100R Column 2 series resistor (keypad-driven read line) RC0603FR-07100RL
Yageo
Datasheet ↗
R_0603_1608Metric
R7 100R Column 3 series resistor (keypad-driven read line) RC0603FR-07100RL
Yageo
Datasheet ↗
R_0603_1608Metric
R8 100R Column 4 series resistor (keypad-driven read line) RC0603FR-07100RL
Yageo
Datasheet ↗
R_0603_1608Metric
R9 10k Column 1 pull-up: idle high, pressed key pulls low via the row RC0603FR-0710KL
Yageo
Datasheet ↗
R_0603_1608Metric
R10 10k Column 2 pull-up: idle high, pressed key pulls low via the row RC0603FR-0710KL
Yageo
Datasheet ↗
R_0603_1608Metric
R11 10k Column 3 pull-up: idle high, pressed key pulls low via the row RC0603FR-0710KL
Yageo
Datasheet ↗
R_0603_1608Metric
R12 10k Column 4 pull-up: idle high, pressed key pulls low via the row RC0603FR-0710KL
Yageo
Datasheet ↗
R_0603_1608Metric

Signals#

Net labels used in the schematic, which are also the names the HDL top level should use.

3V3 COL1 COL1_K COL2 COL2_K COL3 COL3_K COL4 COL4_K GND ROW1 ROW1_K ROW2 ROW2_K ROW3 ROW3_K ROW4 ROW4_K

Production status#

Schematic ERC0 violations
PCB layoutcomplete
DRC0 violations
Fab packageexported (24 gerbers + drill + CPL + BOM)
Fabricatedno — design stage only

Source: boards/io-modules/axo-012-keypad


Catalog #12 in the AruviX output line (../README.md), level L2. Interface board for the ubiquitous 8-pin 4×4 membrane keypad (its ribbon plugs into J2).

Status: schematic generated, ERC clean (0/0), netlist reviewed. PCB layout not started. Not released.

What it teaches#

Matrix scanning (keypad_scan HDL core): drive one row low at a time, read the four pulled-up columns — a low column identifies the key at (row, col). Rotate at ~1 kHz; debounce in fabric by reusing the sensor-line debounce core (membrane domes bounce for milliseconds; the line rule is HDL debounce, not RC-only). Ghosting/rollover limits of a diode-less matrix are part of the lesson.

Design#

PMOD pin map (Type 1 GPIO)#

PMOD pin123456789101112
NetROW1ROW2ROW3ROW4GND3V3COL1COL2COL3COL4GND3V3

Rows = host outputs (one low at a time); columns = host inputs (idle high).

Regenerate#

python3 generate_design.py

Remaining for release#