Digital CV
In Eurorack arguably anything is CV. So what would digital CV look like?
An idea I had based on using a UART for the TurboWave project - what might a digital CV standard look like with Eurorack? I'm not a fan of having to use MIDI connections for Eurorack as it doesn't feel natural, is fairly slow, and doesn't cater to Eurorack as well. Something like USB as a module to module interconnect is also over-built, complex, and ultimately not open.
This is my proposal, though was more a fun idea at present. Other folks are working on these sorts of things so I'm not trying to suggest my idea is the right one. Right not it is just a thought experiment.
Why?
Despite being "The Variable Clocked DAC" guy, I also very much love analog synthesis and modules! Most of my own Eurorack is made up of analog modules. Digital modules have their place and not just quirky unique sounding ones like the WaveBoy :) They can be useful for utility and are one option for increasing the number of voices in Eurorack without needing an explosion of modules and cables.
I get asked about a multi-voice version of WaveBoy and while that's easy enough to do with something like the TurboWave, in Eurorack-land, that could mean each voice requires up to 4 cables (V/Oct, CV, Gate, Output). Realizing a TurboWave equivalent in Eurorack would require 32 cables!
One afternoon while chatting on BlueSky (here's the original thread), I had an afternoon brainstorm about how this might work and this is what I came up with.
Fixed Block Message Format
Each payload is a fixed 25 byte message. It is always 25 bytes. This allows for predictable timing which is important when considering routing Digital CV between modules which might want to split and filter CVs, daisy chaining modules, etc.
For reasons mentioned below in the Hardware sections, the CV update rate ends up being 1kHz.
Messages whose most significant bit is a 1 indicate the start of the payload and provides the receiver with how the CV data should be processed. The next 24 bytes are all CV data.
The most significant bit of data messages must always be a 0.
Thus a full payload would be this:
80..FF: Payload Start, CV Config
Bit 7: 1
Bit 6-0: See CV Config Table
00..7F: CV Data 00
...
00..7F: CV Data 23
Multi-byte CV values are little-endian.
CV Configuration Table
| Value | Group | Setup |
|---|---|---|
| 0x00 | General | 24 7-bit CVs, Unsigned |
| 0x01 | General | 24 7-bit CVs, Signed |
| 0x02 | General | 12 15-bit CVs, Unsigned |
| 0x03 | General | 12 15-bit CVs, Signed |
| 0x04 | General | 6 31-bit CVs, Unsigned |
| 0x05 | General | 6 31-bit CVs, Signed |
| 0x06 | General | 3 63-bit CVs, Unsigned |
| 0x07 | General | 3 63-bit CVs, Signed |
| 0x08 | Voice | 4x Full Poly Voices |
| 0x08 | Voice | 3x Full Voices, Clock |
| 0x09 | Voice | 6x Poly Voices |
| 0x0A | Voice | 11x Triggered Voices |
| 0x0B | Voice | 12x V/Oct |
| 0xXX | Drums | All Triggers |
| 0xXX | Drums | Triggers and Mods |
| .... | ... | ... |
| 0xF0 | Config | Request Payload Config |
| 0xF1 | Config | Send Payload Config |
Voices
4x Full Voices
12 15-bit CVs divided into four groups. Each group has:
- V/Oct (15-bit unsigned)
- Gates (15-bit unsigned)
- Modulation (15-bit signed)
This allows for controlling a 4-voice module complete with a gate for an integrated VCA (as well as other gates for other purposes if need be), and 1 modulation such as for cutoff.
3x Full Voices, Clock
9 15-bit CVs divided into three voice groups. Each group has:
- V/Oct (15-bit unsigned)
- Gates (15-bit unsigned)
- Modulation (15-bit signed)
1 23-bit unsigned (3 byte) CV dedicated to the clock. The clock counts up from zero and ticks with each message sent. Thus at a 1kHz message rate, the clock will rollover after around 2 1/3rd hours. This can, thus, be used for song position information if required.
For simply handling beats, the receiver only needs to look at the lowest byte.
11x Voices
11x 15-bit unsigned CVs all representing V/Oct 12th 15-bit unsigned CV is a bitmask for the gates
12x V/Oct
12 15-bit unsigned CVs all meant for V/Oct
Drums
Triggers and Mods
1 15-bit unsigned CV, 11 15-bit signed CVs
- CV0: 15 Triggers, unsigned
- CV1: Modulator for Trigger 0, signed
- CV2: Modulator for Trigger 1, signed
- CV3: Modulator for Trigger 2, signed
- CV4: Modulator for Trigger 3, signed
- CV5: Modulator for Trigger 4, signed
- CV6: Modulator for Trigger 5, signed
- CV7: Modulator for Trigger 6, signed
- CV8: Modulator for Trigger 7, signed
- CV9: Modulator for Trigger 8, signed
- CV10: Modulator for Trigger 9, signed
- CV11: Modulator for Trigger 10, signed
Triggers 11-15 do not have modulators.
189 Triggers
3 63-bit unsigned CVs, all triggers. This is 189 triggers total. Surely no drum module will support that many but in the event that someone decides to do it...
Config
Request Payload Configuration
This is a special command message typically used for case to case and case to computer interconnects. It tells the other end that we want the payload configuration. For this message, the contents of the CV do not matter.
For example:
0xF0: Request Payload Config
00..7F: CV Data 00 (unused)
...
00..7F: CV Data 23 (unused)
Send Payload Configuration
This is mostly for the faster case to case and case to computer interconnects. This informs the receiver of how many payloads are being multiplexed.
1st 7-bit unsigned CV, number of payload streams (remaining data unused)
For example:
0xF1: Send Payload Config
03: 4 payloads are being multiplexed
00..7F: CV Data 01 (unused)
...
00..7F: CV Data 23 (unused)
The very next payload starts the multiplexing and this continues until another Payload config is sent. Payload configs only need to be send on configuration change or loss of state (like a power-cycle). Generally they should not be sent as they
Hardware
The above protocol is meant to ultimately operate with UARTs, though how those connect to each other is still a matter of debate. And depends on whether connection module to module, case to case, or case to computer.
Module to Module
At present, RS232 is being evaluated as there are IC chips which are tolerant to wrong connections (like plugging in an analog CV into a digital CV input or output). Common Eurorack patch cables and jacks are the proposed standard. This avoids extra cost in making modules, and does not require the user invest in different types of cables for digital or analog patching.
The baud-rate will be 250kbps.
Case to Case
Case to case interconnects can be higher speed which allows for sending more CV data by way of multiplexing payloads. Several options exist here but RS485 over CAT5 would be a common option. It allows for a bi-directional interface at speeds up into the several megabits. The speed should be multiples of 250kbps otherwise timing becomes problematic. A 1mbit connection would allow for multiplexing 4x payloads.
Multiplexing is configured by sending a special message start / config packet and receiving that back as a special command message (see above).
The case to case connection also assumes dedicated modules to process the faster rates and to divide and forward CV messages around.
Case to Computer
Like with case to case, multiplexing can be used to handle multiple payloads for sending (and receiving) lots of CVs. The interface itself could be via USB, MIDI, etc. MIDI, despite being relatively low speed at least with DIN connections, bridges the gap since many MIDI to CV modules are producing analog CV. These same events can be sent via digital CV instead or in addition, opening the door for things like polyphonic voices.