Skip to the content
2 layers20 × 110 mmComposerMIDICV, the printed circuit board in 3D

4 HP Eurorack USB/TRS MIDI-to-CV module: RP2354A firmware, KiCad hardware and v1.0 manufacturing files.

Size
20 × 110 mm
Copper layers
2
Thickness
2.09 mm
Parts
87
Nets
93
Pads
328
Tracks, vias
736, 74
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
14 Oct 2026
Updated
28 Oct 2026

Overview

ComposerMIDICV is an open-source printed circuit board by CopycatMusic, from the CopycatMusic/ComposerMIDICV repository on GitHub, published under the AGPL-3.0 licence. It is a 2-layer board of 20 × 110 mm with 87 parts on 93 nets, routed with 736 tracks and 74 vias.

It is built around the RP2354A, 74AHCT244PW and MCP4822-E/SN, with the 78L05G-AB3-R, ABM8-272-T3 and HT7533-1 among its other parts. Its parts include 29 resistors, 28 capacitors, 11 ICs, 10 connectors and 4 switches. It belongs with the audio and music boards and the RP2350 boards of this library.

Main components

12

README

README.md

Composer MIDICV

A four-channel MIDI-to-CV/Gate Eurorack module, built around the RP2354A.

Composer connects a DAW or MIDI instrument to analog synthesizers through USB MIDI or a 3.5 mm TRS MIDI input. Four CV outputs and four Gate outputs provide pitch, velocity, modulation, random voltages and clock signals across six hardware-selected modes.

Prototype

USER_MANUAL · Firmware guide · ManufacturingGuide

Features

  • USB MIDI input and TRS MIDI input
  • Four unipolar CV outputs, with a firmware range of 0–8 V
  • Four nominal 0/5 V Gate outputs
  • Mono, dual-voice and four-voice MIDI modes, plus three dual-voice clock/transport modes.
  • RGB note feedback, out-of-range indication and mode-change feedback.

Specifications

ParameterSpecification
Hardware revisionv1.0
Format3U Eurorack, 4 HP
Front-panel dimensions20.3 × 128.5 mm
Mainboard dimensions20 × 110 mm
Power supply+12 V via a 10-pin Eurorack header
Typical +12 V current draw20 mA
Recommended +12 V supply allocation50 mA
MIDI inputsUSB MIDI device and 3.5 mm TRS MIDI Type A
CV outputs4 channels, 0–8 V, unipolar
Pitch scaling1 V/oct; MIDI note 36 = 0 V
Pitch bend±2 semitones, fixed
Gate outputs4 channels, nominal 0/5 V
Trigger pulse width10 ms for note-on and clock triggers
DAC resolution12 bits per channel; two MCP4822 dual-channel DACs
Panel modes6
CalibrationPer-channel two-point correction, saved to flash

Modes

Modes are selected by the two panel switches, not by changing the MIDI channel. MIDI channels select voices within the active mode.

ModeNameCV1 / CV2 / CV3 / CV4Gate1 / Gate2 / Gate3 / Gate4
1midi1Pitch / Velocity / CC1 / Random S&HGate / Gate / Note trigger / Note trigger
2midi2Voice 1 pitch / Velocity / Voice 2 pitch / VelocityVoice 1 gate / Trigger / Voice 2 gate / Trigger
3midi3Voice 1 / 2 / 3 / 4 pitchVoice 1 / 2 / 3 / 4 gate
4sequencer1Voice 1 pitch / Velocity / Voice 2 pitch / VelocityRun / Reset / 1 PPQN / 8 PPQN
5sequencer2Voice 1 pitch / Velocity / Voice 2 pitch / VelocityRun / Reset / 2 PPQN / 12 PPQN
6sequencer3Voice 1 pitch / Velocity / Voice 2 pitch / VelocityRun / Reset / 4 PPQN / 24 PPQN

In the dual-voice modes, MIDI channels 1–8 control Voice 1 and 9–16 control Voice 2. In midi3, the channel groups are 1–4, 5–8, 9–12 and 13–16. Each group controls one voice; playing a chord on a single channel does not automatically distribute it across four outputs.

Pitch conversion uses MIDI note 36 = 0 V, with one octave per volt and a fixed pitch-bend range of approximately ±2 semitones. Velocity and CC1 map linearly from 0–127 to 0–8 V. The manual includes complete routing tables and patch examples.

Quick start

  1. With the rack powered off, connect the module's 10-pin power header in the correct orientation. v1.0 uses the rack's +12 V rail; USB-C provides the data connection and does not replace the module power supply.
  2. Power the module and connect USB-C to a computer using a data cable, or connect a MIDI source to the TRS Type A input.
  3. Select midi1. In your DAW, choose Composer MIDICV / MIDICV MIDI as the MIDI output destination; the exact displayed name depends on the host.
  4. Patch CV1 to a VCO's 1 V/oct input and Gate1 to an envelope gate input. Send notes on MIDI channel 1, starting at note 36 or higher.
  5. For modes 4–6, enable MIDI Clock and Start/Continue/Stop output to the module as well as MIDI notes.

