These days I’m co-developing an AK4490 based DAC. The aim is to end up with a no-compromise dual mono design, one that would perform at the very least on par with my Buffalo III.
Of course, to do that one has to run the 4490s in software mode.
As a matter of fact, it is generally preferred to run a 4490 in software versus hardware mode, for several reasons.
To begin with, in software mode the 4490 supports DSD decoding. It goes as far as to support a “Volume Bypass” feature which bypasses most of the processing done on the DSD signal (a.k.a. “the ΔΣ modulator”), resulting in more pure sound. But of course we do lose the ability to do volume control in software.
Software mode also allows us to try out all of the supported SQ features, like the different “Sound Setting” modes.
At last but not least, we get digital hardware volume control.
This is the prototype that we designed, getting I2S input from an Amanero and being controlled by my custom STM32 controller (more on that in the near future).
I searched the Net for any ready-made code that would control the 4490, but I couldn’t find anything worthwhile, so I began virtually from scratch.
So, my Arduino code (a.k.a. “aKduino”) enables:
- Controlling an AK4490 through the I2C bus.
- Automatic switching between PCM and DSD. It does rely on getting a “DSD type signal” from our USB-to-I2S interface of choice. The 4490 by itself is not capable of determining whether its input is PCM or DSD.
- Setting the volume (in 9 steps.. just to confirm that volume control does indeed work).
- Selecting “Volume Bypass” for direct DSD processing.
- Selecting the internal DSD filter’s cutoff frequency (50KHz or 150KHz).
- Selecting one of the 4 available PCM filters.
- Enabling or disabling the Super Slow filter.
- Selecting one of the 3 available “Sound Quality” settings.
- Displaying all of the registers’ settings (for troubleshooting purposes).
Software Requirements:
- Nothing (for now)
Basic Hardware Requirements:
- Any Arduino (*)
(*) I should note here that the AK4490’s datasheet states that all of its I/O pins are expecting 3.3V logic levels but there has been a large number of reported cases of 5V Arduinos working without problems. I’m too much of a coward to try that myself so I used level converters for my initial testing and eventually a custom STM32 board that uses 3.3V logic but you may want to try your luck with 5V logic levels. Just don’t blame me if your 4490 gets damaged in the process.
Currently the code is at v1.35: aKduino Code (149890 downloads )
Here is the revision history:
v1.35 20/12/2016:
- Code cleanup for first public release.
v1.33 19/12/2016:
- Added full control of sound parameters through serial port.
v1.27 18/12/2016:
- First functional version.
- Automatic switching between PCM and DSD by monitoring DSDPIN.