Midi2CV Mk2

Midi2CV Mk2 is a DIY embeddable MIDI to 4 x CV/Gate converter with extensive configuration options and extra modulation sources (LFO and AHDSR EG).

Midi2CV_mk2#1 (small)



  • +-12V or +-15V, Euro or MOTM power connector
  • 50mA@+15V, 10mA@-15V


  • 4 x CV channels, each could be 0+5V, 0+10V or -5+5V, configurable by jumpers
  • 4 x Gate channels, 0+5V, 0+7V or 0+10V, configurable by a jumper


  • optional MIDI IN LED, blinks when receiving MIDI events


  • optional GATE LED, lit when a note is on


  • MIDI IN connector


  • optional MIDI OUT connector, mirrors MIDI IN


  • held down during power up — enters firmware update mode via MIDI
  • held down while receiving control change, after touch or program change events — learns control CV parameter
  • held down while moving pitch wheel up/down — turns note tuning mode on and off
  • held down for 10 sec while the device is idle — resets the device to defaults

Onboard switches

SW1-4 specify base MIDI channel

  • MONO and DRUM modes use the base channel
  • DUAL mode uses base channel and base channel + 1
  • QUAD mode uses base channel, base channel +1, +2 and +3

1234 ch     1234 ch
.... 01     ...X 09
X... 02     X..X 10
.X.. 03     .X.X 11
XX.. 04     XX.X 12
..X. 05     ..XX 13
X.X. 06     X.XX 14
.XX. 07     .XXX 15
XXX. 08     XXXX 16

SW5-6 specify operation mode:

  • MONO
    CV: note, velocity, pitch bend, control
    Gate: gate, strobe, start, clock
  • DUAL
    CV: note, velocity, note2, velocity2
    Gate: gate, strobe, gate2, strobe2
  • QUAD
    CV: note, note2, note3, note4
    Gate: gate, gate2, gate3, gate4
  • DRUM
    CV: velocity, velocity2, velocity3, velocity4 pulses
    Gate: gate, gate2, gate3, gate4
56 Mode
.. mono
X. dual
.X quad
XX drum

Note CV: 1V/Oct pitch CV with optional micro tuning: every note can be set to output any CV level within selected output range. Can be used for Hz/V, alternate tuning schemes, or to correct VCO tracking imperfections. Note tuning is configured using special operation mode, and could be saved, restored or loaded via sysex message from a computer.

Velocity CV: linear by default, however, you can choose to adjust velocity response curve making it softer, harder or wider:


Control CV: by default, this CV tracks CC 1 (Modulation Wheel) value, however, it could be set to track any CC from 1 to 119, or after touch/program change values. If set to track after touch, the response curve could be adjusted similarly to velocity response curve. Control setting can be “learned” on the fly: hold down LEARN switch and turn/click the desired control knob/button, or press a key on after touch-enabled keyboard to track after touch.

Gate: goes high when a key is down, low when no keys are down. If “strobe gate” option is in effect, gate signal is pulled down for the duration of the strobe every time a key is pressed while some other key is down. This allows envelopes to re-trigger for synths that don’t have Strobe input.

Strobe: goes down for 1 to 5 ms, occurs each time a key is pressed. Strobe length and polarity are configurable by sending a sysex message and the setting is persisted in EEPROM.

Start: goes high when MIDI Start/Continue message is received and down when MIDI Stop message is received.

Clock: goes down for 1 to 5ms each time MIDI clock message is received, could be divided down to 32 triplet, 32th note, 16 triplet, 16th note, 8th note triplet, etc. all the way to 2 bar note. Division factor is configurable by a sysex and the setting is persisted in EEPROM.

