Soekris dam1021 Frequently Asked Questions & Resources

It’s been almost 3 and a half years since the introduction of the dam1021 to the DIY audio community.

In these 3 years there have been sold close to 2500 units (according to a serial no. that I noticed on a picture of a rev.5 unit) that have made a large number of audiophiles very happy.

The dam’s main thread at diyaudio.com is about 740 pages long, and while the first post has been edited to keep the specs and the firmware info up to date, there are still certain questions that keep popping up over and over again.

In this post I’ll try to address as many of them as I can.

F.A.Q.

Q: Where can I get firmware, manuals, etc?
A: http://www.soekris.dk/download.html

Q: What are its power requirements?
A: According to the manufacturer, power should be supplied by a transformer with two secondaries at 7 to 8 volts AC. The transformer should have a rating of at least 5VA. Alternatively, you may power it by a bipolar DC power supply outputting between +/-7.5 and +/-15 Volts. Power consumption is ~160mA for the positive rail and ~60mA for the negative.

Q: Does it support DSD?
A: Yes, DSD64, DSD128 and DSD256 (only native) has been supported since firmware rev. 1.06 (released May 2016) through the I2S input. DSD does get converted to PCM in order to be converted to audio by the R2R ladder (obviously.. we’re talking about an R-2R DAC).

Q: How do I control input selection?
A: Input selection is done either by connecting switches to J3 (see manual for more details) or by commands sent through the dam’s serial ports. There also exists an “auto input selection” feature.

Q: How do I control volume?
A: Either by connecting a pot to the relevant pins on J3 (see manual) or by commands sent through the serial ports.

Q: What if I want to add IR remote control?
A: You’ll have to use a microcontroller like an Arduino. I’ve done two such projects, ArDAM1021 and ArDAM1021 Lite.

Q: How do I upload new firmware?
A: Through the serial port(s). See: http://www.dimdim.gr/2015/02/soekris-r-2r-firmware-upgrade/

Q: What is the latency from digital input to analog output?
A: About 1mS. link

Q: How come the new firmware (rev. 1.19) does not play as loud as the older firmwares?
A: According to the manufacturer “The new 1.20 firmware and 4K filters have zero at -2 dB, the dam1021 then add 1 dB gain, resulting in zero at -1 dB with 1 dB margin, ie when volume level is set to 0 then it’s 1.26V rs output at resistor network, about 1.9V at buffered single ended and 3.8V buffered balanced.” link

Q: Is there a way to run truly “NOS”?
A: Yes: http://www.diyaudio.com/forums/digital-line-level/269776-filter-brewing-soekris-r2r-post5452884.html  ???  Beware that the specific filter is not compatible with the current DAM firmware (rev 1.19), since it now supports 4K taps (it used to support 2K taps).

Q: Can I use a pair of them as a 2-way digital crossover?
A: Yes, in theory you can, but it’s not fully supported by the manufacturer. Read below to understand why that is so.

Q: Can I sync several DAMs, for example to implement a digital crossover?
A: According to the manufacturer “multiple dam1021 running on same clock will sync to within a few uS” link

Q: How do I actually implement the HP and LP filters?
A: You need to design your own custom filter files and load them. “the dam1021/dam1121 have the hardware with support for up to 15 IIR biquad filters per board” link Not for the faint of heart.

Q: I have “ Rev x”, do I need to do power mods?
A: If you have a Rev. 1 board you do need to perform the mods. Later revisions are OK. Rev. 5 has 20 x 100uF Samsung caps so definitely no need for power mods. link

Q: What can I do to make the DAM sound better?
A: a) Don’t use the buffered outputs. Their SQ is inferior to the unbuffered outputs.
b) Use a proper power supply. The better the PS, the better the sound. In my experience, the best one so far is the Salas UltraBiB.
c) Use a custom filter pack. Beware that custom filter packs may not support DSD or take advantage of the increased available number of taps made possible by the latest (rev 1.19) firmware.
d) Be sure to insulate the screw mounting holes from the (grounded) chassis by using non-conductive screws or some other method.

