A second round of hacking has turned up a much better method for controlling the SX-150 via MidiVox+Arduino. (is it still “hacking” if it’s your own design?)
After running a wire directly from the DAC’s output to the SX’s stylus (bypassing the shield’s low-pass filter) octaves 0-5 are now usable. During my initial testing, the SX has stayed acceptably in tune over a 4-octave range - which I can hardly believe myself! A simple one-line conversion did the trick -
noteOut = (noteOut+1) * 20.45;
Download the MidiVox->SX-150 code here. (updated, see below)
To use the sketch, you’ll need to remove the 909Ω resistor running off the DAC chip’s output (pin 8, shown above), run a wire from the DAC’s output to the SX-150 stylus, and connect one of the available GND pads to the SX-150’s ground (outer ring from either “EXT. SOURCE” or “OUTPUT” jacks will work)
Update: In my gleeful haste to post the above info, I overlooked the very likely possibility that not all SX-150s will respond to a certain control voltage level in the same way. In fact, because these little analog synths use such inexpensive parts, it’s pretty much guaranteed no two will respond exactly the same way. I acquired a second SX for testing, and it seems to be ‘tuned’ a little less than 3 whole notes higher than the one I originally used.
Here’s a new version of the sketch that uses the variable “tuningVal” to achieve an acceptably in-tune output from the SX. Use a guitar tuner or tuner app to measure the output of the SX while controlling it via MidiVox + MIDI keyboard controller. Choose a reference note (ie - middle C ), and adjust the value of tuningVal (in the file named MIDISetup.pde) until the SX’s output matches that reference note. Example: Updating the code to “ tuningVal = 8.5; “ got my SX to play pretty nicely in tune.