Skip to the content
PCBKitNew board
2 layers16 × 110 mmGatekeeper, the printed circuit board in 3D

A digital gate/trigger processor for Eurorack modular synthesizers. Gatekeeper has a two-state (0 or 5V) output driven by push button and CV input. The input response is configurable via menu settings.

Size
16 × 110 mm
Copper layers
2
Thickness
1.6 mm
Parts
33
Nets
21
Pads
97
Tracks, vias
143, 48
Pours
4
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
6 Feb 2025
Updated
12 Aug 2026

Overview

Gatekeeper is an open-source printed circuit board by mjrskiles, from the mjrskiles/gatekeeper repository on GitHub, published under the MIT licence. It is a 2-layer board of 16 × 110 mm with 33 parts on 21 nets, routed with 143 tracks and 48 vias.

It is built around the ATTINY85V-10SU, PMEG4010CEH and MMBT3904. Its parts include 10 capacitors, 8 resistors, 4 diodes, 4 connectors and 2 ICs. It belongs with the AVR (ATmega, ATtiny) boards of this library.

Main components

3

README

README.md

Gatekeeper

License: MIT

A digital gate/trigger processor for Eurorack modular synthesizers. Gatekeeper has a two-state (0 or 5V) output driven by push button and CV input. The input response is configurable via menu settings.

This project is designed as a reference for hackers of all types. We assume hardware and coding knowledge, but those with a strong desire to learn and build will find this an approachable beginner hardware project.

Features

  • Five Operating Modes:

    • Gate: Output stays high while input is held
    • Trigger: Rising edge triggers a fixed-duration pulse (1-50ms)
    • Toggle: Each press flips the output state
    • Divide: Clock divider - outputs every N rising edges (2-24)
    • Cycle: Internal clock generator
  • Persistent Settings: Mode selection is saved to EEPROM and restored on power-up. Factory reset is available by holding both buttons for 3 seconds during startup.

  • Debounced Input: Robust button state detection with rising and falling edge detection.

  • Configuration Gestures:

    • Menu Enter: Hold Button A, then hold Button B (500ms each) to enter menu
    • Menu Exit: Hold Button A (500ms) to exit menu immediately
    • Mode Change: Hold Button A (500ms), then release to cycle modes
    • Menu Navigation: Tap Button A to change page, tap Button B to cycle values
  • Hardware Abstraction Layer (HAL): Clean interface for hardware access, enabling comprehensive unit testing on the host machine.

  • Unit Testing: 152 tests using the Unity framework verify functionality without hardware.

  • Native Simulator: Interactive terminal UI or headless JSON output for development without hardware.

Hardware

Target: ATtiny85 @ 8 MHz (internal RC oscillator)

ResourceSizeUsage
Flash8 KB~87% used
SRAM512 B~38% used
EEPROM512 B17 bytes used (~3%)

Pin Assignment:

PinFunction
PB0Neopixel data
PB1CV output
PB2Button A (menu/secondary)
PB3CV input (analog via ADC)
PB4Button B (primary/gate control)
PB5RESET

LED X and Y are Neopixels connected to PB0.

Code Architecture

The firmware is organized into reusable library code (lib/) and application-specific code (src/), with headers alongside sources:

text
lib/                    src/
├── events/             ├── config/
├── fsm/                ├── core/
├── hardware/           ├── hardware/
├── input/              ├── modes/
├── output/             ├── output/
└── utility/            ├── app_init.c/.h
                        └── main.c

Key modules:

ModulePurpose
core/Application coordinator - manages FSM hierarchy, routes events
fsm/Generic table-driven FSM engine (reusable library)
events/Event processor - button gestures, CV edge detection
modes/Signal processing modes (Gate, Trigger, Toggle, Divide, Cycle)
hardware/HAL implementation (pin control, timers, EEPROM)
input/Button debouncing and edge detection
output/CV output behaviors
app_init.cStartup sequence, settings validation, factory reset

See docs/ARCHITECTURE.md for detailed documentation including data flow diagrams, EEPROM layout, and extension guides.

Build Instructions

Prerequisites

Firmware build:

  • AVR-GCC toolchain (avr-gcc, avr-objcopy, avr-size, avr-strip)
  • CMake 3.21+
  • Optional: avrdude (flashing), bc + avr-nm (size analysis)