Q: I’m feeding my dam1021 audio from my RPi’s I2S output. Why does some music play fine while some does not?
A: Most audio RPi distributions output whatever they find in the music file without altering it, like for example a 44.1K/16bit FLAC file will produce a 16bit I2S signal. But the dam1021 only supports 32bit I2S signals. The solution is to force the RPi to only output 32bit I2S. Different audio distributions have different ways of accomplishing that.

Q: What does the dam1021’s output buffer schematic look like?
A: The circuit has changed since the first revision. The current (rev.4&5) circuit looks like this: http://www.diyaudio.com/forums/vendor-s-bazaar/259488-reference-dac-module-discrete-2r-sign-magnitude-24-bit-384-khz-post5347636.html



Resources

Official thread on diyaudio.com: http://www.diyaudio.com/forums/vendor-s-bazaar/259488-reference-dac-module-discrete-2r-sign-magnitude-24-bit-384-khz.html
Filter brewing thread: http://www.diyaudio.com/forums/digital-line-level/269776-filter-brewing-soekris-r2r-147.html
Soekris’ DAC implementations : http://www.diyaudio.com/forums/digital-line-level/267948-soekris-dac-implementations.html
Wiki: http://www.diyaudio.com/wiki/Soekris_R2R_DAC?
HiFiDuino : https://hifiduino.wordpress.com/
Randytsuch : http://randytsuch-audio.blogspot.com/2015/11/soekris-r2r-dam-dac.html
moredamfilters.info: https://web.archive.org/web/20161025204639/http://www.moredamfilters.info/

..and of course my posts about the dam1021:

Main Soekris DAC page: http://www.dimdim.gr/diyaudio/soekris-dam1021-sign-magnitude-r-2r-dac/
dam2012 s/pdif inputs board page: http://www.dimdim.gr/diyaudio/soekris-dam1021-spdif-usb-board/
ArDAM1021 page: http://www.dimdim.gr/arduino/ardam1021-project/
ArDAM1021 Lite page: http://www.dimdim.gr/arduino/ardam1021-lite-project/
dam1021 Vref mod : http://www.dimdim.gr/2015/09/soekris-dam1021-vref-mod/
dam1021 firmware update info : http://www.dimdim.gr/2015/02/soekris-r-2r-firmware-upgrade/

Let me know if I missed anything (I’m sure I did..).

I’ll try to keep this FAQ updated.

Linear power supply for the Raspberry Pi: is it worth it?

Pretty much everyone agrees on this one, still, it took me a while to get on the bandwagon. Probably because I am not using an RPi as my main transport..

In order to test this I needed a proper linear power supply, capable of outputting at least one “real” amp at 5V. It would also have to be as low noise as possible. After some searching I ended up picking the TPS7A4501 for the job. Since its output voltage is adjustable, it would also come in handy for various projects. So I designed a PCB that would do a proper job of “hosting” the regulators along with the necessary rectification and filtering stages and had a bunch of them made.

I also ordered a proper custom-made toroidal transformer, one that would have 5 secondary windings, each of them outputting 6VAC at 1.5A and one sixth winding outputting 3V at 2A. The end game would be to replace all of the RPi’s on-board switching regulators with linear ones.

But for starters I’d just power the RPi with 5V via its USB port. Here are a couple of RPi 3s being powered by my linear supplies. This setup would be used to compare the Allo.com original Boss with its new “v1.2” version. More on that in another post.

Power draw on the linear power supply was measured to be at about 500mA @ 5V.

My “reference” 5V SMPS is this one:

It’s an old but beefy switching mode power supply from an old HP tablet. It’s specc’ed at 5.3V @ 2A.

In order to be as impartial as possible, I took the setup to a friend’s house and had him and a couple of other friends audition the RPi powered either from the SMPS or by my linear power supply.

In both cases, the RPi was running Archphile and was connected to my upgraded-with-ES9028Pro-and-Mercury-Buffalo III DAC via USB.

