Kosmodrome will need a MIDI to CV module — something that’ll listen to a MIDI keyboard or other MIDI source and convert note on/off messages into pitch and velocity CVs and gates. And other things: Pitch bend messages and modulation wheel messages to CVs, clock messages to clock pulses, things like that.
There’s already a commercially available MIDI to CV in Kosmo format, the LMNC 1007 Midimuso. A couple of other DIY modules in Eurorack format are the Befaco MIDI Thing and the Erica Synths DIY MIDI-CV II. I’m sure they’re all good, but none of those is what I want.
One problem with the 1007 is it has too much functionality. It can give you pitch and gate for one to six MIDI channels along with other stuff — it puts out twelve CVs and six gates on the 18 output jacks on its 10 cm wide panel. But my MIDI needs are pretty basic. At the moment about all I need is to be able to plug in a keyboard to control one monophonic voice. There’s such a thing as giving yourself scope for future needs, but even four channels, let alone six, is well beyond anything I see myself doing for quite a while. And I don’t want to use up 10 cm on a module I’m only using a third of.
The Befaco has only ten outputs; it does more than I need, too, but not by as much. But it’s designed as two PCBs — a main board and a panel components board — which you can buy only as a set with the Eurorack front panel. For a Kosmo conversion I would have no use for the front panel or the panel components board, so I’d have to buy three things and throw two away. (And then make my own panel and panel board.) Not very cost effective.
The discontinued Erica Synths module is open source hardware, so I could just get the PCB fabbed. It’s a simple one channel design. But it has a problem too: The firmware — all MIDI modules are microcontroller based — is not open source. You can download the binary and flash it to a chip. But if you were to discover a bug that needed fixing, or if some default parameter or behavior were not to your liking, or if you wanted to add some functionality, you would not be able to. And I’ve decided I want to be able to do that, whether in fact I ever need to or not. The LMNC module is closed source as well. The Befaco firmware is open source (MIT license); the circuit schematics are published, but with no explicit licensing I can see, so I’m not sure what my usage rights would be.
So I decided to make a module adapted from a design by Larry McGovern. It’s open source hardware and firmware, I don’t have to buy anything I don’t need, and it’s not too much for my needs. It might even be not enough for more than just the short term, but it’ll get me going and I can develop something fancier if I need or want to.
McGovern’s midi2cv is built around an Arduino Nano. It has seven outputs, four CVs and three gates. When it sees a Note On message it sets the pitch and velocity CVs accordingly, and starts a gate and a trigger. The trigger ends 20 ms later while the gate stays on as long as a key is down.
The other two CVs are pitch bend and control change. The seventh output is a clock. MIDI clock messages are generated at a rate of 24 per quarter note, and McGovern’s code divides that down to one clock pulse per quarter note. Besides the output jacks and MIDI input on the front panel, there’s a three-position switch to change note priority to be used in deciding which note to play if several keys are down simultaneously. It can be the lowest note, the highest note, or the note most recently played.
Some changes were needed. It isn’t really a module but a component for a DIY synthesizer in what appears to be a non standard format. It doesn’t use a Eurorack/Kosmo style power header. In fact, it doesn’t use -12 V at all. So that was one thing I needed to change. And since I do have -12 V available, I decided to use a TL074 instead of the LM324. I also chose the 6N137 optoisolator instead of the SFH618A.
Seven 1/4″ jacks, a 5-pin DIN MIDI connector (the Nano doesn’t have USB Host capability, so USB MIDI would require a different design), and a switch won’t fit on a 2.5 cm wide Kosmo panel. So I figured I’d have to go 5 cm wide and put the output jacks in two columns, and in that case it seemed silly not to have an even number of outputs. I decided to add a second clock output. One pulse per quarter note is good, it’s useful, but it’s not fast enough for some things. The new output is a four pulse per quarter note clock.
Speaking of gate outputs, in the original design they had current limiting resistors but no other protection against incorrect things being plugged in. So I added another TL074 to buffer the gates. The CV outputs were buffered, but I added resistors and capacitors in the loops for current limiting and stability.
I also added LEDs, one on each gate output and one to flash on every incoming MIDI message.
The 4PPQ clock and the MIDI activity LED needed to be implemented in the firmware, of course. I changed a couple of other things too. Note On/Off messages were being converted to CVs and gates only if they were for channel 1, but pitch bend and control change messages were being processed regardless of which channel they were for, and regardless of which control change it was. In my version only channel 1 pitch change messages and channel 1 modulation wheel control changes (CC 1) are handled.
I’ve breadboarded the design and tried it out and… it works. The note priority seems to get confused if you hit notes too fast, but that was the only problem I saw.
(WordPress has a bug in its YouTube embedding, so I need
The pitch CVs I checked had a few millivolts offset but octaves were 1 V apart to within a couple millivolts or so, and that was without selecting resistors for best precision.
I’ve drawn up a PCB and front panel to put in my next fab order. I’m calling this MCVI, for Midi to CV version I, because, as mentioned above, I very well may work up a fancier module later on. I have a bunch of ideas for enhancements. I thought about putting some of them into this version, but decided to keep it simple and go with the more or less debugged design I have for now, and save the improvements for 1107 (more formally known as MCVII).