Test/Simulator build (no AVR toolchain needed):

  • GCC (host compiler)
  • CMake 3.21+

Install on Debian/Ubuntu:

bash
# Tests only
sudo apt install build-essential cmake

# Firmware (minimal)
sudo apt install gcc-avr avr-libc cmake

# Firmware (full: build + flash + analysis)
sudo apt install gcc-avr avr-libc binutils-avr avrdude cmake bc

Quick Start

bash
# Build firmware
cmake --preset firmware && cmake --build --preset firmware

# Build and run tests
cmake --preset tests && cmake --build --preset tests
ctest --preset tests

# Build and run simulator
cmake --preset sim && cmake --build --preset sim
./build/sim/sim/gatekeeper-sim

Native Simulator

The simulator is under construction.

Flashing

bash
make flash        # Program firmware
make fuses        # Set fuse configuration
make read_fuses   # Verify fuses

Default programmer: stk500v2 on /dev/ttyACM0. Override with:

bash
cmake -DPROGRAMMER=usbasp -DPROGRAMMER_PORT=/dev/ttyUSB0 ..

License

MIT

Parts

33
QtyValueFootprintReferences
8100nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC2, C4, C5, C6, C7, C8, C11, C12
410KResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1, R3, R4, R5
210uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC1, C9
2NEOPIXELLED_THT:LED_D5.0mm-4_RGBLED1, LED2
2PMEG4010CEHDiode_SMD:D_SOD-123FD1, D3
2SW_PushButton_Switch_THT:SW_PUSH_6mmSW1, SW2
2~mjrskiles:THONKICONNJ1, J2
1100Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR2
1330Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR8
14.7KResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR6
1470Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR7
1ATtiny85V-10SPackage_SO:SOIC-8W_5.3x5.3mm_P1.27mmU2
1Conn_02x03_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_VerticalJ4
1Conn_02x05_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_VerticalJ3
1FerriteBeadInductor_SMD:L_0805_2012MetricFB1
1MCP1703Ax-500xxDBPackage_TO_SOT_SMD:SOT-223-3_TabPin2U1
1MMBT3904Package_TO_SOT_SMD:SOT-23Q1

The 32 most common of 33 parts.

Questions

How big is the Gatekeeper PCB?

It measures 16 × 110 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Gatekeeper use?

33 parts, built around the ATTINY85V-10SU, PMEG4010CEH and MMBT3904. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Gatekeeper KiCad files?

From the mjrskiles/gatekeeper repository on GitHub, at the commit this page was made from: the board is hardware/gatekeeper/gatekeeper.kicad_pcb and its schematic hardware/gatekeeper/gatekeeper.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Gatekeeper design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers54 × 29 mmSonos magic hub, the printed circuit board in 3D

    Sonos magic hub

    perja12/sonos_magic_hub

    Circuit for using the LG OLED C9 TV remote (LG Magic Remote) with the Sonos Playbar.

    18 parts3Apache-2.0
  • 2 layers79.4 × 49.1 mmIr beacon, the printed circuit board in 3D

    Ir beacon

    perja12/roomba_beacon

    IR beacon that can be used to limit where the Roomba vacuum cleaner goes.

    20 partsMIT
  • 2 layers44.5 × 53.5 mmTJA1055-3, the printed circuit board in 3D

    TJA1055-3

    korni92/TJA1055-3-Breakout-Board

    To use with 3,3V micocontroller like ESP or PI.

    38 parts2
  • 4 layers352.3 × 159.3 mmTubender PCB, the printed circuit board in 3D

    Tubender PCB

    smvumbaco/Tubender-FA24

    Generate Hardware - Tubender Fall 2024

    264 parts2
  • 2 layers79.7 × 54 mmLapX, the printed circuit board in 3D

    LapX

    alexnaet/LapX

    PCB fürn Igel

    113 parts1
  • 4 layers96 × 74 mmAes dac, the printed circuit board in 3D

    Aes dac

    sschwaab/aes-dac

    Affordable DAC for professional live Audio applications

    145 parts1
  • 4 layers35.7 × 35.7 mmOpendocimeter v2, the printed circuit board in 3D

    Opendocimeter v2

    georges-mars/Docimeter

    A wearable redesign of the OpenDosimeter platform focused on compact electronics, custom PCB integration, embedded firmware, and practical radiation-monitoring applications.

    133 parts