Electrical Engineering Stack Exchange is a question and answer site for electronics and electrical engineering professionals, students, and enthusiasts. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

For two DACs, one being sent D0-D7 and the other being sent D8-D15, with power supply being 5V, if 5V is added to output of 2nd DAC and then the two DAC outputs are summed, should result in a 16 bit DAC made up of two 8 bit DACs.

The only problem is that if the second DAC has 0x00 input then the 5V addition needs to be cancelled out which I am not sure how to do. The summing can be done by summing amplifier. The circuit need only work upto few 10s of kHz.

Is there something fundamentally wrong with this idea?

share|improve this question
9  
There's nothing fundamentally wrong with your idea, but you'll need to handle a design of relative complexity. Firstly it isn't a matter of just summing the results in analog signal. Before sum, you'll need to amplify the MSB DAC in a factor of x256 because each bit of MSB DAC is equivalent to 256 bits of LSB DAC. Than you'll need to offset this value in LSB DAC fullscale volts than you can add both. – PDuarte Mar 8 at 15:45
5  
Not to mention noise, distortion, supply capability... – PDuarte Mar 8 at 15:47
4  
If it was that easy, everyone would be doing it... Theoretically, yes, you can combine two DACs (you need multiplication rather than addition though). Realistically, you aren't going to get anywhere near 16bits, performance-wise. Just buy a 16bit DAC. – uint128_t Mar 8 at 15:50
2  
The offsetting is needed if the 256x multiplied value becomes too large. Suppose the 8 bit DACs give 1 Volt out full scale. Multiply that by 256 gives 256 V. Not so practical ;-). It is easier with a DAC supplying a current, then you can simply connect the current outputs in parallel (provided there's a load that will keep the voltage at the right value, a virtual ground or such). – FakeMoustache Mar 8 at 16:09
1  
What if instead of dividing the signal into top & bottom 8 bits, you implement it as a two-pass progressive approximation (like the way progressive JPG or PNG renders), with DAC1 providing (roughly) the even-numbered bits and DAC2 running at half power with (again, roughly) the odd-numbered bits. The math would be messy, but I think you can get 15 bits of signal accuracy out of it. – Foo Bar Mar 8 at 17:49
up vote 24 down vote accepted

It's possible, but it won't work well.

Firstly, there is the problem of combining the two outputs, with one scaled precisely 1/256 of the other. (Whether you attenuate one by 1/256, amplify the other by 256, or some other arrangement, *16 and /16 for example, doesn't matter).

The big problem however is that an 8-bit DAC is likely to be accurate to something better than 8 bits : it may have a "DNL" specification of 1/4 LSB and an "INL" specification of 1/2LSB. These are the "Differential" and "Integral" nonlinearity specifications, and are a measure of how large each step between adjacent codes really is. (DNL provides a guarantee between any two adjacent codes, INL between any two codes across the full range of the DAC).

Ideally, each step would be precisely 1/256 of the full scale value; but a 1/4LSB DNL specification indicates that adjacent steps may differ from that ideal by 25% - this is normally acceptable behaviour in a DAC.

The trouble is that an 0.25 LSB error in your MSB DAC contributes a 64 LSB error (1/4 of the entire range) in your LSB DAC!

In other words, your 16 bit DAC has the linearity and distortion of a 10 bit DAC, which for most applications of a 16 bit DAC, is unacceptable.

Now if you can find an 8-bit DAC that guarantees 16-bit accuracy (INL and DNL better than 1/256 LSB) then go ahead : however they aren't economic to make, so the only way to get one is to start with a 16-bit DAC!

Another answer suggests "software compensation" ... mapping out the exact errors in your MSB DAC and compensating for them by adding the inverse error to the LSB DAC : something long pondered by audio engineers in the days when 16-bit DACs were expensive...

In short, it can be made to work to some extent, but if the 8-bit DAC drifts with temperature or age (it probably wasn't designed to be ultra-stable), the compensation is no longer accurate enough to be worth the complexity and expense.

share|improve this answer
    
Your point about drift is a good one and would make this method impractical for trying to get e.g. 20-bit precision by combining two 8-bit DACs. I would think trying to get 13-14 usable bits from 2x8 would be feasible, however. – supercat Mar 8 at 18:26
    
I see, thanks for the reply. An up vote. – quantum231 Mar 8 at 23:07

An 8 bit DAC can output \$2^8= 256\$ different values.

A 16 bit DAC can output \$2^{16} = 65536\$ different values.

Note how that multiplies, it is not an addition (as would happen when you sum the outputs of two 8 bit DACs).

If I would take two 8 bit DACs and sum their outputs, what are the possible values ?

Answer: 0, 1, 2, ..., 256, 257, 258, ....511, 512 and that's it !

A 16 bit DAC can do 0,1,2 ...,65535, 65536 that's a lot more !

Theoretically is is possible but then you will need to multiply the output of one of the 8 bit DACs by exactly 256 and connect the LSB bits to the 1x DAC and the MSB bits to the 256x DAC. But don't be surprised if accuracy and linearity suffers !

share|improve this answer
    
Hmm I see. I did not realize that... – quantum231 Mar 8 at 15:52
1  
If one uses a multiplication factor of less than 256 one may then compensate for non-linearity in software. Differential non-linearity will be at least equal to the step size of the smaller DAC, but one using two 8-bit DACs one might realistically manage a monotonic 14-bit DAC if one can accurately determine what compensation factors to apply – supercat Mar 8 at 16:25
2  
You could also multiply the output of one DAC by 257/256 and sum them, if you enjoy the mathematical challenge of figuring out which values to send to which DAC to get a given total output. Otherwise, the callenges are the same :) – hobbs Mar 8 at 21:35
    
@hobbs: I don't think that quite works. If one DAC outputs 0 to 65280 in steps of 256, and the other outputs 0 to 65535 in steps of 257, one will be able to achieve all output values between 65280 and 65535, but won't be able to achieve any in the range between e.g. 32639 and 32768. That's not really doing much better than a single 8-bit DAC. – supercat Mar 9 at 23:09
    
@supercat you're right, I fluffed the math. I think there's a version that works if you can go negative, but it doesn't work the way I wrote it. Was mostly an attempt at humor anyhow. – hobbs Mar 9 at 23:11

The technique is workable if the full scale voltage of the "inner" DAC is larger than the step size of the outer DAC, and one has a means of accurately (though not necessarily quickly) measuring the output voltages generated by different output codes and applying suitable linearity adjustments in software. If the full-scale voltage of the inner DAC might be less than the worst-case step size between two voltages on the outer DAC (bearing in mind that the steps are seldom absolutely perfectly uniform) there may be voltages that cannot be obtained with any combination of inner- and outer-DAC values. If one ensures that there is overlap in the ranges, however, then using software linearity correction can enable good results.

BTW, the old Cypress PSOC chip design (I don't know about newer ones) emulates an nine-bit DAC using two six-bit DACs which are scaled relative to each other. It doesn't use software linearity correction, but it's only trying to add three bits of precision to a six-bit DAC. Trying to add more than 3-4 bits of precision to any kind of DAC without using software compensation is likely not to work very well.

share|improve this answer

21 years ago when I was a Poor College Student (and could only afford 8-bit DACs), I used this technique to combine two 8-bit DACs into a higher-bit DAC, knowing that I would not get 16 bits accuracy, because of integral nonlinearity (INL) and differential nonlinearity (DNL). DNL on the most-significant-byte DAC is the killer in this case; if you have INL then the output is distorted but still smooth. DNL dictates the size from one DAC step to the next, and if it varies enough, then you will see discontinuities or reversals when crossing 8-bit boundaries: 0x07ff <-> 0x0800 for example, as the MSB DAC changes from 0x07 <-> 0x08, it might change not by the ideal 256 counts of the LSB DAC, but by 384 counts or 128 counts (±1/2 of its own least significant bit). A good DAC will have only 1/2 LSB DNL, a mediocre DAC will have worse DNL, though it gets harder the higher the resolution, so it should be fairly easy to find 1/2 LSB DNL in an 8-bit DAC but not in a 16-bit DAC.

I don't remember what the effective resolution was in my case, maybe 12 or 13 bits, and I had to tune the gain of the 2nd stage manually with a potentiometer.

share|improve this answer
    
Hmm. Thanks for sharing this. – quantum231 Mar 9 at 14:40

I've seen this in practice on an HPLC UV Detector to increase dynamic range. One of the DACs is offet by the amount needed. Say the 1st DAC handles from 0 to 10 V and the 2nd handles 10 to 20 Volts.

share|improve this answer
1  
Would this not add only one bit? – Szidor Mar 9 at 14:28
    
Yes this adds only one bit. However, in audio terms, it can be a very successful compromise. A "straight" DAC has a huge problem at half scale where all 16 bits switch at once - the MSB switches on, all the others switch off, and that is where the largest single DNL error will be. On an audio signal this largest error is also at the worst possible place - the zero crossing - corrupting even the quietest sounds. Now if one DAC handles positive signals and the other handles negative signals, you can avoid this problem entirely. The legendary Burr-Brown PCM-63 DAC exploited this nicely. – Brian Drummond Mar 13 at 22:41

I have a different take on it... Just use one 8 bit DAC. You mentioned it only needs to work up to a few 10s of Hz, so you could use just one DAC (which can probably work up to 100kHz), and use it as a modulator. The basic idea is to output 256 cycles of the MSB value plus the one bit overflow/carry flag from an 8 bit accumulator to which the LSB is added each cycle. You get just 254 as the maximum MSB because of the extra 'modulating bit' from the LSB but this doesn't reduce the range much.

Example: If you run the cycle at 30kHz, the 256 cycles repeat at 117Hz, so you could put a 50Hz low-pass filter on the output for a quite smooth and accurate signal that can work up to the rate you require.

The accuracy of this method does depend quite a lot on the size of the bit steps, but no more than any other method. I have used it for reference voltage generation in the past, and it works surprisingly well.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.