[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