The difference between the two power supplies was immediately obvious. It was like with the SMPS we had an at-best mediocre source – DAC combination, while with the linear power supply the setup became “proper”, it sounded “in-place” among my friend’s high performing system. The sound stage became better defined, the detail level went up, overall the presentation was more realistic. In other words, it was like the jitter of the system went down, but perhaps the noise levels in the system also decreased.

In other words, IMHO no serious audiophile should be powering his RPi by a run-of-the-mill 5V SMPS, even if he is using it as “just a USB transport”.

Arduino controlled Dual Mono AK4490 DAC (Part 3)

Following up on Part 2, it’s time to talk about the output stage.

This output stage is the brainchild of my friend Kostas, all I did was lay out the PCB.

It is a fully discreet single-ended class-A output stage, outputting ~2.4V RMS.

This is its schematic:

This is the PCB:

And this is the BoM: AK4490 dual mono DAC - Discreet Analog stage BOM (894 downloads)

The BoM includes part numbers for most parts from Mouser. The only parts that are not in production and must be found elsewhere are the UPA68H. Ebay is a good bet. Chances of getting fake parts are pretty small, but just in case do this to double check the ones that you bought: http://www.diyaudio.com/forums/analog-line-level/296406-salas-dcg3-preamp-line-headphone-post5330311.html (Thank you Salas for the info and the idea to use them in the first place!)

The only parts that need matching are T8A with T9A and T8B with T9B. There’s no need to go crazy with the matching – within 5% should be enough.

Power should be ideally +/-16VDC. A bit less is OK (I did my initial testing with +/-12VDC) but more will most likely damage the board. The board is running in class-A so current draw is constant. A power supply with 100mA current capacity should be enough.

Bias current is adjusted by the multi-turn trimmers R26A and R26B. They should be adjusted to their mid value before soldering to the board (~1K). To adjust bias just measure current consumption at one of the rails while turning the pot. Adjust for ~25mA total current draw per rail and per channel. Current draw on the negative rail should be about 1mA higher than on the positive rail. Bias should be re-adjusted if the power supply voltage needs to change.

After bias adjustment and with no input signal you should check for DC at the outputs. If everything went well you should be seeing anywhere between 0 to a few mV of DC voltage.

A few design notes:

  • This design is inverting. I’ve set up my AK4490 code to also invert the 4490’s outputs so as to end up with a non-inverting overall output. But it doesn’t seem to be making much of an audible difference, since I can’t hear a difference as I’m switching between inverting and non-inverting output.
  • There is provision for a relay that switches between the default filter for PCM (-3db @ ~90KHz) to a more proper filter for DSD (-3db @ ~50KHz). This feature has not been tested yet..

Regarding the resistors, we’ve chosen to go with mini MELF resistors (type 0204) because of their high quality and in general excellent reputation for audio. We are aware that some of the necessary values ATM are kind of hard to source so we’ve included notes in the BoM with the really critical parts and valid value ranges for the less critical other values. Note that “+/-5% from initial value” does not mean that the parts tolerance can be 5% – it means that instead of for example a 10K resistor you can use a 10K + 5% = 10.5K part. It still has to be matched to its counterpart, of course.

I am including these substitutions, as reference:

Instead of the proposed 604R : —-> https://gr.mouser.com/ProductDetail/Vishay-Beyschlag/MMA02040C6190FB300/?qs=sGAEpiMZZMsU0eETUM64Jwu1lXnAfA1Az%2fUBmHPWxBQ%3d
Instead of the proposed 62R —-> https://gr.mouser.com/ProductDetail/Vishay-Beyschlag/MMA02040C5909FB000/?qs=sGAEpiMZZMsU0eETUM64JzhzDaxYafIopmV6xoU7Pd%2faEeFyYr39dw%3d%3d
Instead of the proposed 49,9R —-> https://gr.mouser.com/ProductDetail/Vishay/CMA02040X3909GB300/?qs=%2fha2pyFaduinSoUQ%252bxM%252bcspKJgxV2WgydeZC1mFkJQ0%3d
Instead of the proposed 499R —-> https://gr.mouser.com/ProductDetail/Vishay-BC-Components/CMA02040X4700GB300/?qs=sGAEpiMZZMsU0eETUM64J9XrXp4g00LTnadULizxluo%3d
Instead of the proposed 33R —-> https://gr.mouser.com/ProductDetail/Vishay-Beyschlag/CMA02040X3309GB300/?qs=sGAEpiMZZMsU0eETUM64J5DAE%2fHuiq02KfqnEeQjWns%3d
Instead of the proposed 10R —-> https://gr.mouser.com/ProductDetail/Vishay-Beyschlag/CMA02040X1009GB300/?qs=sGAEpiMZZMsU0eETUM64J5wRh77yguxgpX8F3yMYvKE%3d

