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: Reusing PGC & PGD pins
Pics or it didn't happen.
Demon Today, 04:18:wink: