It’s been a long time since the last update, largely due to having to prep our house for sale. But in spite of time spent painting, refinishing floors and replacing cabinets and fixtures, there has been steady software “refactoring” for the ADAU1701 code. As noted in other posts, my engineering background is more hardware and systems than software, and all of the initial code to control the ADAU1701 started out as as assembly language, written for the 68HC08 series microprocessors. Some of these devices only had 256 bytes of RAM to work with, which doesn’t support modern programming practices of modularity, decoupling and code reuse. I had “translated” this assembly code into Arduino C and although it worked, it was difficult to maintain and not something I could share with others.
The code that I was using these past years relied heavily on globally defined structures and enumerations and look-up tables, and refactoring this code into logically layered library calls proved to be much more difficult and time consuming than I expected. But much of this code is now working, and the code is far more maintainable and is “shareable”. I’ll be writing much more about this in the articles, and post updates as this effort is finalized.
I’ve also got a number of new DSP hardware projects lined up, but I’ve been putting them off until this code update is done. This software redesign has been a much bigger challenge than I expected, but I’m at the point where I’m coasting downhill rather than climbing. The house refurbishment is still going to take up most of my time, but even with those chores, I should be able to make more frequent updates on these pages.
I had been using ITEAD studio for PCB’s and I still like that service, but it seemed like the prices were higher last time I got boards, so I decided to go with SEEED Fusion. Wow–these guys are good. I got 10 boards for that ESP-DSP design for $4.90 and splurged for DHL shipping at $20. I put in the order on June 4 and got the boards on June 12. Just a couple of days for production, and then a few more days for reasonably priced shipping from China. This is great service given the price!
That $4.90 price for 10 boards is only for certain sizes and “normal” quality, but it worked out fine for this design. The boards look nice–I’ll see if I can do some debugging in the next week. I’m still amazed at the price. I also re-did the 4-channel amplifier module described in the Fully Modular design since there were some “issues” that I wanted fixed. That board was much more expensive, since it is a 4-layer board with ENIG coating , so a run of 10 was about $60. Maybe if that design works out OK I’ll redesign it for 2 layers and see if I can get the price down to $4.90. But $60 for 4-layer boards with ENIG is still very good.
BTW, the ESP-DSP design is a cell-phone-programmable 2-way stereo or 3-way mono board with up to 8-pole crossovers, 12 bands of EQ, BSC, delay, volume trims and bass enhancement (ADI’s SuperBass). It’s just 2 major modules plus some power supply components, with no SMD parts. It’s easy to build and it’s inexpensive. It should be a nice board with a lot of applications.
But more importantly, the ESP-DSP board is where I’ll try to “finalize” the Arduino code and replace the many files of code with library calls. After working on this code for so many years I finally have a good feel for how to partition it for efficient code reuse. Usually summer isn’t “software season” for me, but everything seems upside-down anymore with this pandemic, so who knows…
Things are moving slowly in Audiodevelopers land, as we are working toward selling our house in Reston VA, and that means a lot of repairs and refurbishment that keeps me busy and away from electronics. But I’ve been trying to update this site with new content at least once a week (or more often if people buy me a coffee).
I don’t see much more future for the ADAU1701-based designs, as most of the low-cost possibilities have been explored, either by commercial offerings or designs offered in these page. It’s time to move on to more capable DSP’s and more connected CPU’s to implement “smarter” active speakers. That seems to be the right direction for this web site, but the next steps on this path will be big ones. I’ve got the parts on order for the “Turbo 2×6” board, and once those parts come in I’ll make the board and start on a long overdue effort to refactor the software in a way that will provide a better foundation for future designs. I’ll address the software refactoring in a later post or dedicated article.
Edited May 30: Hmmm–there still might be one more new ADAU1701 board worth considering before moving on to the ADAU1466 designs: a “stripped-down” 1X3 board. This could be useful for embedding in speakers to provide a 2 or 3-way crossover with BSC, EQ and delay. And it could be used for very small woofers, as it would have the ADI superBass psychoacoustic bass enhancement algorithm, which I already have running on other boards. I’ll put some more thought into this and see if this board has enough potential applications to make the design effort worthwhile. If I used a double-sided board with the ADAU1701 “learning board” on one side and the ESP32 on the other side, the board could be small enough to cram into very small enclosures…
I made some updates to the stereo 3-way Part 2 page, and will be adding more in the next few weeks. However, the next update will be the software page, as I finally made a stand-alone version of the tool to process the SigmaStudio output files.
This tool creates two files needed for the Arduino code: 1) a code file to load the Program RAM and the Parameter RAM, and 2) a “Cell map” that provides a way of referencing the SigmaStudio DSP cells in the code. I’ll provide details in an upcoming update, but it was important to make this tool available in a stand-alone program as it needs to take on some new functionality for the next designs in the queue. The old version of the code was buried in the now-ancient ASD program, written in VB.NET. The new code is in C# and it is much more maintainable.
The new code also has a new feature coming that will create a simple Arduino sketch that can program SigmaStudio code into an ADAU1701 board that has an EEPROM. So you just need an Arduino host with an I2C connection to the board, and you will have the ability to put the SigmaStudio code into the EEPROM. This will eliminate the need for the SigmaStudio programming boards. You just need to point to the output files of the SigmaStudio compiler and the generated Arduino sketch will put the right data in the EEPROM. None of the designs I have made use the EEPROM, as the CPU loads the ADAU1701, but this will help for other boards or modules that require programming. This application will be at: http://www.audiodevelopers.com/Software/Arduino_Tool/setup.exe.
Audiodevelopers is a collaborative website to share design ideas, software, hardware and construction tips for active speakers.