The value of two of the required 1K resistors (the R20A & R20B) is critical, so you should use these —-> https://gr.mouser.com/ProductDetail/Vishay-Beyschlag/CMA02040X1001GB300/?qs=sGAEpiMZZMsU0eETUM64J5DAE%2fHuiq026nqxTapoB%252bc%3d
for the other 6 non-critical 1K resistors you can use these —-> https://gr.mouser.com/ProductDetail/Vishay-Beyschlag/CMA02040X1201GB300/?qs=sGAEpiMZZMsU0eETUM64J5DAE%2fHuiq02Tdrq8lX57XI%3d

The value of the 120R resistors is critical, so are the tolerance of the 49.9R (substitution for 39R) resistors. Their values should be matched.

This concludes Part 3. The next post will detail how everything works together.

Arduino controlled Dual Mono AK4490 DAC (Part 2)

Following up on Part 1, it’s time to talk about the “brains of the operation”. Bare with me, this is going to be a rather long read.Hardware selection

The DAC needed to be controlled by a microcontroller so I looked into my options. I wanted something that would:

  • Be easy to program, so the Arduino IDE was a must.
  • Be able to drive a TFT.
  • Have enough storage capacity to store enough code & fonts for the TFT.
  • Be readily available.
  • Be relatively low cost, since it would have no influence on the dac’s SQ.
  • Be easy to build / integrate into a new design, even by a novice.

After some consideration, I decided to use an STM32F103 ready-made module. It would plug in to a “mainboard” of my design, along with the chosen TFT. It would be fast enough, have enough flash & ram, be easy to integrate and develop for and it would cost next to nothing.

Next up was the TFT. I’d seen on Ebay an interesting one that was relatively big, high resolution and inexpensive. It was this one:

It can be found on Ebay by searching for “3.5 tft uno 320 x 480”. Expect to pay 6-8€ inc. shipping.

After some searching I found a suitable library that (after some slight tinkering) would allow my tiny STM32 to drive it properly. (Note: do not download the library from this link. I will provide a customized version of the library together with my code).

I found a ready-made library for configuring the Si570 and modified it to run on my STM32, using one of its hardware I2C ports. I will also include this library in my code. To complete the recipe I also found working rotary encoder and IR receiver libraries.

The code

Next up was the prototyping work. I adapted my TFT HiFiDuino Pro code to run on the STM32 & TFT combo, with support for AK4490 dual mono operation. The end result had this feature list:

  • Support for either Dual Mono or single chip setups.
  • Support for the Amanero Combo384 USB to I2S module (must be set up as slave with MCLK/2 and F0,1,2,3 enabled).
  • Control with one rotary encoder with push-to-select functionality.
  • IR Remote support.
  • Support for software volume control, from -99dB to 0dB
  • Display incoming signal sampling rate and type, determined by “reading” the relevant I/O pins of the USB to I2S board.
  • Display and control of the AK4490’s digital filter.
  • Selection of the proper MCLK frequency according to incoming SR and type and programming of the Si570 accordingly.
  • Control of “DSD Direct” function of the AK4490s.
  • Control of the DSD Filter’s Frequency (50KHz or 150KHz).
  • Control of the Sound Mode of the AK4490.
  • Choice of either inverted or normal analog output for the AK4490s.
  • Choice of two sets of MCLK frequencies, either 22/24MHz or 45/49MHz.
  • Remote power on/off functionality (or always on – configurable in the code).

