Key Technologies: Schematic Capture, PCB Layout, C, FreeRTOS, TCP/IP, Networking, C#, Core Audio
During finals week in my freshman year of college, I became bored of classes and decided to try an engineering project. Having been a sound engineer at our church, I was frustrated by the poor quality of computer audio cards and the expense of running long XLR cables back to the sound booth.
I decided to build an Ethernet-connected audio card that digitized audio from an XLR microphone and pushed it into my Mac’s Core Audio system. This allowed the audio to be fed into standard audio-editing platforms like Garageband.
I started the component selection and PCB design just as finals were wrapping up in December of 2008. I got advice from my Dad while working through the schematics (he helped me design the board-level power supply). I spent an 18-hour marathon night laying out the PCB and managed to order everything just before winter break was ending. I soldered it up, plugged it in, and had a working prototype after just a few weeks.
My board used an Atmel ARM7 processor with an Ethernet MAC peripheral. I used a programmable-gain amplifier to boost the amplitude of the microphone audio. I used a 24-bit external ADC to capture high quality audio. I used an external AC/DC wall-wart power supply and a board-level converter to get +5V, -5V, and +3.3V rails.
Not wanting to write my own TCP/IP stack from scratch, I searched and eventually found lwIP, a TCP/IP stack for embedded devices. I found that lwIP worked well with FreeRTOS, so I downloaded that and taught myself about RTOSes.
I wrote code in C to pull samples from the external 24-bit ADC, packetize them, and send them over the network to my Mac. I read the Core Audio API and wrote a driver to grab the ADC samples and inject them into the Core Audio system.
In the end, I was able to use this board with Garageband to record audio. The audio quality was much higher than I was able to get from my built-in soundcard, and the board could stream the audio to me over our wifi network.