I am trying to implement the self-test function of the LIS3DSH, but the results I am getting do not agree with the numbers in the device datasheet. Here is my procedure:
1) Set -/+2g range and 400 HZ ODR.
2) Capture 20 samples in normal mode (ie ST2:1 = 00 in CTRL_REG5)
3) Capture 20 samples with positive sign self test enabled (ie ST2:1=01)
4) Compute the average difference between the 2 sets of samples
According to the datasheet the difference should be 140 mg for the X and Y axes and 590 mg for the Z-axes. However, I have run the self-test on 10 different boards with an LIS3DSH and for X and Y I get values between 175 and 220, while for the Z axis values between 500 and 620.
The results look pretty consistent when the test is repeated on the same device, but there is quite a big variability from one device to the other. The datasheet does not specify any error margins for deciding whether the test has 'passed' or 'failed'. That makes it difficult from the results that I am getting to decide if a device is not working properly.
I wonder if the output I am getting is expected or there is something wrong with the way I carry out the test.