Software Requirements:

In the download I am including the modified versions of the libraries (as mentioned above) as well as the necessary font files. Be sure to extract the contents of “Libraries (place in Libraries folder)” to your Arduino IDE’s “libraries” folder.

Download it here: aKduino v2 (1311 downloads)

Here is the revision history:

v1.72 24/12/2017:

  • Minor changes to make compatible with current stm32duino core (changed HardWire.h to Wire.h and other minor stuff).
  • First public release as part of completed dual mono DAC project.

v1.66 10/10/2017:

  • Minor volume bugfix.
  • SuperSlow filter still problematic.
  • Enabled DAC synchronization feature (experimental..).

v1.64 30/09/2017:

  • Bugfixes.

v1.60 20/09/2017:

  • Added support of rotary encoder and IR remote control.
  • 3.5″ TFT support.

v1.50 07/01/2017:

  • Added support of rotary encoder for volume control.
  • Bugfixes related to DSD.

v1.41 06/01/2017:

  • Added support for dual mono mode.

v1.36 03/01/2017:

  • Added very basic TFT support.

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.

The “motherboard”

After I was certain that everything related to the software was working the way it should, I designed a “motherboard” that would take care of the following:

  • Accept the STM32F106 board.
  • Accept the 3.5″ TFT.
  • Accommodate an 24LC256 EEPROM chip, used to store the DAC’s configurable settings.
  • Accommodate two sets of I2C signal isolators and I/O expanders.
  • Include headers for the encoder, IR receiver, power relay, non-isolated and isolated I2C communication, unused uC pins, etc.

This is what I ended up with:

Basic Hardware Requirements:

  • STM32F106 module (a.k.a. “blue pill”, search Ebay for “stm32f106c8t6 board”)
  • 3.5″ TFT with resolution of 320 x 480 (Search Ebay for “3.5 tft uno 320 x 480”)
  • 24LC256 EEPROM chip
  • I2C Isolator ICs, I/O expanders, passive components, etc (see BoM)
  • Rotary Encoder
  • IR Receiver
  • Compatible IR remote control (Apple Remote or other – in any case you must edit the code and input the proper IR codes for your remote, see below)
STM32 TFT Motherboard Bill of Materials
PCB Part Value Notes
C1, C2, C3, C4, C5, C6, C7, C10, C11 100n, 0805
D1 1N4001, DO214BA
L2 Ferrite bead, low R, 1206/3216
LED1, LED2 LED 1206
Q1 AO3400, SOT23
Q2 BC808, SOT23
R1, R2, R3, R4, R12, R13 2.2 – 3.3Κ, 0805
R5, R7 2.2K, 0805
R6 5.1K, 0805
R8, R11 1K, 0805
R9, R10 10K, 0805
U1 24LC256, SO-08
U2, U4 SI8605, SOIC-16
U3, U5 MCP23008, SO-18W
DC_5V .100 (2.54mm) – 2 Pin
EXP .100 (2.54mm) – 2×4 Pin
I2C .100 (2.54mm) – 3 Pin
I2C_ISOL1A, I2C_ISOL1B .100 (2.54mm) – 6 Pin
I2C_ISOL2 .100 (2.54mm) – 3 Pin
IR .100 (2.54mm) – 3 Pin
JP1, JP2 .100 (2.54mm) female – 6 Pin
JP3, JP4 .100 (2.54mm) female – 8 Pin
UART .100 (2.54mm) – 3 Pin
MCP_ISOL1 .100 (2.54mm) – 10 Pin
MCP_ISOL2 .100 (2.54mm) – 2×6 Pin
POWER_RELAY .100 (2.54mm) – 2 Pin
ROTENC .100 (2.54mm) – 4 Pin
STM32_BLUE_PILL STM32F103C uC board

How do I make it work?

Power

You have to supply the board with 5VDC at ~300mA through header DC_5V.

DC_5V
Pin Function
+ 5VDC
- GND

Basic connectivity

Serial port:

