> From: John Payson <spam_OUTsupercatTakeThisOuTmcs.net>
>
> > I'm also in the process of designing a PIC-based altimeter, requiring 12 bit
> > or greater resolution at 1 sample/sec. It seems to me that this would be an
> > ideal application for the 14000.
>
> In one ap I'm doing where I need 12 bits A to D, I take a port pin output,
> run it through an RC filter, and then run that into a comparator along with
> the input signal. In my timer tick, I set that output port to match the
> input port and increment a count if it was "high"; every 4096 loops I store
> the count, zero it, and start again. Seems to work pretty well, though I
> don't get readings all that fast.
>
John: please elaborate since I don't understand how this works. Am I
correct in understanding that you are basically feeding back a sampled
comparator output back into the comparator's input via an RC and then
working out the duty cycle? Won't this always settle to 50% no matter
what the input level?
> > In one ap I'm doing where I need 12 bits A to D, I take a port pin output,
> > run it through an RC filter, and then run that into a comparator along with
> > the input signal. In my timer tick, I set that output port to match the
> > input port and increment a count if it was "high"; every 4096 loops I store
> > the count, zero it, and start again. Seems to work pretty well, though I
> > don't get readings all that fast.
>
> John: please elaborate since I don't understand how this works. Am I
> correct in understanding that you are basically feeding back a sampled
> comparator output back into the comparator's input via an RC and then
> working out the duty cycle? Won't this always settle to 50% no matter
> what the input level?
Suppose the system has been running awhile and both the input and output
are at 25% VDD. If the PIC outputs a low, then the cap will discharge
moderately slowly (since it's only at 25% charge to begin with) whereas if
the PIC outputs a high, it will charge three times as fast (since it would
have 75% of VDD to charge with). Thus, if the PIC outputs a low three
times as often as it oututs a high, the cap will charge and discharge in
balanced amounts.
From my limitted experience with this technique, it seems to work pretty
well. There's a little bit of jitter on the readings (about 3 counts out
of 4096) but not much; I expect the technique will be reasonably noise-
immune since repeated glitched readings which go in the same direction will
cause any non-glitched readings to go in the other direction thereby cancel-
ing out the glitches. The only difficulty I've seen with this technique
is that it's not terribly fast.
At 05:08 15/11/96 -0600, John Payson wrote:
>> > In one ap I'm doing where I need 12 bits A to D, I take a port pin output,
>> > run it through an RC filter, and then run that into a comparator along with
>> > the input signal. In my timer tick, I set that output port to match the
>> > input port and increment a count if it was "high"; every 4096 loops I store
>> > the count, zero it, and start again. Seems to work pretty well, though I
>> > don't get readings all that fast.
>
>From my limitted experience with this technique, it seems to work pretty
>well. There's a little bit of jitter on the readings (about 3 counts out
>of 4096) but not much; I expect the technique will be reasonably noise-
>immune since repeated glitched readings which go in the same direction will
>cause any non-glitched readings to go in the other direction thereby cancel-
>ing out the glitches. The only difficulty I've seen with this technique
>is that it's not terribly fast.
There is another variety of this method: you use a PWM output with a filter
as a DAC, and feed it back with the input into a comparator. Now you use a
control loop for the DAC so that the comparator output toggles on and off
all the time. This way you might get more control over the speed the DAC
follows the input. The DAC value is the estimate for the input.
> At 05:08 15/11/96 -0600, John Payson wrote:
> >> > In one ap I'm doing where I need 12 bits A to D, I take a port pin
output,
> >> > run it through an RC filter, and then run that into a comparator along
with
> >> > the input signal. In my timer tick, I set that output port to match the
> >> > input port and increment a count if it was "high"; every 4096 loops I
store {Quote hidden}
> >> > the count, zero it, and start again. Seems to work pretty well, though I
> >> > don't get readings all that fast.
> >
> >From my limitted experience with this technique, it seems to work pretty
> >well. There's a little bit of jitter on the readings (about 3 counts out
> >of 4096) but not much; I expect the technique will be reasonably noise-
> >immune since repeated glitched readings which go in the same direction will
> >cause any non-glitched readings to go in the other direction thereby cancel-
> >ing out the glitches. The only difficulty I've seen with this technique
> >is that it's not terribly fast.
>
> There is another variety of this method: you use a PWM output with a filter
> as a DAC, and feed it back with the input into a comparator. Now you use a
> control loop for the DAC so that the comparator output toggles on and off
> all the time. This way you might get more control over the speed the DAC
> follows the input. The DAC value is the estimate for the input.
>
You could also perform a delta-sigma style converter with a diff
amp-integrator-comparator conbination. You would have to perform an
internal FIR for noise shaping. Considering that the output from the
comparitor is a 1 or -1, the FIR would be multiplierless. See the Crystal
Semicoductor audio data book for a more thorough explanation. You could
probably get 12-14 bits out of it if you designed is properly.
>
> You could also perform a delta-sigma style converter with a diff
> amp-integrator-comparator conbination. You would have to perform an
> internal FIR for noise shaping. Considering that the output from the
> comparitor is a 1 or -1, the FIR would be multiplierless. You could
> probably get 12-14 bits out of it if you designed is properly.
I have used delta sigma sytle A/D's with nothing more than two
resistors and a small Cap using one input as a summing juction
and an output as a feedback source.
For slow moving signals (like the altimeter) 12 - 14 bits are
quite possible. It the added advangae that the result can be
calibrated directly in desired units by adjusting the sample size.
It is a low cost (low speed) A/D conversion technique that works
well in many consummer applications.
Walter Banks wrote:
>
> I have used delta sigma sytle A/D's with nothing more than two
> resistors and a small Cap using one input as a summing juction
> and an output as a feedback source.
Could you give us with some code and schematics?
Thanks,
Octavio
--
========================================================
Octavio Nogueira
e-mail: nogueiraKILLspammandic.com.br
homepage: http://ourworld.compuserve.com/homepages/tato
voice/fax: +55 11 240-6474
"ProPic" The first Production PIC Programmer running in
Windows and under US$ 20.00.
========================================================