Start off by using the formula:

y = mx-b

where

y = output Volts

m = slope

x = input units

b = offset

Let's use a pressure sensor that has a range of 0 psi to 100 psi, with 1 volt output equaling 0 psi and 5 volts equaling 100 psi.

m = slope

There is a 4 volt span. psi/volt 100/4 = 25

m = 25

x = input units

This is the output from the sensor, in this case it will be between 1 and 5.

b = offset

Since the output starts at 1 volt, there is an offset. We calculated a value of 25 psi/volt.

b = 25

Plug all this into the formula and lets say the input is 5.0 volts.(full scale)

y = (25 * 5) - 25

y = 100 psi

Convert this to an 8 bit PIC® resolution.

8bits ADC = 0 to 255, 256 steps.

At 5.0 volts one volt of input will will read 51.

New value for "m"

Spanning 4 volts or 204 steps (4 * 51).

100 / 204 = 0.49

m = 0.49

New value for "b"

The new offset starting at 51, (1 * 51).

51* 0.49 = 24.99

b = 24.99

ADC is from the sensor.

ADC = 255 Full scale

y = (ADC * 0.49) - 24.99

y = 99.96 psi

#############

Convert this to an 10 bit PIC® resolution.

10 bits ADC = 0 to 1023, 1024 steps.

At 5.0 volts one volt of input will will read 204. (204.8 actually)

But we will use 205 for accuracy.

204 * 5 = 1020

205 * 5 = 1025

New value for "m"

Spanning 4 volts or 820 steps (4 * 205).

100 / 820 = 0.1219

m = 0.1219

New value for "b"

The new offset starting at 205, (1 * 205).

205 * 0.1219 = 24.9

b = 24.9

ADC is from the sensor.

ADC = 1023 Full scale

y = (ADC * 0.1219) - 24.9

y = 99.8 psi

Now for some code. You will see some rounding for integer math.

8 bit

' m = 0.49 ' b = 24.99 ' y = (ADC * 0.49) - 24.99 ' ADC = 255 ' y = 99.96 M CON 49 'm = 0.49 * 100 B CON 24 'b = 24.99 ADC VAR WORD 'INPUT FROM SENSOR Y VAR WORD 'PSI Z VAR WORD 'DUMMY VAR Z1 VAR WORD 'DUMMY VAR START: ADC = 255 'FULL SCALE HARD CODED, NO SENSOR Z = ADC * M Z1 = DIV32 100 Y = Z1 - B LCDOUT $FE,1,"PSI= ",DEC Y PAUSE 250 GOTO START

' m = 0.1219 ' b = 24.9 ' y = (ADC * 0.1219) - 24.9 ' ADC = 1023 ' y = 99.8 M CON 1219 'm = 0.1219 * 10,000 B CON 249 'b = 24.9 * 10 ADC VAR WORD 'INPUT FROM SENSOR Y VAR WORD 'PSI Z VAR WORD 'DUMMY VAR Z1 VAR WORD 'DUMMY VAR START: ADC = 1023 'FULL SCALE HARD CODED, NO SENSOR Z = ADC * M Z1 = DIV32 1000 Y = Z1 - B LCDOUT $FE,1,"PSI= ",DEC Y/10,".",DEC2 Y//100 PAUSE 250 GOTO START

## Re: Stable Adc Reading Routine

That code gets 16 samples not 10. You just have to limit the samples from 16 to 5. But this is not very useful. Leave it as it is for ironing out the noise or parasites in the signal.

Ioannis Yesterday, 21:50Ioannis