UART
Pin No. Function
1 RXD (PA10)
2 TXD (PA9)
3 GND

Rotary encoder:

ROTENC
Pin No. Function
1 PB13
2 PB14
3 PB15
4 GND

IR control:

IR
Pin No. Function
1 PB9
2 GND
3 Vcc

If you will be controlling a power on/off relay, you can use the POWER_RELAY header:

POWER_RELAY
Pin Function
+ 5VDC
- GND

Expansion header:

EXP
Pin No. Function
1 3.3V
2 GND
3 PB3
4 PA8
5 PA15
6 PB1
7 PA12
8 PB0

I2C header (non-isolated):

I2C
Pin No. Function
1 GND
2 SCL (PB10)
3 SDA (PB11)

Isolated I2C ports

The board has provisions for two separately isolated I2C ports, complete with I/O expanders on their isolated sides. The idea is to connect the DAC board to one of the isolated ports (I2C_ISOL1 & MCP_ISOL1) and your USB-to-I2S board to the other isolated port (usually MCP_ISOL2)

I2C_ISOL1A(& B)
Pin No. Function
1 3.3V (isolated)
2 SDA (PB11)
3 OUT (PC13)
4 IN (PC14)
5 SCL (PB10)
6 GND (isolated)

MCP_ISOL1
Pin No. Function
1 3.3V (isolated)
2 GP0
3 GP1
4 GP2
5 GP3
6 GP4
7 GP5
8 GP6
9 GP7
10 GND (isolated)
I2C_ISOL2
Pin No. Function
1 SCL (PB10)
2 SDA (PB11)
3 GND (isolated)
MCP_ISOL2
Pin No. Function
1 3.3V (isolated)
2 PC15
3 PA11
4 GP0
5 GP1
6 GP2
7 GP3
8 GP4
9 GP5
10 GP6
11 GP7
12 GND (isolated)

That’s it for Part 2. Stay tuned for Part 3: The output stage.

Arduino controlled Dual Mono AK4490 DAC (Part 1)

For the better part of a year I’ve been busy developing what one would call a “respectable” DAC from scratch. It has been a team effort, with different people becoming more involved with specific aspects of the project, but pretty much everyone involved ended up learning a lot about DACs. Right now, the project is for the most part finished, in that it is fully functional with a USB input and a pair of single ended outputs (or balanced, if you use a passive transformer-based stage). It is controlled by an Arduino-compatible micro-controller, running my aKduino v2 code (more on that in a future post).

I will do a series of posts detailing the design and build process, with each post covering a specific PCB. When the series is complete, the contents of all of the posts will be concatenated into a project page.

So, without further ado, this is the schematic of the main DAC board:

(Right click, Save Image As.. to download it in full resolution)

This is the 4-layer PCB:

This is the parts placement diagram:

And this is the BoM (v1.9) in xls format: Dual AK4490 DAC (main board BoM) (1041 downloads)

Design considerations

The design goal was to do a dual mono design so as to maximize SNR and channel separation. A 4-layer PCB design was chosen so as to have a very solid, low impedance ground plane as well as proper power and signal planes. The I2S, audio signals and power after the local LDO regulators are routed on the top layer, the 2 middle layers are ground and power planes, and the bottom layer serves to route I2C signals and some power lines.

Power

All of the local power supplies are implemented using the currently top-of-the-line LT3042 LDOs. The VDDL & VDDR (analog power supplies) are set to 7.2V so as to maximize SNR and dynamic range. There is provision for providing separate pre-reg power supplies for the L and R channels (headers AVDDL and AVDDR) but I don’t consider that to be critical to SQ since there are local LDOs and the power draw is very very small. In my implementation I’m using a common pre-reg for both the AVDDL & AVDDR. The AVDDs and DVDDs are also supplied by LT3042 LDOs set to output 3.3V. The Si570 has its own dedicated 3.3V supply implemented with an LT3042 and features extra filtering.

Overall, the power requirements of the board are:
1) AVDDL: 8-10V DC at 40mA max
2) AVDDR: 8-10V DC at 40mA max
3) DVDD: 4-6V DC at 200mA max

