USB (MIDI) to CV - DIY Device

Hi there! I am working on a concept for a DIY device: a little box you plug into your norns via usb and then send midi from norns to that box which will then send it out via CV. (And hopefully there is a switch which changes directions and you input CV and send it as midi over usb to the norns - don’t know if this is possible, yet). So, basically an extension for norns to interact with CV.

I have made first tests and still looking for the right hardware controller, but it seems possible so far.

I just wanted check if anyone would be interested in such a device and hear if you have any ideas, dreams, wishes what such a device could/would do. Would be nice to hear you thoughts on this matter. (And let me know if such a device already exists and I am wasting my time…)

(I know there is crow from monome but it has been out of stock for so long and if it comes back I guess it will be sold out as fast as the latest norns batch. Also it is a rack module and I like to have something mobile. And last but not least I want a cheap (<70$) DIY solution and the challenge to develop such a device.)


[work in progress]

Cheers!

//22-08-29 UPDATE

Thanks everyone for sharing! There are some interesting projects you all posted worth digging into further in the future.

I was able to build a first version: I am using an Arduino Micro since it is very easy to set up as an USB-MIDI device that is recognized by Norns. Added 6 CV Outputs and wrote a little script for Norns and it is working pretty well. Since I am not interested in sending classical MIDI signals (like “clock”, “note”,…) it is already pretty much what I wanted to achieve. It is outputting only 0-5V (5V is the voltage Arduino Micro is operating on). At this moment this is sufficient for me. But I guess one could with additional circuitry change that output voltage to 8-10V and if needed to negative voltage also. I keep testing for a while to check if it is working properly and if I need some more options or not. (Will be posting source code and stuff when I am finished)

It is already a great joy to control my Strega with this via Norns and do all kinda crazy noise stuff :grin:

//22-09-03 UPDATE


almost there. Already working. Made a script that adds six lfos for each CV out. Thinking about adding CV IN too. money wise I have spent about 25$ on the parts. adding CV in would put another ~10 on top I guess. Still needs a good case. Current box it is sitting in is too small.

//22-09-12 UPDATE

Finally managed to find a way to add CV In (0-12V, via a voltage divider circuit). It now has 6 in and 6 out slots. Case is still a work in progress. I’m thinking about making a version with 12 CV Outs, because I always end up having not enough CV outputs…

Here is a little demo with Rings and Beads:


Finally got a proper case for it! Temporary name for it is “CIVO”. (combining letters from CV and I/O)

//22-10-09 UPDATE

Finished a eurorack version with 0-10V output. It’s still PWM though and thinking about redesigning the outputs to be true analog. meanwhile I am working on a PDF that explains how all this is done for those who are interested.


(CIVO is the device on the right)

//22-12-30 UPDATE

Output is true analog now (added DACs). Have to rewrite code. Still needs some time. And need to think on how to continue with this project…

20 Likes

Nice. I don’t have any CV devices, but I’ve messed around with Arduino as a little MIDI ⇄ electronics gateway. Well that’s kind of “CV”, although not at the Eurorack levels but in 0-5V.

Basically the Arduino is running a simple program to listen to MIDI over USB serial, and translates to voltage on its analog pins. Or the other way around.

On Norns it acts as a virtual MIDI device, so one of the options in SYSTEM→DEVICES→MIDI. I have compiled ttymidi, and then hook it up to ALSA with aconnect. I have automation via a systemd service and an udev rule to hook the Arduino to ttymidi, and ttymidi to ALSA when I plug it in.

Introducing the contraption as its own MIDI device rather than routing via USB serial and ttymidi.

I mostly use it as a six-knob MIDI controller actually, but it can also connect to Bastl Kastle for “kinda-CV”.

Very pedestrian, yes – but I want to reclaim the word “pedestrian” from its diminished, impoverished and pejorative meaning by car cultures!

this may be of interest:

$30 ready-made midi2cv board.

4 Likes