See the user manual for power pin assignments, the mode selector, dual/four-voice patches, clock routing, flashing, calibration and troubleshooting.

Design

The firmware is written in C, using Raspberry Pi Pico SDK 2.2.0 and TinyUSB. USB packets and the UART MIDI stream are decoded into a common event format, then dispatched to the selected mode. The mode engine updates a shared output state; a 1 ms service loop handles switches, triggers, LEDs and output updates.

Two MCP4822 dual-channel 12-bit DACs provide four CV channels through SPI frames generated by GPIO. An OPA4991 analog stage scales the DAC outputs, while a 74AHCT244 buffer drives the DAC interface and Gate signals. The TRS input uses a TLP2361 optocoupler. The mainboard and front panel are maintained as KiCad 10 projects.

The firmware separates hardware drivers, MIDI parsing/routing, musical modes, pitch/calibration and UI feedback. The six default modes are defined in mode_config.c.

Build and flash

Install CMake 3.22+, Ninja, Python 3 and an Arm GNU embedded toolchain with newlib and nosys.specs. The local build uses Arm GNU 14.2.Rel1. Put arm-none-eabi-gcc and the accompanying tools on PATH.

From the project root, initialize the SDK dependency:

sh
git submodule update --init --recursive third_party/pico-sdk

macOS / Linux:

sh
export PICO_SDK_PATH="$PWD/third_party/pico-sdk"
cmake -S firmware -B firmware/build-arm -G Ninja \
  -DPICO_PLATFORM=rp2350-arm-s -DPICO_BOARD=pico2 \
  -DCMAKE_BUILD_TYPE=Release
cmake --build firmware/build-arm --parallel

Windows PowerShell:

powershell
$env:PICO_SDK_PATH = Join-Path $PWD "third_party/pico-sdk"
cmake -S firmware -B firmware/build-arm -G Ninja -DPICO_PLATFORM=rp2350-arm-s -DPICO_BOARD=pico2 -DCMAKE_BUILD_TYPE=Release
cmake --build firmware/build-arm --parallel

The build produces firmware/build-arm/composer_midicv.uf2 and copies it to firmware/dist/composer_midicv.uf2. pico2 supplies the SDK build configuration for the custom RP2354A board; the module's pin mapping is defined in the firmware.

With module power available, enter USB boot mode by holding BOOTSEL while resetting the board with RUN. Connect USB and copy the UF2 to the mounted RP2350 boot drive, then allow the board to reboot. See the flashing instructions for the full sequence.

Hardware and manufacturing files

Use the v1.0 mainboard files together with the current panel files:

ResourceLocation
Mainboard KiCad projectComposerMIDICV.kicad_pro
Mainboard schematicComposerMIDICV.kicad_sch
Mainboard PCBComposerMIDICV.kicad_pcb
v1.0 production BOMCOMPOSERv1.0_bom.csv
v1.0 Gerber and drill filesCOMPOSERv1.0Gerber.zip
v1.0 pick-and-place coordinatesCOMPOSERv1.0_positions.csv
Front-panel KiCad projectComposerPanel.kicad_pro
Front-panel manufacturing filesComposerPanel.zip
Front-panel artworkPanel silkscreen SVG
Earlier revisionshardware/legacy

Use the v1.0 production BOM linked above for the current revision. Some BOM entries require separate sourcing, including the jacks and RP2354A; the L3 supplier field contains a manufacturer part number rather than an LCSC C... identifier.

The symbols and custom footprints used in v1.0 are included as project-local snapshots. Install the standard KiCad 10 libraries; optional 3D models still use external library variables. See the manufacturing guide for file selection and library details.

License

The author's original source and design files use AGPL-3.0-only; see LICENSE. Third-party material retains its own licence; see THIRD_PARTY_NOTICES.md.

Contact

Email: tg3299182383@gmail.com

Parts

