From A/D Converters to DVMs

        Every DVM starts with an A/D.  However, consider this situation.

        Clearly there is a problem here.  However, by putting a scaling circuit before the A/D you can rectify the problem.  That way you can adjust the voltage applied to the A/D so that it always runs from 0-10v.  Then, you would have to remember that the measured voltage is calculated differently, depending upon how you scaled.  Here is a block diagram that shows that.

It isn't a difficult problem to scale a signal that ranges from 0-3v to one that ranges from 0-10v.  You need to multiply the input voltage by a factor of 3.3333333.  That would take a fairly simple operational amplifier circuit.

        Now, consider a somewhat more complex questions (and answers).

It should be apparent that you can build a scaling circuit so that you can always adjust the voltage applied to the A/D so that it "fits" the input range for the A/D.

        Next, you have to consider some other details of the DVM.  For purposes of discussion, we will assume that you have a 10 bit A/D, and that you using that for a 0-30v DC meter.  Since a 10 bit A/D has 1024 possibilities it is tempting to think that the interval between measured voltages will be 30/1024.  That works out to be .0293 volts/division.  (Actually, it is .029296875 volts/division.)  That's pretty close to .03 volts/division, and most meter manufacturers will make it work out that way.  Now, if we set things up for .03 volts/division, a count of 1024 will be take to represetn 30.72 volts, and we don't really have a 0-30v meter, and you would need to take that into account in the design of the scaling circuit.  However, the advantage of doing it that way is that using that meter with a computer connection will give exact values for the voltage when that information is transmitted to the computer.  The problem starts when trying to represent voltages to a number of decimal places that is larger than can be accomodated in a float.  If you use .03volts/division the voltages you comute for each count will fit into a floating point variable (4 bytes), whereas trying to accomodate the data for .029296875 volts/division will take a double, and slow down the arithmetic computations.