In DRUM mode CV outputs produce gate like signals with amplitude proportional to the note velocity. The unit response to 4 predefined notes (by default C3,C3#,D3,D3#) on the base channel. The notes can be configured via sysex and are persisted in EEPROM.

LFO and EG

Starting with firmware version 2.0, Midi2CV Mk2 has two extra modulation sources: LFO and AHDSR EG which can be assigned to any CV output. These modulation sources are controlled by MIDI CC commands sent from an external MIDI controller connected to MIDI IN.

LFO specifications:

  • frequency: 0.1-100Hz
  • shape: triangle, square, ramp up/down, S/H, random PWM, random lines, noise
  • free running or reset on note on
  • fade in 0 – 10sec
  • bipolar or unipolar
  • amplitude control

EG specifications:

  • segments: Attack, Hold, Decay, Sustain, Release
  • segment duration: 0-15sec
  • segment shape: linear, expo, sine
  • legato retrigger: on / off
  • MIDI Clock retrigger: 1/32T – 2bars
  • auto gate control – 0-15sec (similar to MS-20 EG)
  • looping: off, gated, auto
  • inverted: on/off
  • amplitude control

In looping mode EG can be used as a fancy LFO with the shape composed by four linear, exponential or sinusoidal segments with the duration specified by Attack, Hold, Decay, Sustain and Release controls.

Note CV tuning

The default note CV tuning is 1V/Oct for output range 0-10V and -5+5V ranges, and 0.5V/Oct for 0-5V range.

To enable note CV tuning mode, hold down LEARN switch and move Pitchbend wheel up, then release LEARN switch and return Pitchbend wheel to neutral.

To disable note CV tuning mode, hold down LEARN switch and move the Pitchbend wheel down, then release LEARN switch and return Pitchbend wheel to neutral.

While note tuning mode is in effect, hold done a note and use pitch wheel to adjust its pitch. Release the note to remember its pitch.

You can also use Control Change messages to reset, increment/decrement and interpolate note tuning, see the CC table below.

Control Change messages

LFO and AHDSR EG control CCs (v2.0+):

Parameter CC Description
LFO CV 90 0 – none
1 – CV1
2 – CV2
3 – CV3
4 – CV4
LFO Shape 91 0 – triangle
1 – square
2 – ramp up
3 – ramp down
4 – random S/H
5 – random Morse
6 – random lines
7 – noise
LFO Rate 92 0 – 127, 0.1 – 100Hertz
LFO Sync 93 (reserved, [TBI])
LFO Reset 94 0 – free running
1 – reset on note on
LFO Delay 95 0 – 127, 0 – 10sec
LFO Amplitude 96 0 – 127
LFO Bipolar 97 0 – unipolar
1 – bipolar
EG CV 100 0 – none
1 – CV1
2 – CV2
3 – CV3
4 – CV4
EG Attack 101 0 – 127, 0 – 15sec
EG Hold 102 0 – 127, 0 – 15sec
EG Decay 103 0 – 127, 0 – 15sec
EG Sustain 104 0 – 127
EG Release 105 0 – 127, 0 – 15sec
EG Gate 106 0 – 127, 0 – 15sec
EG Amplitude 107 0 – 127
EG Shape 108 0 – linear
1 – expo
2 – sine
EG Retrigger 109 0 – don’t retrigger on legato notes
1 – retrigger on every note on
EG Loop 110 0 – none
1 – loop while note is held down
2 – loop endlessly
EG Sync 111 Retrigger EG in sync with MIDI Clock
0 – none
1 – 1/32T
2 – 1/32
3 – 1/16T
4 – 1/16
5 – 1/8T
6 – 1/16D
7 – 1/8
8 – 1/4T
9 – 1/8D
10 – 1/4
11 – 1/2T
12 – 1/4D
13 – 1/2
14 – 1T
15 – 1/2D
16 – 1
17 – 2T
18 – 1 1/5
19 – 2
EG Invert 112 0 – normal
1 – inverted

While in note tuning mode Midi2CV Mk2 recognizes the following control messages:

CC Value Action
115 > 0 Reset all notes tuning
116 > 0 Reset last note tuning
117 > 0 Increment last note tuning
118 > 0 Decrement last note tuning
119 > 0 Interpolate last note tuning

You can also use pitch wheel to quickly get note tuning into required range.

Sysex data format

Sysex message format:

0xf0, // Sysex
0x29, // PPG manufacturer ID
'2','C','V',0x00, // Midi2CV Product ID
// * Command byte (SysexCmd)
// * Argument byte (flags | index)
// * Payload bytes (nibbelized)
0xf7 // Sysex end

Sysex message commands:

0x00, // arg=0 reset device, arg=1 update firmware (v1.14+)
0x01, // set controller cc number or 128=AT, 129=PC
0x02, // set strobe width 0-4: 1-5ms
0x03, // set clock divider 0-19: see intervals.h/cc
0x04, // set tune data 128 x int words of tune data
0x05, // set velocity curve, 0-8: linear, soft1/2/3, hard1/2/3, wide1/2
0x06, // set aftertouch curve, 0-8: linear, soft1/2/3, hard1/2/3, wide1/2
0x07, // set 4 x drum notes, 0-7f (v1.10+)

0x08, // set invert strobe mode: 0 - positive, 1 - negative (v1.11+)

0x09, // set invert gate mode: 0 - positive, 1 - negative (v1.12+)
0x0A, // set strobe gate mode: 0 - off, 1 - on (v1.13+)
0x10, // request firmware version (v1.11+)
0x11, // request SETCONTROLLER
0x12, // request SETSTROBEWIDTH
0x13, // request SETCLOCKDIVIDER
0x14, // request SETTUNEDATA
0x15, // request SETVELOCITYCURVE
0x17, // request SETDRUMNOTES (v1.10+)

0x18, // request SETINVERTEDSTROBE (v1.11+)
0x19, // request SETINVERTEDGATE (v1.12+)
0x1A, // request SETSTROBEGATE (v1.13+)

Firmware update

Midi2CV firmware update steps:

  1. Connect your MIDI interface output to Midi2CV MIDI IN
  2. Power on Midi2CV while holding down LEARN switch. LEDs will blink shortly then MIDI IN LED will stay steadily lit.
  3. Send firmware update sysex file (*.syx) to your MIDI interface port with 250ms delay between sysex buffers. Elektron’s C6 works great on OS X and Windows. Classic MIDI-OX is also good on Windows. MIDI LED will be blink while firmware sysex is being received. On successful update, LEDs will blink 3 times one after another. On error, both LEDs will blink together 5 times.

Starting with firmware version 1.14 you can request firmware update without using LEARN switch by sending RESET DEVICE sysex with argument byte set to 0x01. This facilitates firmware updates for applications where LEARN switch is not present or is difficult to access.

Revision history

v2.01 3/8/2017

  • Implemented more musical LFO fade in

v2.00 3/7/2017

  • Added LFO and EG

v1.14 1/10/2017

  • Set note CVs to C4 upon start or reset
  • Added ability to request firmware update by sysex

v1.13 11/3/2016

  • Added “strobe gate” option and sysex

v1.12 07/02/2015

  • Added gate polarity option and sysex

v1.11 06/17/2015

  • Fixed problems with All Notes Off handling
  • Added strobe polarity option and sysex
  • Added firmware version request sysex

v1.10 02/14/2015

  • added Drum Mode
  • changed Note Tuning mode activation to LEARN+PitchBend
  • fixed nasty EEEPROM initialization bug

DIY Resources

Bill of Materials: Midi2CV Mk2 BOM

Firmware: Midi2CV_Mk2_v201

Sysex files: midi2cv_mk2_sysex_114

Schematics: midi2cv_mk2

Firmware source code: midi2cv_mk2_112_src

Board outline (1:1 PDF): midi2cv_mk2


Ordering Midi2CV

To order Midi2CV, please send an email to pete at kvitek  c o m specifying how many PCBs and pre-programmed MCUs you need, a country where to ship them, and an email address to send the PayPal invoice to.

Prices (US dollars):

Midi2CV PCB — $25
Pre-programmed ATMega328p — $10


Continental USA — $5 (California residents add 8.75% tax)
Canada – $10
Europe – $15
Australia – $15

Please make sure your PayPal shipping address is correct!

Midi2CV_mk2#2 (small)

50 thoughts on “Midi2CV Mk2

  1. Pingback: Midi2CV Mk2 is available! | MidiSizer

      • It is for an 808 clone but with 16 voice boards!
        To make sound on 808 board you need 2 different voltages hit at the same time.
        One is for Trigger and it is 5v and the other is for Velocity and it is from +5v and max +15v.
        I need to control velocity for every step. So what i need is your module but with 32 outputs (16 CV & 16 Gates.)

        Best Regards

      • A bit tricky, but certainly doable: take 4 MIDI2CV Mk2s, run them in parallel in DRUM mode responding to different notes on the same MIDI channel split by MidiThru, build a simple divider to get -5V, and feed it to left side R14,R15,R27,R28.

  2. just my feedback : i’ve ordered that PCB 10 months ago and implemented it in a Arp2600 clone TTSH, and it works like a charm. The extreme versatility on CV range and SysEx programming is just amazing. An excellent midi2Cv project

  3. As long as you’ve already got a Midi out, it would be great if this project had the facility to input an analog clock to that Midi out. That way clock could go both ways in a modular synth application and midi clock could be master or slave to modular sequencers. I have seen some Midi2CV modules incorporating this feature lately, but none with 4-voice CV/gate unfortunately.

  4. Everything works great but I expected the clock in mono mode to be a square wave with rate = midi clock bpm. Instead I get a DC voltage proportional to the bpm.

    • Something is wrong with your build — you’re not supposed to have DC voltage at the digital output the clock signal is sent to!

      Clock output is rectangular pulses withe a duration equal to selected strobe width (1ms by default) and frequency determined by the incoming MIDI Clock divided by the selected Clock Division factor.

  5. Would it be possible to use the midi2cv to control three Korg Monotron synths in parallel? That is, sending an identical MIDI signal from an external sequencer, converting it to CV with this and then sending the same CV to all three units at the same time?
    If so, this looks like just what I was looking for!
    Thank you!

    • At this point I don’t offer full kits, only PCB and pre-programmed MCU. All other parts are jelly bin and can be ordered from DigiKey or Mouser, using published BOM.

  6. Hey 🙂
    Great project 🙂 i do have a question since im working on something where i wanna combine some stuff to make some cv modules into midi modules….. would it be possible to hack the firmware to get 5 cv 1 note and 2 gates instead of 4 cv and 4 gates?!

    Kind regards


  7. I’m have some issues with my build. I see constant voltage on Note, Strobe, and Bend outputs. Also, Midi In doesn’t seem to do anything. I’ve tried multiple midi controllers and keyboards. The midi led and gate led never illuminate. Any ideas?

    • 1. remove all the ICs and check all the voltages using the schematics. 2. insert MCU and check if it’s running by verifying that the LED blinks when you switch the power on. If LED is not blinking, check the XTAL pins to see if they have 20MHz sine signal on them. If not, look for shorts/connectivity etc around MCU.

  8. Hello,

    This is awesome an awesome project like your others project ! Congrats !
    If I already have midialf ( and a midirex) what would you recommend to have CV control : adding a CV extension or coupling the midialf with the midi2cv?

    From my point of view I ok say that the midi2cv will be more versatile. But is there a disadvantage using the midi2cv instead of midialf CV extension ?



    • It really depends on your requirements: if you need a stand alone MIDI/CV step sequencer that you can use with any MIDI or CV synth, MidiALF/CV is the better choice. If you have a modular system or an old synth which need to be MIDIfied, go with Midi2CV Mk2 and feed in notes from MIDI keyboard, MidiALF or MidiREX.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s