[sdiy] Communications with voices in a polyphonic synth

ASSI Stromeko at nexgo.de
Thu Mar 11 07:29:57 CET 2010


On Wednesday 10 March 2010, Tom Wiltshire wrote:
> I've already asked about SPI after encountering problems with it.
> It seems to me that some of the problems that I'm having are
> because it isn't really designed for single-master/multiple-slave
> communications over distances of a couple of feet.

You can have bidirectional communication by adding another SPI 
interface going the other way, but the wires add up fast.  If you 
control the protocol implementation on all SPI endpoints, you could 
build a token ring network on it.  For longer distances you'd have to 
be more careful with the drivers, trace impedance and the termination, 
but you can certainly get into the feet region for double-digit MHz 
clocks.  Keep in mind that SPI is synchronous and that includes the 
select lines.  For the token ring topology alluded to above the select 
lines could be omitted, so you're down to "just" clock and data at the 
expense of more load on each endpoint as it would be always selected.  
Merge clock and data with some modulation scheme and you're down to 
one signal (likely differential) at the expense of some extra 
hardware.

> What I'm looking for is a way of talking to the voices. It needs to
> be as fast as possible (no-one likes latency), robust (there will
> be other electronic circuits in close proximity!) and as simple as
> possible (but not simpler).

I'm tempted to say: chose any of two requirements and drop the other.
 
> There are two aspects to this; the hardware level and the protocol.
> I'm currently not really sure where I'm at with either, and I'd
> like to hear people's views and experiences. Usually (I've found)
> there is a wealth of previous experience to learn from, both on
> this list and by digging through the circuit diagrams left to us
> by synth engineers of old, who have already faced these same
> challenges.

If you use uC for all interfaces you should take a long, hard look at 
CAN.  A full CAN protocol implementation would be a bit heavy, but the 
transceivers and some of the bitstuffing is already there in hardware, 
so you could strip it down to what you need.

http://krue.net/cansynth/ (doesn't seem to be updated for some years)

Even if you decide against CAN in the end, some of the protocol 
questions should be answered by looking at it.  RS-485 is faster, can 
address less nodes, can run on longer networks and has a different 
protocol.

Another idea that shouldn't be too far off is to use MIDI as the 
protocol, but run it at much higher speed.

If you need to be faster and want to exchange data between different 
"boxes" you could even look at Ethernet.  Again more protocol 
overhead, but lots of existing infrastructure...

http://wiki.netsynth.org/index.php?title=Main_Page

Ethernet or USB are the most sensible choices if the main controller 
will be a PC, but inside a synth this is complete overkill IMHO.

> Protocol-wise, I need to be able to send parameter and control
> information to single voices or groups of voices. How is this
> typically done? I can see easily enough how I can give each voice
> an address, and then send an address message ahead of a data
> message (or group of messages, I suppose), but how do I talk to a
> couple of voices without repeating the message for each?
 
You'll have to define broadcast address(es) or send a select bitmap 
instead of an address.  If you don't use the broadcast often, you 
could combine the two approaches and send a select bitmap as payload 
to a special broadcast address and then broadcast the message itself.


Achim.
-- 
+<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+

Factory and User Sound Singles for Waldorf rackAttack:
http://Synth.Stromeko.net/Downloads.html#WaldorfSounds



More information about the Synth-diy mailing list