This sounds like a fun project. I’d also like something that was basically a standalone Crow. Was hoping my Korg SQ-1 could do it but there are a few issues right now around the different outputs on it ([WIP] Fix/enable oneway midi by catfact · Pull Request #1595 · monome/norns · GitHub) and it is not currently possible to output the MIDI clock signal (which I was hoping to use via the sync out jack). Of course with the SQ-1, the output options would be note+gate or clock signal, not CC, so that’s another consideration too.

More than that though, I’d love to see a version of norns with CV in and out, making it closer to the monome Aleph.

I am currently making such a box of my own and would love to see how you might implement it. I do have some different needs but one of them is also to use norns to control some modular gear.

This is the device I am using as reference: little-scale: 12 Gate 16 CV USB MIDI Interface: BOM, Build Guide, Schematic, PCB and Code

That many DACs quickly drives up the cost so I might settle for fewer channels.

I am also planning on adding USB Host and MIDI DIN functionality for when I am not using norns with this.

1 Like

@xmacex that sounds pretty good and honestly what I am aiming for at the moment. maybe I’ll get back to you with some questions on this :grinning:

@eigen this is an interesting little device. not what I am looking for, since I am aiming for usb-midi but definitely nice. will keep that in mind. thanks

@Jonny haven’t thought about clock and gate yet… there are some holes in my concept :sweat_smile:

@louwrens mmhm that looks great, too. how do you intend to add USB Host functionality?

really nice to see so many people working on similar and yet different things. I’ll keep posting about my progress from time to time. have been dealing with installing drivers and libraries for hours today to get an Arduino running on my laptop… that was no fun…

1 Like

It’s a hack but works, more-or-less.

⚠️ Changes operating system settings beyond Norns

Udev rule in /etc/udev/rules.d/99-arduino-proto-midi-contraption.rules

ACTION=="add", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="0043", TAG+="systemd", ENV{SYSTEMD_WANTS}+="arduino-proto-midi-contraption.service"

Systemd service in /etc/systemd/system/arduino-proto-midi-contraption.service

[Unit]
Description=Arduino protoboard MIDI contraption.
BindsTo=dev-ttyACM0.device
After=dev-ttyACM0.device
Wants=norns-jack.service

[Service]
Type=oneshot
ExecStart=/home/we/bin/arduino-proto-midi-contraption-start.sh
RemainAfterExit=true
# StopWhenUnneeded=true
# ExecStop=/usr/bin/killall ttymidi

Script to patch everything up in /home/we/bin/arduino-proto-midi-contraption-start.sh

#!/bin/sh
/home/we/bin/ttymidi --name=arduino-contraption --serialdevice=/dev/ttyACM0 &
sleep 1
/usr/bin/aconnect 129:0 128:0

Check out the Mutable Instruments CVpal, it only works as USB-MIDI to CV (and not CV to USB-MIDI), but it is 2 cv/gate pairs and completely open source hardware and software. It is often sold with a Eurorack panel but it’s not exclusively a Eurorack device, it’s powered entirely over USB so you can just put it in any enclosure.

https://mutable-instruments.net/archive/cvpal/manual/

4 Likes

I have a muc-400 and am happy with it, but it only does midi din to cv. Main usage is controlling my arp odyssey and the Korg ms-20m

I’ve been exploring the idea of adding midi to cv to a project I’ve been noodling on forever. Recently Liz Clark added this guide to the Adafruit tutorial library. Seems like a handy reference and something that could be expanded out assuming you like the choice of tech. Overview | CircuitPython MIDI to CV Skull | Adafruit Learning System

2 Likes

this seems like a very interesting project to get acquainted with the pi pico environment. will try it out in the future. at the moment I am working with the Arduino system. gonna finish learning this before I dive into another one. thanks for the link!

1 Like

I am making progress and the device is almost finished (still needs a proper case though). At the moment I am figuring out how to add CV in too. Would be a nice addition. Still searching for a good solution since in the modular world there seems to be no regulation about voltage use…

here is a little impression of a test session:

6 Likes

looks exciting, especially w/ the number of io you managed to cram in here.

are the CV signals driven only from USB power or is there an additional PSU?

Hey this is wonderful and something I’m after as crow stock is unpredictable.

Would you consider a Eurorack version too for those of us who do wanna rackmount?

@eigen it is usb powered only, but it would be possible to make a version that is powered by a power adapter.

@mypandashallfly unfortunately my electronic skills are not that advanced to port this to eurorack. but if someone more skillful want to port this I guess in general it would be possible. will publish source code when finished, so anyone interested could make a eurorack version.

1 Like

Finally figured out how to add CV in for signals up to 12V. Could be interesting if you have modules like a makenoise Math. Adding their functionality to a little Norns…

2 Likes

Im following your development with great interest! I’ve been looking for ways to get CV in & out from norns with a standalone device for a while. Crow looks amazing but i don’t have i2c devices, and I switched from eurorack and mini-jacks to Serge 4U and standalone banana devices, so even if it was available it doesn’t really meet my requirements (also using it only for midi i/o and not I2c makes it expensive at $250).

I’m thinking of two or three important things (maybe you already implemented them) :

  1. The ability to choose the CV input/output range internally (0-5V or 0-10V), depending on the devices you want to control. Maybe this could be implemented by selecting different midi channels ? (ie. Ch.1 is 0-5V, ch.2 is 0-10V… a bit like Mutable Instruments CVPal where you choose a different midi channel depending on the midi (cc, note, clock etc.) you want to send), or by using jumpers on the circuit board (easier but that imply opening the enclosure each time you want to configure them).

  2. Scaling of the CV inputs and outputs would be really handy too. I guess for inputs one could use the norns midi map menu and adjust the range (as you would do with any midi-controller), so that’s more about outputs. Of course the CVs can be processed externally on the device one wants to control, but doing it internally would be nice for standalone instruments that don’t always have attenuators/processors on modulation inputs.
    On this point, I’d also like to find a way to implement an offset on the CV outputs. I’m using a lot of Ciat Lonbarde instruments (i know Lorre-Mill instruments works the same), and since they are powered by 9V they use a virtual ground/mido, thus all voltages are referenced to 4.5V (so 0-4.5V are considered negative, and 4.5-9V positive). Adding a 4.5V offset offset would allow to control these standalone instruments easily.

  3. Proper protection against negative voltages for CV inputs (I always struggle with this), as I guess if it’s a USB powered circuit it will work with unipolar voltages only.

This post got longer than expected :sweat_smile: congratulations for all your work! :slight_smile:

2 Likes

Thanks for your thoughts! Especially interesting considering your setup (4U/banana) since I am not familiar with this.

I have to admit my electronics knowledge is preeeeeeety weak. And I am learning all that stuff on the fly. In general I would suggest to do as much as possible on the software side because it’s cheaper. And I think all you mentioned could be done that way (setting offset and range of in- and outputs). You could map or cap incoming values and offset and map outgoing values via coding.

There is one problem though I haven’t found a solution for and that is Arduino boards operate on +5V. So inputs and outputs would have to be scaled. Inputs scaled down to 0/5V (which I’m doing with a voltage divider circuit) and outputs from 0/5V to 10V or 12V (for which I haven’t found/learned a solution yet).

I am also using no DAC or ADC at the moment. Just the Arduino Board to read and send which is outputting voltage by sending PWM over digital outputs. So this is not true analog and I guess to do it properly you would need a DAC.

As I mentioned I am an electronics noob but the device I’ve built does what I was looking for and is a lot of fun and inspiring (and very cheap ~40€). So if you are interested and maybe got some ideas on this I’d be happy to send you my circuit diagram to have a look and give suggestions! (dm me on instagram if you want)

BTW love your stuff on instagram! very interesting device you build! would like to know about those… do you have more infos on them somewhere?

Cheers!

So, I found a solution for raising the output to 0-10V. I will test it over the next week and report back if it works.

4 Likes

10V out is working. But it needs an external power supply of 12V to work because I am using op amps to double the voltage. Hence I decided to turn it into a eurorank device.


USB slot at the bottom is for connection to Norns.

Honestly the addition of raising the output voltage includes a lot of soldering and therefore made this project a bit annoying. Also it takes up a lot of space and I it was a challenge to get it behind a 4HP panel. It all works now but I still have to check voltage values since my multimeter seems not to be trustworthy anymore. (Have to get a new one).

There is still one problem: since the Arduino is a digital device it is not outputting analog voltage but PWM waves. (Infos here: https://docs.arduino.cc/learn/microcontrollers/analog-output). Which means you won’t be able to use it for generating stable pitches. CV clock and value manipulation on the other hand works.

Here’s a little test session where it controls a Strega, Strings and Beads if you are interested to hear what it can do (additionally I am also using my ChaosOP Eurorack module in this track):
https://deeg.bandcamp.com/track/chaos-op-eurorack-session-2

I’ll double check wiring and values and will then release schematics and code so anyone interested can tinker around.

4 Likes