87
QtyValueFootprintReferences
12100nFPCM_JLCPCB:C_0402C2, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15
1010kΩPCM_JLCPCB:R_0603R7, R21, R22, R23, R24, R25, R26, R27, R28, R29
101kΩPCM_JLCPCB:R_0603R8, R9, R10, R11, R12, R13, R14, R15, R16, R17
8AudioJack2_SwitchTAudioJacks:Jack_3.5mm_QingPu_WQP-PJ301M-12_VerticalJ1, J2, J3, J4, J5, J6, J7, J8
5100nFPCM_JLCPCB:C_0603C18, C26, C29, C31, C33
2100kΩPCM_JLCPCB:R_0402R19, R20
210uFPCM_JLCPCB:C_0603C27, C28
210uFPCM_JLCPCB:C_0805C16, C21
215pFPCM_JLCPCB:C_0402C3, C4
233ΩPCM_JLCPCB:R_0402R2, R3
25.1kΩPCM_JLCPCB:R_0603R5, R6
2MCP4822-E/SNEasyEDA:SOIC-8_L4.9-W3.9-P1.27-LS6.0-BLU8, U9
2TS-1088-AR02016EasyEDA:SW-SMD_L3.9-W3.0-P4.45SW1, SW2
1100nFPCM_JLCPCB:C_0805C20
11N4148WSPCM_JLCPCB:D_SOD-323D2
11N5819WSEasyEDA:SOD-323_L1.8-W1.3-LS2.5-RDD1
11kΩPCM_JLCPCB:R_0402R1
11uFPCM_JLCPCB:C_0805C1
1220ΩPCM_JLCPCB:R_0603R18
13.3uHResistor_SMD:R_0805_2012MetricL3
14.7uFPCM_JLCPCB:C_0402C17
14.7uFPCM_JLCPCB:C_0805C19
14.7uFPCM_JLCPCB:C_0603C32
1470ΩPCM_JLCPCB:R_0603R4
174AHCT244PWEasyEDA:TSSOP-20_L6.5-W4.4-P0.65-LS6.4-BLU7
178L05G-AB3-REasyEDA:SOT-89-3_L4.5-W2.5-P1.50-LS4.2-BRU4
1ABM8-272-T3_C20625731EasyEDA:CRYSTAL-SMD_4P-L3.2-W2.5-BLU2
1AudioJack3AudioJacks:Jack_3.5mm_QingPu_WQP-PJ366ST_VerticalJ9
1HDR-IDC-2.54-2X5PEasyEDA:IDC-TH_10P-P2.54_C5665P1
1HT7533-1_C14289EasyEDA:SOT-89-3_L4.5-W2.5-P1.50-LS4.2-BRU5
1MT-0-102-A101-M200-RS+PJEasyEDA:SW-TH_MT-0-103-A101-M200-RSSW3
1MT-0-103-A101-M200-RS+PJEasyEDA:SW-TH_MT-0-103-A101-M200-RSSW4
1OPA4991IPWREasyEDA:TSSOP-14_L5.0-W4.4-P0.65-LS6.4-BLU6
1PH2.54-01-04PZDEasyEDA:HDR-TH_4P-P2.54-V-M-1H1
1RP2354APackage_DFN_QFN:QFN-60-1EP_7x7mm_P0.4mm_EP3.4x3.4mmU1
1TJ-L5FPTXHMCYLCRGB-A5EasyEDA:LED-TH_4P-BD5.8-P1.30U3
1TLP2361EasyEDA:OPTO-SMD-5_L3.7-W4.6-P1.27-LS7.0-BRU11
1TYPE-C 14PLC-H10.0EasyEDA:USB-C-TH_SHOUHAN_TYPE-C-14PLC-H10.0U10

The 86 most common of 87 parts.

Similar boards

  • 4 layers85.9 × 85.9 mmPd1180-epr r0.3, the printed circuit board in 3D

    Pd1180-epr r0.3

    techmannih/pd1180-epr

    PD1180-EPR — NEMA 34 Smart Motor-Mounted Stepper Controller with USB-C PD 3.1 EPR

    277 parts
  • 4 layers49.1 × 54.3 mmRp2350-hdmi hexpansion, the printed circuit board in 3D

    Rp2350-hdmi hexpansion

    Corteil/rp2350-hdmi-hexpansion

    RP2350 HDMI hexpansion for the EMF Tildagon badge -- mirrors the badge's display to a monitor over HSTX/DVI

    57 parts2
  • 4 layers40 × 40 mmSatellite, the printed circuit board in 3D

    Satellite

    ciborg971/KISSE-1

    A homebuilt aicraft made with the same philosophy as the linux kernel ... and electric

    116 parts1MIT
  • 4 layers50 × 50 mm50x50 2 Layer, the printed circuit board in 3D

    50x50 2 Layer

    UC-Aerospace/Electrical-Tut-26

    2026 Avionics tutorial example boards for UC Aerospace

    86 parts
  • 2 layers58.2 × 60 mmInty FujiCard, the printed circuit board in 3D

    Inty FujiCard

    FujiNetWIFI/fujinet-hardware

    Schematics and design files for FujiNet hardware

    78 parts142
  • 4 layers76 × 54 mmPixelblaze battery backpack, the printed circuit board in 3D

    Pixelblaze battery backpack

    SK-Electronics-Consulting/electronics-widgets

    Small, Custom Tools for Electronics

    112 parts1
  • 4 layers26.8 × 53 mmAtmega dev board, the printed circuit board in 3D

    Atmega dev board

    hollop90/arduino-dolly

    A clone of the arduino nano

    42 parts
  • 4 layers76 × 100 mmChlorine revD, the printed circuit board in 3D

    Chlorine revD

    kanengomibako/Chlorine

    206 parts11Unlicense

Questions

How big is the ComposerMIDICV PCB?

It measures 20 × 110 mm and has 2 copper layers, 2.09 mm thick.

What parts does the ComposerMIDICV use?

87 parts, built around the RP2354A, 74AHCT244PW, MCP4822-E/SN and 78L05G-AB3-R. 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 ComposerMIDICV KiCad files?

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

Can I use the ComposerMIDICV design in my own project?

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