Files
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

136 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)