# 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)