Post Go back to editing

adau1701 aux adc

Category: Software
Product Number: Adau1701
Software Version: 4.7

Hi, 

I am still learning and understand one thing not exactly:

In the hardware window aux adc are readed but only 7bits.

MSB is always null.

Thanks for helping. 

  • Hello Andrzej500,

    There are a few things to unravel here. 

    The converter is an 8-bit converter. Then we have a filter and hysteresis feature on the AUXADC outputs. This is to help smooth out any noise caused by dirty pots. It is a great feature to prevent dithering of settings which can cause audible artifacts. This is all selectable via register settings. 

    The second thing to unravel is that the output of the ADC is left justified but not all the way up to the max for a 1.23 number. In the core this is not the sign bit but it is when you send or get data to and from the serial ports. This feature is also good when using tables. Because you know the MSB will never be a "1" which is helpful when setting up the control data on the output of the tables. 

    To look at the raw data you have to shut off the filtering. The filter outputs are 12 bit. 

    This is the register setting and one of them is the "off" setting:

    The "No Low Pass" still has hysteresis so the "off" setting is as shown in the screenshot. 

    Now looking at the results:

    The is with the pot all the way up. The hex data is 0x7F800.

    If you look at the ones it is 7F8

    The binary is 0111 1111 1000

    You can see the eight bits are shifted one bit off of the MSB. 

    If I set it to No Low Pass Filter I can see the 12 bits,

    This result is 12 bits. 0x7,A3,80 is 12 bits. 

    This setup of the position of the MSB out of the AUXADC is purposeful and very handy. 

    For a 5.23 number the data out of the AUXADC it will NEVER reach 1.0 It will only get to 0.999 which is super handy. 

    Look at this example when using it to control an index controllable filter. 

    This filter was setup to have four settings, 0,1,2,3

    So the table is setup to have four entries with the data of 0,1,2,3

    The output is set to integer

    The input is set to fractional. 

    So the whole number portion of the data on the control pin is what will determine the index selected. 

    The fractional portion does not matter so I will use "x"'s for that part.

    Input --> Output

    0.xxx --> 0 

    1.xxx --> 1

    2.xxx --> 2

    3.xxx --> 3

    You absolutely do NOT want it to get to 4.xxx, Because this data is a pointer to memory and if it gets to 4.xxx it will pick up the data in the next memory location that is not part of the index selectable block. So who knows what the data will be? Now you will get problems with the audio.

    So what you do is multiply the output of the AUXADC by the number of elements of the table and you are fine. 

    It will never reach 1.0 so the output of the multiply block will never reach 4

    I know I gave you more than what you asked about but it helps to understand all the things that are going on.

    Dave T

  • Hallo Dave,

    thank you for the very detailed answer.

    I used ReadBack to help me. I couldn't set it to 8.0 format, but I can see the progress.

    I'll "study" your answer and get back to you if I have any questions.

    Thanks again.

  • Hello Andrzej500,

    You should watch my video on this topic on my YouTube channel.

    The first half is on the Sigma100 which is this part. 

    https://youtu.be/fyNs2lq0p-Q?si=0JYpRZRF5h3wOkqy

    Dave T