Arduino Shield

This project is a shield board that plugs into an Arduino Uno and provides a 2-in/4-out DSP board.  The board is designed to sit in-between the Uno and a generic LCD/keypad board.  The LCD provides the user interface to select various crossover frequencies, BSC, EQ and volume trimming.  The Uno monitors the LCD keypad inputs and provides all of the control functions for the ADAU1701.  The Uno loads the code into the DSP and it calculates the biquad coefficients to implement a range of crossover frequencies and slopes, BSC and 9-band EQ.  A completed board is shown below:


When the boards are stacked together, they look like this:

redboard_stack  adau1701_assembly_small

Schematics, BOM and PCB files:

You can make your own boards by simply sending the zip file in the link to ITEAD studio.  Before the tariffs, you can buy 10 bare boards for $43 including shipping.  I haven’t bought any of these specific boards recently, but the last boards I purchased from ITEAD that were about the same size were substantially more expensive–about $65.  Even so, that’s not a bad price.

If you want to make changes to the design, you will need to install DesignSpark (a free download) and open up the ADAU1701_shield_RCA.prj file.  The schematic and PCB files will need to be in the same directory as the project file (.prj).  The schematic may not have the exact part numbers, because I wasn’t overly careful about updating every library part.  However, the Excel file should have the right part numbers, along with Digikey’s ordering numbers.

I should probably get some beer icons to indicate how many beers you will need to consume to assemble the boards.  I’d give this one a 2-beer rating.  It turns out these boards aren’t all that time-consuming if you have a basic hot air rework station.  I just put some solder paste on the SMD pads and placed the parts on the solder with the tweezers, cleaning the tweezers periodically with denatured alcohol to keep the parts from sticking.  Every part on the part is 0805 or larger, so you won’t go blind.  The ADAU1701 chip is probably best soldered on by hand using a temperature-controlled iron and a fine tip.  Just get a few pins soldered to hold the chip in place, and then use lots of solder and flux to make sure each pin is soldered to the board.  Of course, that will create lots of solder bridges, but use fine braid to remove the bridges, and touch up by using extra flux and heating up each pin with the tip of the iron.  I’ve ruined an ADAU1701 by trying to solder it with the hot air tool, but I’ve soldered at least 30 of those 64-pin chips using the hand soldering method described above, with no problems.  Notice that I put a rectangular opening in the ground plane under the chip, so you can shine a strong flashlight from the back of the board to inspect the solder joints.

Hardware and Software Features

There aren’t any surprises in this design–it is the same as the reference circuit in the ADAU1701 data sheet, which is basically the same as the miniDSP 2×4 board.  There are three ways the board differs from the miniDSP product or the reference design:  1)  it uses an Arduino board instead of a PIC controller to program the DSP;  2)  it doesn’t have a separate EEPROM for programming, as the DSP code is converted to a “.h” file and compiled with the Arduino sketch; and 3)  there are no expansion connectors to allow adding devices to the DSP.

That point about the lack of EEPROM is worth emphasizing.  This shield board is programmed with a “generic DSP architecture” that includes 11 shared biquads (applied to all channels), plus 8 biquads for each individual channel plus delay and volume control for each channel.  For most applications of this board, no additional DSP resources will be needed and hence there is no need to use SigmaStudio to change the DSP.  However, if changes are desired, the user doesn’t need a separate programmer, as the SigmaStudio program is included in the Arduino code, and the Arduino CPU programs the ADAU1701.  This approach to loading the ADAU1701 is described in Article 4 on this website.

When this board was first designed–back in March of 2015, there weren’t as many contributed libraries for Arduino as there are now, especially for menu systems.  All of the ones I looked at were  fairly simple and didn’t provide the amount of control over the display that this project needed.  So I used the same type of menu system that I had used for several years that was originally written in 6801 assembly language.  I updated the code for the Arduino IDE and tried to make it as logically organized as possible, but there are probably better supported and easier to use menu systems available now that could replace this code.  All of the options for the menu system are packed in tables, organized as pages and fields.  The original code was used for an 8-line display, and although the current display is only a 2×16 LCD, the design will accommodate much larger displays.  The pages and fields are shown below:

This set of HCI options has worked well for a number of different speakers.  However it really isn’t that hard to change the number of options and their values.  For example, the code to calculate the biquad coefficients for the crossover supports Butterworth, Bessel and Linkwitz-Riley topologies up to 14-pole (L-R 14), and adding these additional crossover types would be relatively easy, since the hard work of calculating the filter specifications is already done.  Also, if you wanted a crossover at 2005Hz or some other odd value, that could be added by changing some simple switch-case statements.

A nice feature of this software design is that the Arduino saves its state in its own EEPROM memory, so that if you hit the reset button or if power is interrupted, the Arduino restores the DSP and returns to the same screen and same settings as the last save.  However, EEPROM has a finite number of writes that can be made, so in order to keep the number of writes to a minimum, the state is only saved when going to a new page.  So, whenever you change a value such as the volume or crossover frequency, you should cursor over to the next page of options in order to save that change.

2023 update:  I accumulated a few of these as I went along, and they are going to a community college in Northern California.  I hope they have fun with them.