I could use your help with the following:
We have an Adau1450 connected with I2C to a microcontroller. In the 1450 is a volume controller which I have to set with 8.24 fixedpoint values. But I don't want to do complex computations in my microcontroller, that's what the DSP can do much better :-)
So, I was thinking, can I calculate the right volume setting in the DSP if I feed it with integer values in the range of, say, -9600 to +600 (which represent a volume range of -96.00dB to +6.00dB) ? In the DSP there should be some calculation, which converts the integer dB values to a fixedpoint value for a Single Volume component. Or is it possible to write the calculated value directly to the I2C address of an other volume slider?
The fixedpoint values have a range of about -128.00 to +128.00 Where can I find how the DSP converts integer to fixedpoint values? I now use a lookup table in the microcontroller with fixedpoint values for volumes in range of -96dB to +6dB in steps of 0.5dB. But then I thought, why not feeding the requested value in dB's to the DSP, and let him/her do the math? I really want to get rid of the lookuptable and want to be able to set the volume more accurate then in steps of 0.5dB
For the lookuptable I wrote a small Delphi program which creates a table. To convert a dB value to fixedpoint 8.24 I use the following code:
One_dB := 0.11512925464970228420089957273422;Volume := -96.0; // one entry, others are -95.5, -95.0, -94.5, -94.0, .. etc.VolFixedPoint := Exp(Volume*One_dB);RegisterValue := Round(VolFixedPoint*$01000000); // ADAU1450
RegisterValue is the value what is added to the table.
This calculation should be done in the DSP if that is possible of course :-)
Hope someone has a hint :-)
With kind regards,