MICrODEC is a work in progress (and probably always will be). It is an open-source platform for Digital Signal Processing (DSP) that is approachable for those familiar with programming Atmel microcontrollers. For those unfamiliar, we hope its a fun excuse to learn.
The hardware itself is of moderately high quality (44.1ksps, 16bit, stereo, -96dB noise, 3Hz - 18kHz frequency response), and has built in features for use with audio effects (wet/dry mix, feedback, mic./instrument/line level inputs). Because of the high data rate, the MICrODEC does not allow for as much processing time as low-end ADC to PWM style microcontroller audio interfaces, but, with 6 seconds of sample time, plenty of useful functions can be executed in the ~400 free clock cycles per sample. And, at a lower cost in comparison to high-end DSP units, it provides a good platform for sound installations where more than a few units may be required.
Features yet implemented
- All initialization routines for the codec, microcontroller, and memory - The codec is capable of multiple sample rates, and these can be easily changed to trade-off between audio quality and processing time. The codec also has an on-board headphone driver and microphone input which can be enabled, although the off-board hardware is much better. Both input and output filters can be modified, along with gain and internal signal path.
- FTDI cable header - This will allow for connection to computers, and future bootloading capability. All of the necessary components are attached to mimic the Arduino bootloader.
- Clip and level LEDs - The level LED comes on at approximately -35dB, and becomes brighter with more signal. The clip LED turns on, and stays on for 1 second, every time the signal goes above approximately -3dB. 0dB is when distortion begins.
- Variable gain input stage - The front end presents an input impedance of 520k to AC signals, and has a variable gain of 0db to +34dB.
- Socketed op-amps - Just in case you want to fiddle around with the sound. We suggest the TLC074 for good frequency response and output drive, but unless your listening on headphones at the output, you probably won't notice too much difference with the less expensive TLV274.
- Optional jumpers - There are jumpers for installing a hard bypass switch between the input and output. There is also a jumper for installing a foot-switch in parallel with the rotary encoder push-button.
Features not yet implemented
The current MICrODEC implementation is fun to use, but there are a number of things that would make it even better.
- Internal USB - There is currently an FTDI cable header onboard, but it would be far more convenient if the case did not need to be removed to take advantage of it.
- Bootloader - Once there is USB, there can be bootloader! This would allow for downloading and trading of MICrODEC programs by those who aren't interested in the details of AVR programming.
- MIDI - An optional MIDI board would allow the MICrODEC to be controlled by external pedals, synths, and computer software. Sample MIDI code has been written and tested, so merely a break-out board is required. Currently, there is only one USART for both MIDI and USB, so a solution to allow for both is needed.
- Arduino compatibility - Although this would seriously reduce the full power of the processor, it would also allow for a wider user base.
- C code - The current assembler needs to be ported to C for those who are into such things.
Firmware page by page
The Firmware for the MICrODEC is divided into 2 parts. The first is a Main File, which deals with initializing the microcontroller and codec, and handles the interrupt routine. The second is the Function Bank, which holds all of the commands which are executed when an interrupt is called (once per audio sample). This may or may not be the best implementation. It has the advantage of being more portable, as different programs can be dropped into the Function Bank, without having to worry about conflicts in the Main File. On the other hand, no processing can occur during idle time outside of the interrupt loop.
This is the current Main File: Microdec1
This is a listing of the pre-programmed functions: Stock Functions
And here is a compiled hex file with the stock functions: microdec1.hex
User written programs (which can be added to the Function Bank) can be found here: User Programs.
This is a list of useful functions (written in assembly), that can be used to save you time when programming. They are usually optimized for speed, and have 16b and 32b math operations, along with procedures for talking to the codec or other tasks required by the microcontroller: Useful Functions
Here is an example of a delay, with extensive comments, designed to demonstrate programming the MICrODEC in assembly: Delay Tutorial
Modifications, Additions, Enhancements
Adding another knob: Adding A Knob
Talking to the serial port
Files: Beta Release