Question about VL53L0X: "RangingMeasurementData.RangeMilliMeter" is always 0x1FFF = 8191
Hello
I have a question about distance measuring with VL53L0:
Execution of initialization functions seem to work (all returning VL53L0X_ERROR_NONE):
if ( VL53L0X_DataInit( Dev ) != VL53L0X_ERROR_NONE ) return false;
if ( VL53L0X_StaticInit( Dev ) != VL53L0X_ERROR_NONE ) return false;
uint32_t refSpadCount;
uint8_t isApertureSpads;
if ( VL53L0X_PerformRefSpadManagement( Dev, &refSpadCount, &isApertureSpads ) != VL53L0X_ERROR_NONE ) return false;
uint8_t VhvSettings;
uint8_t PhaseCal;
if ( VL53L0X_PerformRefCalibration( Dev, &VhvSettings, &PhaseCal ) != VL53L0X_ERROR_NONE ) return false;
If ( VL53L0X_SetDeviceMode( Dev, VL53L0X_DEVICEMODE_SINGLE_RANGING ) != VL53L0X_ERROR_NONE ) return false;
if ( VL53L0X_SetLimitCheckEnable( Dev, VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE, 1 ) != VL53L0X_ERROR_NONE ) return false;
if ( VL53L0X_SetLimitCheckEnable( Dev, VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE, 1 ) != VL53L0X_ERROR_NONE ) return false;
FixPoint1616_t signalLimit;
FixPoint1616_t sigmaLimit;
uint32_t timingBudget;
uint8_t preRangeVcselPeriod;
uint8_t finalRangeVcselPeriod;
// LONG RANGE
signalLimit = ( FixPoint1616_t ) (65536 / 10 );
sigmaLimit = ( FixPoint1616_t ) (65536 * 60 );
timingBudget = 33000;
preRangeVcselPeriod = 18;
finalRangeVcselPeriod = 14;
if ( VL53L0X_SetLimitCheckValue( Dev, VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE, signalLimit ) != VL53L0X_ERROR_NONE ) return false;
if ( VL53L0X_SetLimitCheckValue( Dev, VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE, sigmaLimit ) != VL53L0X_ERROR_NONE ) return false;
if ( VL53L0X_SetMeasurementTimingBudgetMicroSeconds( Dev, timingBudget ) != VL53L0X_ERROR_NONE ) return false;
if ( VL53L0X_SetVcselPulsePeriod( Dev, VL53L0X_VCSEL_PERIOD_PRE_RANGE, preRangeVcselPeriod ) != VL53L0X_ERROR_NONE ) return false;
if ( VL53L0X_SetVcselPulsePeriod( Dev, VL53L0X_VCSEL_PERIOD_FINAL_RANGE, finalRangeVcselPeriod ) != VL53L0X_ERROR_NONE ) return false;
when I do
VL53L0X_RangingMeasurementData_t RangingMeasurementData;
if ( VL53L0X_GetRangingMeasurementData( Dev, &RangingMeasurementData ) != VL53L0X_ERROR_NONE ) return false;
the VL53L0X_GetRangingMeasurementData returns with VL53L0X_ERROR_NONE, the struct member "RangingMeasurementData.RangeStatus" is VL53L0X_ERROR_NONE,
but "RangingMeasurementData.RangeMilliMeter" is always 0x1FFF = 8191 (even with different distances to measure from 10 to 60 cm).
I found some old discussions ( e.g.: https://community.st.com/t5/imaging-sensors/vl53l0x-returns-0x1ffff-8191/m-p/282864 or https://community.st.com/t5/imaging-sensors/why-vl53l0x-returns-8191-all-the-time/td-p/274365 but they do not work as solution.
So did I miss something?
Best Regards
Paul
