The Missing Link
I created the initial firmware for the Missing Link. It’s an OSC receiver that outputs MIDI. The purpose is to hook up OSC clients such as TouchOSC or Control to older synths. The source is available here.
Read below for my post mortem notes.
This was my first “large” microcontroller project. It consisted of the following pieces:
- WIFI module
- MIDI in/out ports
- USB in (used to upgrade firmware, provide power, and did USB midi)
- Was able to route between all of the ports. Wifi->USB Midi or normal MIDI and all permutations.
Software wise we used the following:
- Arduino libraries (ended up stripping this down alot to fit the ROM space we had)
- Two libraries by my friend Alex: a MIDI library focused on microprocessors, and a bootloader that uses sysex as a data transport.
- uIP a tiny TCP/IP stack for microcontrollers, this was fun to hack on!
- Protothreads, was a great way to organize async code. It abuses C via Duff’s device, and I LOVE IT.
By far, the hardest pieces to get working was communication channels. First, getting I2C working between the PIC and the AVR we used was hard to get reliable. It was hard to even get working initially! I learned the hard way that people interpret I2C address differently. It’s best to spam them all.
Secondly, getting the USB midi code working well was a challenge as well. But it was fun to dive in and learn about USB.
Overall, I learned quite a bit from this project. If I were to do it again, I’d probably not use the Arduino prototype code we started with and go with straight C. The current codebase is a combination of different approaches. But as with a lot of projects, we were working under time constraints.