@a878bob to follow up on what
@Bobby said, and I'm assuming he'll correct me if I missed something but it's the same stuff he explained to me years ago and IIRC is what is in his blog post though it has been a while since I read it.
Using easy math here to make it easier to understand
You have your calibration value in air for mV, which we assume is 20% O2, and it spits out 10mV
-MAKE SURE if you are doing this for real, and diving at altitude that you are adjusting to compensate for ambient pressure as that will change the ppO2 of air since cells measure ppO2 not fO2*. The UTD divers especially. I'm not sure how UTD teaches their CCR courses, but I know they don't think altitude matters for the decompression, but it sure as sh!t does for cell calibration
You then check your second calibration point using your O2 bottle to get a second data point, and one that is very close to your actual setpoint. If you are doing single point calibration, then O2 is infinitely better than air.
since 100%/20%=5, then we expect the cell if it performs perfectly linear to read 50mV
During this check you find that the cell is only reading 45mV.
Linearity math is 45/50=.9 so the cell is 90% linear in the range that you are able to check at the surface without pressurizing the system
If you cross check with say 40%, you would expect to see 40%/20%=2, 2*10mV=20mV, 20mV*.9=18mV so if you check against EAN40, it should read 18mV
the 1.6ppO2 check is important for two reasons.
The first is to make sure the cells are not current limited as the 1.0 to 1.6 range is going to be the "normal" operating range of the cells and without the ability to pressurize the head, you can't verify the cells in this range.
The second is to verify the linearity in this range.
So, at the 1.6ppO2 check, we know that 1.6/.2=8, so we can expect 8*10mV*.9=72mV. We do a loop flush with O2,, head down and see that instead of 72mV that we are expecting, the cell is only spitting back 64mV. While the cell behaved 90% linear up to 1.0, it's also exhibiting a 90% linearity from 1.0 to 1.6. for a total "drift" of 80% from .2 to 1.6.
We are also running EAN33.3 for Dil, with a planned depth of 102ffw, and do a dil flush at depth to validate. mV's should be the same as our O2 calibration of 45mV, and this is just a sanity check and validation, and it comes out at 45mV so all is well
So, expected readings
.2- 10mV
1.0-50mV
1.6-80mV
Actual readings
.2-10mV
1.0-45mV
1.6-64mV
As a diver, you have to determine what you are OK with accepting from a risk standpoint if the cells are drifting that much. What happens in the controller is that if you calibrate using air, and it's expecting to see 80mV at that 1.6 check, but it's only seeing 64mV, it does simple linear math. 64/10=6.4, 6.4*.2=1.28 so it will spit back out a ppO2 of 1.28 even though you are breathing 1.6. If you did your calibration using oxygen however, the math would be 65/45=1.42, 1.42*1.0=1.42 so the controller will give out 1.42 even though you are breathing 1.6.
See why the 100% o2 calibration is much better than air?
Also see why it may be a good idea to have your deco schedule run from an offboard computer instead of the onboard if the computer can't factor in that linearity?
Unless you are a math whiz, you may want to go for a relatively easy dive, record the mV's after dil flushes at certain depths as well as O2 flushes at say 10, 15, 20ft, and use those mV readings to create the table to plot linearity for those cells. On subsequent dives, validate that those mV readings are still close, and when they start getting out of your comfort zone, that is when it is time to replace them.
ppO2 readings lie, mV's don't