Clocking & input signals

It was decided that the MCLK would be provided by a programmable low jitter oscillator, namely the Si570. This way we could select different MCLK frequencies at will, supporting different sampling rate families and different USB to I2S boards.

Speaking of USB to I2S boards, the DAC board has a very specific requirement: The USB board must be able to receive MCLK externally. In other words, the DAC board and USB board must be clocked from the same oscillator. This is due to the AK4490’s design. Unlike the ESS designs which by default run asynchronously, it needs to be on the same clock domain as its I2S sources.

So, the DAC board needs to output MCLK back to the USB board. There exist a number of USB boards that support that. The most popular ones are the Amanero Combo384 and JLsounds’ I2SoverUSB.

Since I had decided to do reclocking using flip-flops as close to the AK4490s as possible, and the flip-flops are clocked by the MCLK, its frequency needs to be sufficiently high in order to reclock signals corresponding to high sample rates. This translates to 49.152 MHz for sampling rates of 384KHz. If you’re content with going only up to 192KHz, you can use a MCLK of “just” 24.576 MHz. Of course you will also need the corresponding MCLKs of 45.1584 and 22.5792 MHz for the 44.1K families of SRs.

If you decide that you don’t want to do reclocking on the DAC board, you can just not solder on the flip-flops and just connect the proper pads together with some wire so as to bypass them. That way you can run with 22.5792 & 24.576 MHz clocks with SRs up to 384KHz (and probably beyond..).

If you decide that you would also prefer to not use the Si570 and just clock the DAC board directly from your USB to I2S board (or other suitable I2S source) you can also do that. You just don’t solder-on the Si570 and make a couple of changes to the Arduino code (to be implemented..).

But I urge you to try the Si570 & reclocking way first..

Construction hints

Start by first soldering on the power supply components (LDOs, resistors, caps, etc.) and testing that everything works the way that it should.

The LT3042s are pretty tiny and its easy to make a mistake while soldering them. I’ve found that the easiest method is by using a hot air rework station. First I use a regular soldering iron to tin the thermal pad and the pads with a small amount of solder. Then I apply a good amount of high quality solder paste, put the LDO on top of the pads and heat the area of the board until the solder melts. I set my hot air station to a relatively low temp of ~280 degrees C and the process takes less than a minute (per LDO). But you could also solder them with a soldering iron. To solder the heatpad, warm up the pad from the underside of the board and add solder.

After the power section, you should solder on the AK4490s and other low profile components. I do that with a low power (18W) soldering iron with a fine tip.

Next up is the Si570 programmable oscillator. I start by putting a little solder on one of the pads:

Then I add soldering paste and I place the Si570 on top of the pads. I use the fine tipped soldering iron to melt the solder on the tinned pad, effectively soldering the Si570 on the board. I then proceed to solder the rest of the pads by applying heat with the soldering iron to the side of the pads of the Si570 and adding solder.

You should finish up by soldering the electrolytic capacitors and other higher profile parts.
Beware that the spacing around the electrolytics is very tight. You should take that into account when selecting parts. The parts in the BoM are sure to fit in the available space.

That’s it for Part 1. Stay tuned for Part 2: The Controller.

TFT HiFiDUINO Pro update..

I finally managed to find the time to actually integrate my upgraded Buffalo III board into my Buffalo DAC.

In the process I discovered and took care of a number of bugs in my TFT HiFiDUINO Pro code.

The most serious bug was one that failed to properly initialize a new (blank) 24LC256 EEPROM chip. That effectively caused the code to crash.

Here is the change log:

v1.08 15/10/2017:

  • Fixed EEPROM init bug
  • Fixed DPLL settings bug & default DPLL settings for USB 2
  • Added alternative way of controlling Solid State Sidecar (via Pin A1)
  • Changed input names & icons to match my Buffalo III
  • Other minor bug fixes
  • Inverted power-on signal to make fully compatible with “TFT HiFiDuino” code
  • Inverted rotation of encoder to make fully compatible with “TFT HiFiDuino” code

