ADAU1701 (JAB4) ADC values incorrect and changing
I'm using potentiometers to provide basic loudness/tone functionality in my project and have come across a problem I'm not sure the best way to solve. Project is attached.
The issue is that the value coming from ADC isn't consistent, and it's not working the way I would expect it to. For example, ADC0, connected to L&H Loudness w/Ext Control in my project, doesn't return a consistent value. Even if I ground the input and confirm 0V there, I always see a non-zero value for ADC0. It's low, but not zero: usually something like .0037 or similar. If I ground and unground this input repeatedly, every time the non-zero value is different, sometimes .00012, sometimes .024, it varies quite a bit. At the same time, when using a potentiometer (or any voltage divider) the values are incorrect because the ADC input has 2.68VDC present on it. So even if there is nothing connected at all to this input, I can measure 2.65V with a DMM and the readback shows a value of ~0.7. If I construct a 50% voltage divider from two 1% resistors and place it between the 3.3V and ground pins, at the junction of the two resistors I should measure 1.65V, but instead it's 2.68V due to the 2.68V already present on the ADC input pin. Note that when I talk about the ADC input, I'm referring to all four present on the board; they behave the same.
The problems caused by this are:
Due to the non-zero value even with 0V on the input from the ADC, the volume is never truly all the way off. This wouldn't be a big deal except this value is controlling the L&H Loudness w/Ext Control cell, which is boosting that tiny signal in the bass when the Loudness curve is applied. So with the volume control set to zero there is still a low-level signal, and the loudness curve is being applied to that boosting the bass some 6dB, resulting in fairly loud bass around 60Hz even when there should be silence.
This 2.68V bias that is present on the ADC input makes the operation of the potentiometers nonlinear, so they don't work well for volume/loudness control or tone controls. There should be a linear operation, when the potentiometer is set to 50%, the ADC value should be .500. Or am I wrong about this?
It's possible I have misunderstood the right way to use these ADC inputs to control the Loudness and Tone cells, in which case I hope someone can clear up my confusion. Otherwise, what would be a solution to the non-zero and non-linear values?
Thanks everyone.
Zenith 20AT21Z.dspproj
Audio Signal Processors
software
SigmaDSP Audio Processors
adau1701
Hello,
Your schematic looks good to me. I tried it on my ADAU1701MINIZ eval board after a few mods -- since this board has only Aux ADC3 wired to a pot, I moved the loudness control to this Aux ADC and fed the two tone controls with a GUI slider. Everything worked OK. With the pot set to minimum, the Aux ADC reads a steady 0.00293, which works out to 3 LSB's out of 1024. Wiring the Aux ADC directly to the Loudness Control, though functional, can be improved by inserting a lookup table there. This has two benefits -- it can make the minimum volume exactly zero, and provide a "log taper" for the volume control. As with most functions in SimgaStudio, there's several ways to achieve this -- I used a Linear Interpolator since its input and output can be 0-1 decimal, thus no other mods are needed.
Just so you know -- any index-controlled block in SigmaStudio with N choices has a corresponding input range from integer 0 to (N-1), not 1 -- N. Thus for example, with your tone controls having 10 curves, their control input range is zero to integer 9. If you were to connect the integer 10 DC source directly to their red control pin, this out-of-range condition results in muted output or worse. The Aux ADCs never reach exactly 1.000, and the multiplication always rounds down -- so the multiplier's output is in fact integer 0 -- 9, and thus your present arrangement is OK.
Since the eval board's Aux ADC has a low and constant minimum level, there must be some issue with your hardware. Unfortunately I'm not familiar with the JAB4 board. Perhaps someone else here knows about it. The troubleshooting ideas listed below may or may not apply to this board:
When grounding an Aux ADC input, connect the input to a ground point close to the chip. This is especially important if the JAB4 has an onboard power amplifier, whose high current paths introduces voltage drops and noise.
If the JAB4 has on-board pots on the Aux ADCs (as do some SureDSP boards), you'll need to disconnect them to use external pots or resistors. What value are the 1% resistors? Since the Aux ADCs have a 18K input impedance, you need to use relatively small resistors, such as 1K -- 4.7K.
Does the board's manufacturer have a support forum? Does the board come with a schematic diagram (or can they supply one)?
Attached is your project with the Linear Interpolator added.
Zenith 20AT21Z-lin-int.dspproj
Best regards,
Bob
Hey Bob thanks so much for that detailed response. I'm going to give your table a try today; it sounds like exactly the solution.
Your other points about the ADC inputs are also really helpful. I assumed that the input impedance was quite a bit higher, silly me. My project isn't very typical: I'm retrofitting the DSP and amp board into vintage equipment from the 1960s, and it isn't practical to change to a different value potentiometer than what I have. Those are a 50K pot with audio (log) taper for volume, and and 250k pots with linear taper for tone controls. I might need to approach this from a different direction. There are a 12V and 35V DC supplies available on the chassis, maybe it makes sense to build a network with the existing pots that will give me the 0-3.3v into a low impedance using those.
Hi awestenb,
That's quite a neat build you're making. Have fun with it!
Last evening I was working from memory, so let me correct a few things from the ADAU1701 Data Sheet:
Though the minimum Aux ADC input impedance is 17.5K, the typical value is around 30K. Still too low for direct input with your pots, however. Also, their resolution is only 8 bits (0 -- 255/256), with an option for 12 bits via filtering (see the data sheet, page 36). That filtering can be selected by an option directly below the Multipurpose Pin table, within the HW Configuration / Register Control tab as shown below:
Note that the options in this drop-down menu may be incorrectly labeled, as they were in previous versions of SigmaStudio. I haven't checked them recently. With only four choices, feel free to experiment with them.
I'd recommend that, rather than placing a higher voltage on the pots and dividing down to present a lower impedance to the Aux ADC inputs, that you continue to drive the pots with the 3.3V supply and make a little board with Rail-to-Rail (RRIO) Op-amp IC(s) to buffer the pot outputs. This is safer since it guarantees that the Aux ADCs can never see an input exceeding the chip's supply voltage, even during power-up and power-down. On a mixer made where I work, we did this even though using 10K pots. The pots will prove more reliable when you're not actually taking DC current from their wipers.
Best regards,
Bob
Well, your table worked perfectly, Bob! Zero issues. And now that I've wrapped my head around lookup tables, I think it might work fine to "re-linearize" the tone pots' behavior. If I can't get that to work, using the op-amps is a cheap and easy suggestion, so I have a couple of different options here.
Thanks again for your help!
-alan
Please log in to reply.

