[sdiy] Communications with voices in a polyphonic synth
Neil Johnson
neil.johnson97 at ntlworld.com
Thu Mar 11 00:39:19 CET 2010
Hi,
So far most of the options suggested involve some sort of external
driver/transceiver chip. Sorry Tom but that's the best way of
stringing high-speed signals across multiple boards.
Secondly, SPI really really really wants the slave select line to
synchronise the bus. So you have clock, data (MOSI assuming
unidirectional), and one or more slave selects. Lots of wires. If
you have addressing in-channel then you only need one global slave
select, but then every receiving node has to process each message =
high overhead.
Tom only quoted half the message I was giving - RS485. Its
differential, simple, proven, with lots of low-cost 8-pin transceiver
chips on the market.
The other half was protocol. My suggestion was to use the 9-bit
multiprocessor mode usually built into most micro UARTs these days.
If you don't know what I mean go read up on it from your favorite
micro user manual. It has the significant advantage that slaves only
get interrupted on address bytes (bit 8 = 1), and then only the
intended recipients get interrupted on any subsequent data bytes (bit
8 = 0) - all other slaves ignore them in hardware (i.e. no processing
overhead). For a fast-ish bus, e.g. 10Mb/s, you'd be looking at an
interrupt every microsecond otherwise. So other than global or group
packets you save quite a lot of otherwise wasted cycles.
As for the protocol that sits on top of that, well go have fun. For
addressing I'd suggest bit 7 for single/group, and the special
address 0xFF for global broadcast. A simple payload would be one
message per packet. I'd layer it up to handle multiple messages per
packet to up the average throughput. Perhaps also an express high-
priority packet for global time-critical messages (e.g. MIDI clock).
Cheers,
Neil
--
http://www.njohnson.co.uk
More information about the Synth-diy
mailing list