View previous topic :: View next topic |
Author |
Message |
sterob
Joined: 24 Jun 2011 Posts: 9
|
adc help (-5V to +5V) |
Posted: Tue Jul 24, 2012 10:01 pm |
|
|
Hi everyone,
I am stuck at the moment, please how do I sample voltage range of -5V_to_+5V. Currently I could sample only positive voltage range and output it through an lcd. But whenever the voltage goes below +5v, its only zero that would be displayed. How can this be solved?
Here's an excerpt of the code:
Code: |
set_adc_channel(0); // Select channel 0
sample = read_adc(); // Get input
scaled = sample*0.0048828125f; // Scale input using a 10bit //resolution(PIC18f2550)
printf(lcd_putc,"\f%3.2f",scaled);
|
|
|
![](templates/subSilver/images/spacer.gif) |
newguy
Joined: 24 Jun 2004 Posts: 1903
|
|
Posted: Tue Jul 24, 2012 10:41 pm |
|
|
You can't - the A/D can only accept and process positive voltages. |
|
![](templates/subSilver/images/spacer.gif) |
bkamen
Joined: 07 Jan 2004 Posts: 1611 Location: Central Illinois, USA
|
|
Posted: Tue Jul 24, 2012 11:07 pm |
|
|
Another way to solve it is to put an op-amp in the signal path that offsets your voltage (and divides it depending on your ADC's vref).
Another solution is to use a Bipolar ADC (examples might be the LTC1859) that have +/- 10VDC support with 16bit results. (but operate via SPI)
-Ben _________________ Dazed and confused? I don't think so. Just "plain lost" will do. :D |
|
![](templates/subSilver/images/spacer.gif) |
Gabriel
Joined: 03 Aug 2009 Posts: 1067 Location: Panama
|
|
Posted: Wed Jul 25, 2012 6:56 am |
|
|
I'd go with the Op-Amp option as you probably already have some at home.
you could use voltage deviders to scale the signal to measure and then use an Op-Amp to ground reference your signal.
I would also add Zeners or some kind of protection to the PIC ADC ...
G. _________________ CCS PCM 5.078 & CCS PCH 5.093 |
|
![](templates/subSilver/images/spacer.gif) |
Mike Walne
Joined: 19 Feb 2004 Posts: 1785 Location: Boston Spa UK
|
|
Posted: Wed Jul 25, 2012 7:58 am |
|
|
The circuit below will let you convert +/-5V to valid ADC values.
Code: |
4k7 |
+5V ----WWWWW--------| PIC analogue input
| |
Unknown |
Input ----WWWWW---
Voltage 4k7
|
Mike
Last edited by Mike Walne on Wed Jul 25, 2012 8:00 am; edited 1 time in total |
|
![](templates/subSilver/images/spacer.gif) |
bkamen
Joined: 07 Jan 2004 Posts: 1611 Location: Central Illinois, USA
|
|
Posted: Wed Jul 25, 2012 7:58 am |
|
|
Gabriel wrote: |
I would also add Zeners or some kind of protection to the PIC ADC ...
|
A good idea - but depending on the MCU, possibly unneeded.
The PIC's typically have transient schottky diodes on all I/O pins.
I say typically because it's always good to check.
This means they'll accept Vss - 0.3 to Vcc + 0.3 before shunting any excess to Vss or Vcc.
Typically, this current is pretty appreciable - like 20mA max. (ALWAYS CHECK the datasheet though!!)
So depending on the output driver of the op-amp, a current limit resistor may be all that's needed.
Always check the datasheets of course.
-Ben _________________ Dazed and confused? I don't think so. Just "plain lost" will do. :D |
|
![](templates/subSilver/images/spacer.gif) |
bkamen
Joined: 07 Jan 2004 Posts: 1611 Location: Central Illinois, USA
|
|
Posted: Wed Jul 25, 2012 8:02 am |
|
|
Mike Walne wrote: | The circuit below will let you convert +/-5V to valid ADC values.
Code: |
4k7 |
+5V ----WWWWW--------| PIC analogue input
| |
Unknown |
Input ----WWWWW---
Voltage 4k7
|
|
The problem with those high values is that that it might exceed the sample/hold times needed by the A/D to provide accurate readings.
Depends on the signal being sampled.
Depends on the PIC.
-Ben _________________ Dazed and confused? I don't think so. Just "plain lost" will do. :D |
|
![](templates/subSilver/images/spacer.gif) |
Gabriel
Joined: 03 Aug 2009 Posts: 1067 Location: Panama
|
|
Posted: Wed Jul 25, 2012 9:57 am |
|
|
Its even simpler then...
Use the voltage devider proposed by Mike and buffer for impedance matching with an Op-Amp.
regarding the internal protection diodes, id rather use external ones, especially when there is a "wierd" signal attached to the PIC.
those diodes I only trust for spurious transients and minor noise problems...
what if the sensor generating the -5/5V signal fails and/or the buffer amp or ground referencing amp fails and locks to an out of range voltage? for sustained periods? maybe your calculations for the devider are good but the _actual_ value of the resistors used varies significantly and places your upper or lower signal limit out of spec?
Go external... play it safe. _________________ CCS PCM 5.078 & CCS PCH 5.093 |
|
![](templates/subSilver/images/spacer.gif) |
bkamen
Joined: 07 Jan 2004 Posts: 1611 Location: Central Illinois, USA
|
|
Posted: Wed Jul 25, 2012 10:01 am |
|
|
Gabriel wrote: | maybe your calculations for the devider are good but the _actual_ value of the resistors used varies significantly and places your upper or lower signal limit out of spec?
Go external... play it safe. |
That's what the series current limit resistor is for on the output of the op-amp.
But yes, the argument could be made for safety in situations that warrant.
if voltages high enough to blow the op-amp (keep in mind, a Rail-to-Rail Op-Amp will limit voltages for you and you can pick one that maxes out at +5V on Vcc) and course through it to the ADC's input -- you probably have a fried board on your hands anyway. :D
-Ben _________________ Dazed and confused? I don't think so. Just "plain lost" will do. :D |
|
![](templates/subSilver/images/spacer.gif) |
Mike Walne
Joined: 19 Feb 2004 Posts: 1785 Location: Boston Spa UK
|
|
Posted: Wed Jul 25, 2012 10:29 am |
|
|
Code: |
4k7 |
+5V ----WWWWW--------| PIC analogue input
| |
Unknown |
Input ----WWWWW---
Voltage 4k7
|
The output impedance (as seen by the PIC) is the parallel equivalent of the two resistors, i.e. 2k35.
Microchip recommend a maximum 2k5 source impedance for their A2D converters.
My circuit meets the Microchip requirement.
Mike |
|
![](templates/subSilver/images/spacer.gif) |
Gabriel
Joined: 03 Aug 2009 Posts: 1067 Location: Panama
|
|
Posted: Wed Jul 25, 2012 10:59 am |
|
|
i agree with you.
I am basing my comments on that fact that we really have no idea what the actual circuit is, and from my previous experience.
in my particular case i had a sensor running at 10V with diff outputs of 7.5V
The signal varied 100mv total, thus i needed eliminate the common voltage, ground ref and then amplify so that 100mv = 5V... my amps where running at 10V... if my Rgain varied a bit (temperature, shock, the whim of the gods) when my sensor was close to its limit values i might be out of spec for the PIC.
External components where a must, especially since i had to amplify substantially.
Im not arguing that he _has_ to include the external protections... im saying that he must consider it to play it safe in his final design...
i tend to design with the idea that the world is going to end soon and that zombies will mess with all my trimpots.... but thats just me.
G _________________ CCS PCM 5.078 & CCS PCH 5.093 |
|
![](templates/subSilver/images/spacer.gif) |
Gabriel
Joined: 03 Aug 2009 Posts: 1067 Location: Panama
|
|
Posted: Wed Jul 25, 2012 11:05 am |
|
|
Quote: | But whenever the voltage goes below +5v, its only zero that would be displayed. How can this be solved? |
so you are saying you already brought your input to less that VSS?
You mention nothing regarding Magic Blue Smoke.
What Sorcery is this! _________________ CCS PCM 5.078 & CCS PCH 5.093 |
|
![](templates/subSilver/images/spacer.gif) |
bkamen
Joined: 07 Jan 2004 Posts: 1611 Location: Central Illinois, USA
|
|
Posted: Wed Jul 25, 2012 1:17 pm |
|
|
Gabriel wrote: | Quote: | But whenever the voltage goes below +5v, its only zero that would be displayed. How can this be solved? |
so you are saying you already brought your input to less that VSS?
You mention nothing regarding Magic Blue Smoke.
What Sorcery is this! |
Hahahah!
If his source couldn't muster more than 20mA, the PIC's internal clamping diodes would have saved him.
Otherwise, I don't know about any smoke -- but if he exceeded that, he may have not seen any smoke - but killed the input. ![Shocked](images/smiles/icon_eek.gif) _________________ Dazed and confused? I don't think so. Just "plain lost" will do. :D
Last edited by bkamen on Sat Aug 04, 2012 9:11 pm; edited 1 time in total |
|
![](templates/subSilver/images/spacer.gif) |
sterob
Joined: 24 Jun 2011 Posts: 9
|
|
Posted: Sat Aug 04, 2012 8:39 pm |
|
|
THANKS GUYS, I used the voltage divider method as suggested, and clipped the output using a zener diode, so that it does not go below the zener diode voltage....merci beaucoup!!! |
|
![](templates/subSilver/images/spacer.gif) |
asmboy
Joined: 20 Nov 2007 Posts: 2128 Location: albany ny
|
|
Posted: Sun Aug 05, 2012 1:45 pm |
|
|
The sample/hold times
You can add a .1uf ceramic cap from the PIC ADC inlet pin to ground.
And so long as you don't sample too often - get accurate values at the adc - due to the charge storage of the capacitor - in fact I do this sort of thing - with a 20k divider - and sample several times per sec with accurate results.
This has the benefit of not loading so badly as the 4.7 k as well.
Try it and see- it really works. |
|
![](templates/subSilver/images/spacer.gif) |
|