[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