English
Language : 

SI7013-A20 Datasheet, PDF (26/45 Pages) Silicon Laboratories – IC HUMIDITY AND TWO-ZONE TEMPERATURE SENSOR
Si7013-A20
5.4. Nonlinear Correction of Voltage Inputs:
The Si7013 contains a look-up table for applying non-linear correction to external voltage measurements. The
look-up table is contained in an internal, user-programmable OTP memory. The OTP memory is non-volatile,
meaning the values are retained even when the device is powered off.
Once the lookup table values have been programmed, this correction is invoked by writing a “1” to bit 5 of user
register 2. Note that humidity measurements should not be performed when this bit is set.
5.4.1. Calculating Lookup Table Values
The non-linear correction is based on 10 points. Each point consists of the ideal output for a given expected A/D
measurement result.
Values between the ideal output points are interpolated based on the slope between the two output points.
The lookup table is stored in the Si7013 memory. Values must be programmed for each pair of input values and
ideal output points. In addition, the slope between each ideal output point must also be programmed (the Si7013
will not automatically calculate the slope). Only 9 of the input/output pairs need to be in the table because the 10th
output value is determined by the slope equation.
The table contains 3 sets of 9 values:
In(1-9): 16-bit signed values for each input point read from the ADC. See Section “5.3. Measuring Analog
Voltage” for more information on setting up the ADC measurement.
Out(1-9): 16-bit unsigned values for each ideal output point that should be used for each input point.
Slope(1-9): 16-bit signed values for the slope between each ideal output point.
Note: The table must be arranged in order of decreasing input values.
The slope values must be calculated as follows:
slopeN =256*(outputN+1 – outputN)/(inputN+1 – inputN)
The actual output value is determined by extrapolation:
If in >in2, out = out1+slope1*(in-in1)/256
Else if in >in3, out = out2+slope2*(in-in2)/256
Else if in >in4, out = out3+slope3*(in-in3)/256
Else if in >in5, out = out4+slope4*(in-in4)/256
Else if in >in6, out = out5+slope5*(in-in5)/256
Else if in >in7, out = out6+slope6*(in-in6)/256
Else if in >in8, out = out7+slope7*(in-in7)/256
Else if in >in9, out = out8+slope8*(in-in8)/256
Else out = out9+slope9*(in-in9)
26
Rev. 1.1