Building the ultimate NOS DAC using TDA1541A

Thinking about the LSB

If you shift the 16-bit word to the left, you get a 17-bit word where the LSB will be 0. Since the DAC accepts 16-bit word as rfbrw and SSerg pointed out, the MSB must be be stripped. The original MSB will now be used for switching between upper/lower DAC, and it will not enter into either DAC.

The lower DAC will get xxxx xxxx xxxx xxx(0) between 0 and 65535, and 1111 1111 1111 111(0) between 65536 and 131071.
The upper DAC will get 0000 0000 0000 000(0) between 0 and 65535, and xxxx xxxx xxxx xxx(0) between 65536 and 131071.

I put a (0) for the LSB which is not coming from the input 17-bit word. Alexandre, you are right, this bit has to follow the other bits, it should be 1 if all 15-bits are 1, and 0 if all 15-bits are 0, or derived from a 20/24-bit word (or random/dither?) if the 15-bits are x. This needs some logic circuit.
 
Last edited:
Hi Alex,

You can not "shove" anything into TDA1541 except for 16 bits. The reason is simple: it has a 16-bit input register. For one sampling period, only the contents of this 16-bit register TDA1541 can be perceived as data, and nothing more. The colleague rfbrw already wrote about this.

Serg, it is truly hard to relay things here in a manner that everybody understands. I would expect everyone to get the very basics, such as: tda1541 is a 16 bit dac.

When I say 17 bit input I am talking about the logic, obviously. To be clear: the logic circuit at the input that interfaces with the two dacs. I thought I made that clear in the previous posts.
 
If you shift the 16-bit word to the left, you get a 17-bit word where the LSB will be 0. Since the DAC accepts 16-bit word as rfbrw and SSerg pointed out, the MSB must be be stripped. The original MSB will now be used for switching between upper/lower DAC, and it will not enter into either DAC.

The lower DAC will get xxxx xxxx xxxx xxx(0) between 0 and 65535, and 1111 1111 1111 111(0) between 65536 and 131071.
The upper DAC will get 0000 0000 0000 000(0) between 0 and 65535, and xxxx xxxx xxxx xxx(0) between 65536 and 131071.

I put a (0) for the LSB which is not coming from the input 17-bit word. Alexandre, you are right, this bit has to follow the other bits, it should be 1 if all 15-bits are 1, and 0 if all 15-bits are 0, or derived from a 20/24-bit word (or random/dither?) if the 15-bits are x. This needs some logic circuit.

Lcsaszar, I think you got it already, but just to be clear: nothing stops you from having a 17 bit input into the logic circuit and in this manner you will fully realize the potential of this circuit (a true 17 bit sign magnitude dac).

If you want to use only a 16 bit input you still get the benefit of a better behaved dac around the zero crossing. Your 16 bits input will certainly be dithered already, I would not add a random lsb in this case.

Also, please take notice of the two zeros at bipolar zero. That is, one of the segments needs addition of 1 LSB, otherwise there will be a repeated code at the zero crossing. The logic has to take care of this.

The last detail is when the 17 bit input is all ones. The logic should not add one lsb to this particular code.

Thanks,
Alex
 
Last edited:
Serg, it is truly hard to relay things here in a manner that everybody understands. I would expect everyone to get the very basics, such as: tda1541 is a 16 bit dac.

When I say 17 bit input I am talking about the logic, obviously. To be clear: the logic circuit at the input that interfaces with the two dacs. I thought I made that clear in the previous posts.

Lcsaszar, I think you got it already, but just to be clear: nothing stops you from having a 17 bit input into the logic circuit and in this manner you will fully realize the potential of this circuit (a true 17 bit sign magnitude dac).

If you want to use only a 16 bit input you still get the benefit of a better behaved dac around the zero crossing. Your 16 bits input will certainly be dithered already, I would not add a random lsb in this case.

Also, please take notice of the two zeros at bipolar zero. That is, one of the segments needs addition of 1 LSB, otherwise there will be a repeated code at the zero crossing. The logic has to take care of this.

The last detail is when the 17 bit input is all ones. The logic should not add one lsb to this particular code.

Thanks,
Alex



Their ability to understand such simple things is truly low, yet they feel somehow superior about it. It is called a Dunning–Kruger effect, so I wouldn't worry about trying to explain it to them since they cannot understand that MSB which acts as sign bit is no longer going into either DAC. It just an information for the glue logic to know how to steer both segments in which 16 LSB bits are going to (the input data is 17-bit long with MSB sign bit).

In the distance you can already hear them shouting "but without MSB it is 15-bit DAC!!1"...
 
Also, please take notice of the two zeros at bipolar zero. That is, one of the segments needs addition of 1 LSB, otherwise there will be a repeated code at the zero crossing. The logic has to take care of this.

The last detail is when the 17 bit input is all ones. The logic should not add one lsb to this particular code.
I agree with both remarks.
One just needs a Windows calc set to Programmer mode and a piece of paper to understand all this :wave:
 
Hi sumotan,
I think I understand what John is getting at but I’m not smart enough to implement this correctly so I’ll just focus on what I know & learn from the experts here in the forum.
I just wanted to warn against a mistake. But some are stubbornly wanting to implement an erroneous decision. I have already run out of arguments, it's awkward to repeat them again and again.
 
Hello

I want to use the WM8804 to replace the CS8412 in my NOS TDA1541 dac.

Since WM8804 are cmos 3.3v out and the TDA1541 are TTL 5v I2s input, I would use buffers for the 3 I2s signals between the WM8804 and the TDA1541.

I have many 74AC04, but it would invert the signal, can I use two 74AC04 in serial for each I2s signals, so it would buffered without inverting the I2s signal ?

Thank

Bye

Gaetan
 
Hello

Some times ago, I've read in few web pages or forums, about guys who use the WM8804 or WM8805 with the TDA1541 in NOS mode, and the output signal was not good, they use buffers for I2S signal and they get a good output signal. Maby the WM8804 or WM8805 cannot have enough current to drive the WS, BCK, and DATA signal of the TDA1541.

I did trace back only one of those page but here it is.

Twisted Pear S/PDIF WM8804 Transceiver Module on TDA1541A problem

Thank

Bye

Gaetan
 
Last edited: