Files
SN-L00/docs/DESIGN.md
T
florian.berthold d103b2732c Add BOM and design documentation
- BOM with LCSC part numbers for PCBWay assembly
- Hand-solder module sources (RP2040-Zero, OLED)
- Design doc with block diagram, specs, GPIO pinout
- Panel layout concept for 6 HP
2026-01-23 02:49:30 +01:00

4.1 KiB
Raw Blame History

SN-L00 Design Document

Overview

The SN-L00 is a 6 HP Eurorack module that measures round-trip latency in audio/CV signal chains.

Block Diagram

+12V ──┬── LDO ──── 3.3V ──── RP2040-Zero ──── OLED Display
       │                          │    │
       │                          │    └── I2C (SDA/SCL)
       │                          │
GND ───┴──────────────────────────┤
                                  │
              ┌───────────────────┼───────────────────┐
              │                   │                   │
         TRIG OUT            RETURN IN            BUTTON
              │                   │                   │
         74LVC1G17            MCP6001            Tactile
         (buffer)            (buffer)             switch
              │                   │
              ▼                   ▼
         3.5mm Jack          3.5mm Jack

Signal Flow

Trigger Output

  1. RP2040 GPIO generates 5ms pulse (configurable)
  2. 74LVC1G17 Schmitt buffer cleans edge, provides drive strength
  3. Output: 0-3.3V trigger compatible with Eurorack gate inputs

Return Input

  1. Eurorack signal (0-5V typical, can be ±5V audio)
  2. Protection diodes clamp to 3.3V rail
  3. MCP6001 op-amp buffers signal
  4. Voltage divider if needed for >3.3V signals
  5. RP2040 GPIO reads with internal Schmitt trigger

Measurement

  1. RP2040 starts timer on trigger output rising edge
  2. Timer stops on return input rising edge
  3. Latency = timer count × timer resolution
  4. Display updates with result in ms

Specifications

Parameter Value
Width 6 HP (30.00mm)
Depth <25mm (skiff-friendly)
Power +12V ~20mA
Power -12V 0mA (not used)
Trigger output 0-3.3V, 5ms default
Input threshold ~1.5V (adjustable in firmware)
Resolution <10μs (RP2040 @ 125MHz)
Range 0.01ms - 999ms
Display 128x32 OLED, I2C

Operating Modes

Mode 1: Single Shot

  • Press button to trigger measurement
  • Display shows result until next measurement
  • LED blinks on trigger

Mode 2: Continuous

  • Hold button 2s to enter continuous mode
  • Triggers every 500ms, displays live reading
  • Shows min/max/average
  • Press button to exit

Mode 3: Statistics

  • After measurements, short press cycles through:
    • Last reading
    • Minimum
    • Maximum
    • Average (last 10)

Panel Layout (6 HP)

┌─────────────────────┐
│      SN-L00         │
│                     │
│   ┌───────────┐     │
│   │   OLED    │     │
│   │  12.4 ms  │     │
│   └───────────┘     │
│                     │
│       [BTN]         │
│                     │
│   ○ OUT    ○ IN     │
│   TRIG    RETURN    │
│                     │
│        ● PWR        │
└─────────────────────┘

Firmware Architecture

main.c
├── init_gpio()          # Configure pins
├── init_i2c()           # OLED communication
├── init_timer()         # High-resolution timer
│
├── trigger_pulse()      # Generate output pulse
├── wait_for_return()    # Monitor input with timeout
├── calculate_latency()  # Timer math
│
├── display_update()     # OLED rendering
├── button_handler()     # Mode switching
└── main_loop()          # State machine

GPIO Assignments (RP2040-Zero)

GPIO Function Notes
GP0 I2C SDA OLED
GP1 I2C SCL OLED
GP2 Trigger Out Via 74LVC1G17
GP3 Return In Via MCP6001
GP4 Button Internal pullup
GP5 Power LED Optional

Future Expansion Ideas

  • CV output proportional to latency
  • MIDI output (latency as CC)
  • USB logging to computer
  • Multiple trigger patterns (burst, random)
  • Frequency response mode (sweep test)