v1.06 23/07/2017:

  • Initial release.

The new version of the code can be found at the project’s page.

Winter 2017-2018 teaser :-)

So many projects, so little time.. Here’s a teaser on what’s to come:

PGA2311-based preamp, with multiple inputs board, controlled by a custom Arduino, with an OLED screen.

Salas DCG3 preamp, powered by custom Salas Shunt Reg 1.2R.

MPD TFT display for Rasberry Pi, controlled by an STM32.

Ian’s Multichannel FIFO.

Allo.com’s DigiOne RPi HAT.

Dual Mono AK4490 DAC with on-board Si570 programmable oscillator and reclocking, Single ended Class A discreet output stage, Arduino controlled with STM32 controller and 3.5″ TFT screen.

Arduino controlled AK4118 based s/pdif receiver, with AK4137 SRC.

TFT HiFiDUINO Pro page is up..

Over 6.500 lines of code, completely re-written from scratch, it supports the ES9038Pro and ES9028Pro DAC chips.

Now supports both 3.2″ (legacy) and SainSmart 4.3″ TFTs.

Get all the juicy details: http://www.dimdim.gr/arduino/tft-hifiduino-pro-project/

ArDAM Lite custom PCBs for diyaudio.com

This post serves mainly as a placeholder for the build guide that I wrote for the PCBs, since it seems that some people had problems with the download link that I provided.

The build guide can be downloaded by clicking here: ArDAM Lite Build Guide (1566 downloads)

I do have a few left over PCBs, if you’re interested contact me for more info.

ES9028Pro power wows

Following-up on my previous post, I soldered a Crystek 100MHz clock and had a new set of Trident replacement boards made for my upgraded Buffalo III.

The new boards are direct replacements for the Tridents, supplying 2 x 3.3V for AVCC_L & AVCC_R, 3.3V for the oscillator, 3.3V for the AVDD and 1.2V for DVDD.

Upon powering up the board with the new clock and power supplies, I noticed a problem. Whenever I tried to play material with sampling rate over 44.1KHz, the sound became garbled.

In my test rig I had also used the same power supplies with no problem, so I guessed that the problem had to be the new oscillator. But the new oscillator appeared to be working just fine.

To further complicate things, when I turned off oversampling and the DPLL filter the sound improved (but still sounded bad because I was doing no oversampling).

After some probing and prodding, I realized that my 1.2V supply was sagging below 0.9V when the sampling rates went above 44.1KHz. That should not be happening, since I had set the current limit on my LT3042 regulators to about 125mA with the data sheet specifying the 9028’s 1.2V supply current consumption to 82mA. But it appeared that my 9028 was pulling in a lot more current.

So I disabled current limiting and tried it again. This time everything was working just fine, with no sagging, but my LT was getting hot. Real hot. Like 80 degrees C hot when playing 352.8KHz material. So I did a couple of things. First I desoldered the 1.2V power supply and inserted my DMM in series in order to measure the actual current draw. I got these results:

44.1KHz -> 140mA
DSD64 -> 147mA
DSD128 -> 157mA
352.8KHz -> 200mA

So up to 200mA! No wonder my LT3042 was having a hard time.. I was working it very close to its thermal limits.

I decided to mount it vertically and to add a heat sink to the back of the PCB.

With this arrangement I was getting about 62 degrees C with 44.1KHz material and up to about 75 degrees with 352.8KHz. This is tolerable for 44.1KHz playback but not cool (pun intended 😛 ) for high sampling rates. Since 200mA is pretty much the LT3042’s upper current limit, I’ll have to design a new power supply, either with two paralleled LTs or some other LDO. The bigger problem is the heat dissipation. I will have to make the PCB as big as possible in order to have a lot of room for heat sinking.

But why does this chip’s actual power consumption differ so much from the published specs? As always, the devil is in the details. The stated 82mA is for a sampling rate of 48KHz and a clock frequency of 40MHz. I’m using a 100MHz oscillator so power consumption ought to go up, but I never expected it to increase so much. I wonder what will happen if I input a 768KHz signal.