Here's a little something I've been cooking up over the past couple of months.
There are a lot of DAC options out there already, ranging from the inexpensive sound card kits to pricey all-in-one boxes with DMX, Ethernet, and so on. Above a certain feature level, though, they tend to have one thing in common - they're all closed-off black boxes designed primarily to sell one manufacturer's software. Protocols tend to be minimally documented, if at all, and firmware is don't-even-think-about it closed. The only open interface effort I've seen so far is cfavreau's OLSC, which is a step in the right direction, but still only a host-side API. I'd like to change that.
So, I'm designing a DAC. The goal is to have a small hardware device that can support "the kitchen sink" of interfaces. The software to exploit its capabilities will not be ready right off the bat - but it'll be open source, so it won't be limited to what a small number of people get around to implementing.
Here's what's in the first build of the hardware:
- 96 MHz ARM Cortex M3 processor
- 512kB Flash memory, 64kB on-chip SRAM
- 100mbps Ethernet interface
- USB slave interface
- 8-channel 12-bit DAC, driving X, Y, I, R, G, B, U1, U2
- Output op-amps providing balanced +/-10v on X and Y
- Shutter output
- "Fail-safe" relay across ILDA interlock signal
- Onboard microSD socket
- Galvanically isolated DMX interface
- Second independent non-isolated DMX interface
- Plenty of extra high-speed I/O for controlling TTL outputs, servos, etc.
- Second onboard USB interface for firmware programming.
I've gone ahead and built a few of the first rev of the board:
It's tiny. 2.7" by 2.8". The first run of five are all spoken for, but I plan to mass-produce this at some point. It's been a lot of fun debugging the various bits of it…
I got the first boards back from fabrication a week and a half ago, and have been furiously soldering and hacking on the beginnings of the firmware ever since. Code will be posted as soon as it's cleaned up enough to not burn the eyes of other programmers. (I'm using the CodeSourcery lite toolchain, git, vim, and make - all free, standard stuff.)
Here's what works so far:
- Basic toolchain, build, and programming process
- Ethernet driver and lwIP port - it can get an IP address and respond to pings
- Ring buffer with hardware DMA to DAC peripheral
- microSD driver and FAT filesystem port
There's a lot left to do. I still haven't touched the main USB interface, DMX, or started to think about a wire protocol over TCP/IP for this to talk to whatever control software it'll support on the PC side. That said, I figured I'd announce this now, to get people interested and let them know what's going on. My goal is to have as much of the software ecosystem out there as possible supporting this device; I've talked to some software writers and interest is good.
Questions? Comments? Feature requests?
Merry Christmas!