After using Arduino for a while, I decided to give actual microcontrollers a try. Arduino makes it really easy for you to have everything on a single package, with a really simple and well documented API. But, if you want to save money or want to do things from scratch, a bare microcontroller is the way to go.
After doing some research, I chose to use the ATTiny2313, because it is inexpensive, it has an internal oscillator and has enough IO pins and features to do some cool stuff. But first, I went and implemented the “hello world” of microcontrollers on it: blink a LED.
The Gakken SX-150 is a really inexpensive analog synth (about $50, now available at the make store). This synth is included on a Japanese magazine (I wouldn’t expect less from them) so that makes it 2*2 times as cool.
Since its release, someone already has created a module to add midi support to it using the atmel attiny2313, but I’ve wanted to use an Arduino board to do it, to keep things easy to prototype and hack.
My implementation uses a single DAC IC chip, the MCP4921, which sells for about 2 bucks from Mouser. The current version uses the Arduino, only to read one byte, as a midi note, from the serial connection and sends that to the SX-150. I could have created the full midi circuit to make it a standalone solution, but that increases the cost and complexity of the physical connections. I’ll probably do that on a later revision.
So, in order to receive midi data, I wrote a small Processing sketch that receives midi, and sends the note information through the serial port to the Arduino.
The Arduino connection diagram looks like this:
And the final connections, like this:
And.. the whole thing sounds like this:
On the video, I’m using Ableton Live to send midi data to the processing sketch using a Network Midi connection on the Mac. On windows, you should be able to use Midi Yolke to accomplish the same thing. Then, I make sure that the processing sketch receives midi on that same virtual midi connection and sends the data through serial to the arduino. So, depending on your system configuration, you might have to tweak the Processing sketch a little bit to make sure it is reading and writing to the right midi and serial ports.
The flow of data from the sequencer to the synth looks like this: Ableton Live => Virtual Midi Connection => Processing Sketch => Serial Port =≶ Arduino => DAC => SX-150