View previous topic :: View next topic |
Author |
Message |
PICHelpNeeded Guest
|
Analog to Digital - values read are not stable |
Posted: Mon Jul 30, 2007 10:33 am |
|
|
I'm using a PIC16F877A uC with a pressure sensor to detect changes in water level. The pressure sensor outputs values from 0 - 5V at a 0-4kPa pressure max. However I read the values and they are not stable. The pressure values I get vary by 0.1V when the pressure is not suppose to be changing. When I measure with a volt meter the voltage remains constant. Something with the PIC is causing the pressure to vary. I was wondering if anyone else had such problems with analog to digital conversion. Is it the PIC or is there something with the code that is causing this problem for me.
Furthermore if anyone knows of a very easy way to average out 10 readings so that any values that are outside the norm would not be read. What I mean is if I have values 1.11, 1.14, 1.10, 1.09, 1.40, 1.14, I would want to remove the 1.40 and then take the average of the remaining values. I am trying to minimize code complexity.
I don't have much experience with analog to digital and was hoping someone out here who does have a lot of experience could let me know what to do with these oscillations in analog values. Thank you. |
|
|
RLScott
Joined: 10 Jul 2007 Posts: 465
|
Re: Analog to Digital - values read are not stable |
Posted: Mon Jul 30, 2007 11:40 am |
|
|
PICHelpNeeded wrote: | ...if anyone knows of a very easy way to average out 10 readings so that any values that are outside the norm would not be read. What I mean is if I have values 1.11, 1.14, 1.10, 1.09, 1.40, 1.14, I would want to remove the 1.40 and then take the average of the remaining values. I am trying to minimize code complexity.... |
I don't think there is anything simpler than maintaining a sorted list of values. As each new value is read, the new value gets inserted in the list so as to keep the list sorted. That requires an array of 10 items. Then after all 10 items have been read in, throw away the first and the last elements. Sorry, it's not very efficient, but that's what you would need to do.
Robert Scott
Real-Time Specialties
Ypsilanti, Michigan |
|
|
Ttelmah Guest
|
|
Posted: Mon Jul 30, 2007 12:21 pm |
|
|
Seriously, before applying damping, find out why the values are changing so much. I'd look in particular at the stability of your Vref. Using a similar pressure sensor, with a properly stabilised Vref, and a properly selected ADC clock (be very careful on the timing of this - the internal RC clock in particular is not suitable for stable readings, unless you put the processor to sleep for the reading), I see variations of only +/- a single count...
Best Wishes |
|
|
SherpaDoug
Joined: 07 Sep 2003 Posts: 1640 Location: Cape Cod Mass USA
|
|
Posted: Mon Jul 30, 2007 1:43 pm |
|
|
There is a much easier way than a sorted list. You don't even have to store all the numbers. Just keep track of the maximum, the minimum, and the sum. When you are done reading just subtract the maximum and minimum from the sum then shift 3 bits to divide by 8 for the average. _________________ The search for better is endless. Instead simply find very good and get the job done. |
|
|
PICHelpNeeded Guest
|
|
Posted: Mon Jul 30, 2007 10:43 pm |
|
|
Thanks for your help and ideas. They were very helpful. But as was mentioned the VREF has to be stable. I don't know if I did this right. I simply used the 5V supply as VREF. Is there a better way of doing this? Perhaps I did not setup my analog circuit appropriately.
The pressure sensor has three pins. Approx. 5V power (4.75min - 5.25max allowed). The third pin I connect to AN0 and that is it. The PIC uses an external 20mhz clock and is powered by the same supply as the pressure sensor.
In my code I read the analog values at 100ms. Below is the setup code I used.
setup_adc_ports(RA0_analog);
setup_adc(ADC_CLOCK_DIV_64);
set_adc_channel(0);
If there is a better way to do it, please let me know, thank you. |
|
|
LEVENT
Joined: 04 May 2006 Posts: 16
|
|
Posted: Tue Jul 31, 2007 2:42 am |
|
|
I want to say a basic way to solve this problem.
You can connect small capacitance to your ADC pin like 100pf.This capacitance can remove ripples caused from some reasons. |
|
|
SherpaDoug
Joined: 07 Sep 2003 Posts: 1640 Location: Cape Cod Mass USA
|
|
Posted: Tue Jul 31, 2007 7:55 am |
|
|
I would want to know if the sensor is "ratiometric" or not. If it is not ratiometric it might put out 2.5V at half pressure. If it is ratiometric it might put out 50% of the supply voltage at half pressure. For low noise that is an important difference.
Also are there heavy loads like relays or motors that might make the +5V supply wobble? If so can you use a separate 5V regulator for just the sensor and the PIC reference? _________________ The search for better is endless. Instead simply find very good and get the job done. |
|
|
|