Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Check_VL6180XA1_ToF
Fork of X_NUCLEO_6180XA1 by
Diff: Components/VL6180X/vl6180x_class.cpp
- Revision:
- 28:7c9031e96c22
- Parent:
- 26:db0cdc5ecc0a
- Child:
- 29:6d6b67e2e212
--- a/Components/VL6180X/vl6180x_class.cpp Wed Nov 04 17:17:35 2015 +0100
+++ b/Components/VL6180X/vl6180x_class.cpp Thu Nov 05 17:20:03 2015 +0100
@@ -528,7 +528,7 @@
if( status ) break;
status = VL6180x_AlsSetAnalogueGain(dev, 0);
if( status ) break;
- status = VL6180x_AlsSetThresholds(dev, 0, 1800);
+ status = VL6180x_AlsSetThresholds(dev, 0, 0xFFFF);
if( status ) break;
/* set Als InterruptMode to new sample */
status=VL6180x_AlsConfigInterrupt(dev, CONFIG_GPIO_INTERRUPT_DISABLED);
@@ -725,33 +725,16 @@
-int VL6180X::VL6180x_AlsSetThresholds(VL6180xDev_t dev, lux_t low, lux_t high) {
+int VL6180X::VL6180x_AlsSetThresholds(VL6180xDev_t dev, uint16_t low, uint16_t high) {
int status;
- uint32_t AlsAnGain, IntPeriod, AlsScaler, GainFix, RawAlsHigh, RawAlsLow;
- uint16_t RawThreshLow, RawThreshHigh;
- const uint32_t LuxResxIntIme =(uint32_t)(0.56f* DEF_INT_PEFRIOD *(1<<LUXRES_FIX_PREC));
- void *ptr;
-
+
LOG_FUNCTION_START("%d %d", (int )low, (int)high);
- AlsAnGain=VL6180xDevDataGet(dev, AlsGainCode);
- IntPeriod=VL6180xDevDataGet(dev, IntegrationPeriod);
- AlsScaler=VL6180xDevDataGet(dev, AlsScaler);
- GainFix=AlsGainLookUp[AlsAnGain];
- IntPeriod++;
- RawAlsLow=low*AlsScaler*GainFix;
- RawAlsLow=RawAlsLow*IntPeriod;
- RawAlsLow=RawAlsLow/LuxResxIntIme;
- RawAlsHigh=high*(AlsScaler*GainFix);
- RawAlsHigh=RawAlsHigh*IntPeriod;
- RawAlsHigh=RawAlsHigh/LuxResxIntIme;
- ptr=&RawAlsLow;
- RawThreshLow=*(uint16_t*)ptr;
- status = VL6180x_WrWord(dev, SYSALS_THRESH_LOW, RawThreshLow);
+
+ status = VL6180x_WrWord(dev, SYSALS_THRESH_LOW, low);
if(!status ){
- ptr=&RawAlsHigh;
- RawThreshHigh=*(uint16_t*)ptr;
- status = VL6180x_WrWord(dev, SYSALS_THRESH_HIGH, RawThreshHigh);
+ status = VL6180x_WrWord(dev, SYSALS_THRESH_HIGH, high);
}
+
LOG_FUNCTION_END(status) ;
return status;
}
@@ -1179,17 +1162,17 @@
VL6180x_WrByte( dev, 0x0030, 0x00);
/* Recommended : Public registers - See data sheet for more detail */
- VL6180x_WrByte( dev, 0x0011, 0x10); /* Enables polling for New Sample ready when measurement completes */
- VL6180x_WrByte( dev, 0x010a, 0x30); /* Set the averaging sample period (compromise between lower noise and increased execution time) */
- VL6180x_WrByte( dev, 0x003f, 0x46); /* Sets the light and dark gain (upper nibble). Dark gain should not be changed.*/
- VL6180x_WrByte( dev, 0x0031, 0xFF); /* sets the # of range measurements after which auto calibration of system is performed */
- VL6180x_WrByte( dev, 0x0040, 0x63); /* Set ALS integration time to 100ms */
- VL6180x_WrByte( dev, 0x002e, 0x01); /* perform a single temperature calibration of the ranging sensor */
+ VL6180x_WrByte( dev, SYSTEM_MODE_GPIO1, 0x10); /* Enables polling for New Sample ready when measurement completes */
+ VL6180x_WrByte( dev, READOUT_AVERAGING_SAMPLE_PERIOD, 0x30); /* Set the averaging sample period (compromise between lower noise and increased execution time) */
+ VL6180x_WrByte( dev, SYSALS_ANALOGUE_GAIN, 0x46); /* Sets the light and dark gain (upper nibble). Dark gain should not be changed.*/
+ VL6180x_WrByte( dev, SYSRANGE_VHV_REPEAT_RATE, 0xFF); /* sets the # of range measurements after which auto calibration of system is performed */
+ VL6180x_WrByte( dev, SYSALS_INTEGRATION_PERIOD, 0x63); /* Set ALS integration time to 100ms */
+ VL6180x_WrByte( dev, SYSRANGE_VHV_RECALIBRATE, 0x01); /* perform a single temperature calibration of the ranging sensor */
/* Optional: Public registers - See data sheet for more detail */
- VL6180x_WrByte( dev, 0x001b, 0x09); /* Set default ranging inter-measurement period to 100ms */
- VL6180x_WrByte( dev, 0x003e, 0x31); /* Set default ALS inter-measurement period to 500ms */
- VL6180x_WrByte( dev, 0x0014, 0x24); /* Configures interrupt on New sample ready */
+ VL6180x_WrByte( dev, SYSRANGE_INTERMEASUREMENT_PERIOD, 0x09); /* Set default ranging inter-measurement period to 100ms */
+ VL6180x_WrByte( dev, SYSALS_INTERMEASUREMENT_PERIOD, 0x31); /* Set default ALS inter-measurement period to 500ms */
+ VL6180x_WrByte( dev, SYSTEM_INTERRUPT_CONFIG_GPIO, 0x24); /* Configures interrupt on New sample ready */
status=VL6180x_RangeSetMaxConvergenceTime(dev, 50); /* Calculate ece value on initialization (use max conv) */
@@ -1242,16 +1225,16 @@
VL6180x_WrByte( dev, 0x01ac, 0x3e);
VL6180x_WrByte( dev, 0x01a7, 0x1f);
VL6180x_WrByte( dev, 0x0030, 0x00);
- VL6180x_WrByte( dev, 0x0011, 0x10);
- VL6180x_WrByte( dev, 0x010a, 0x30);
- VL6180x_WrByte( dev, 0x003f, 0x46);
- VL6180x_WrByte( dev, 0x0031, 0xFF);
- VL6180x_WrByte( dev, 0x0040, 0x63);
- VL6180x_WrByte( dev, 0x002e, 0x01);
- VL6180x_WrByte( dev, 0x002c, 0xff);
- VL6180x_WrByte( dev, 0x001b, 0x09);
- VL6180x_WrByte( dev, 0x003e, 0x31);
- VL6180x_WrByte( dev, 0x0014, 0x24);
+ VL6180x_WrByte( dev, SYSTEM_MODE_GPIO1, 0x10);
+ VL6180x_WrByte( dev, READOUT_AVERAGING_SAMPLE_PERIOD, 0x30);
+ VL6180x_WrByte( dev, SYSALS_ANALOGUE_GAIN, 0x46);
+ VL6180x_WrByte( dev, SYSRANGE_VHV_REPEAT_RATE, 0xFF);
+ VL6180x_WrByte( dev, SYSALS_INTEGRATION_PERIOD, 0x63);
+ VL6180x_WrByte( dev, SYSRANGE_VHV_RECALIBRATE, 0x01);
+ VL6180x_WrByte( dev, SYSRANGE_MAX_AMBIENT_LEVEL_MULT, 0xff);
+ VL6180x_WrByte( dev, SYSRANGE_INTERMEASUREMENT_PERIOD, 0x09);
+ VL6180x_WrByte( dev, SYSALS_INTERMEASUREMENT_PERIOD, 0x31);
+ VL6180x_WrByte( dev, SYSTEM_INTERRUPT_CONFIG_GPIO, 0x24);
#if VL6180x_EXTENDED_RANGE
VL6180x_RangeSetMaxConvergenceTime(dev, 63);
#else
@@ -2680,8 +2663,39 @@
}
return 0;
}
-
-
+
+/******************************************************************************/
+
+int VL6180X::AlsSetThresholds(uint16_t lux_threshold_low, uint16_t lux_threshold_high)
+{
+ uint32_t AlsAnGain, IntPeriod, AlsScaler, GainFix, RawAlsHigh, RawAlsLow;
+ uint16_t RawThreshLow, RawThreshHigh;
+ const uint32_t LuxResxIntIme =(uint32_t)(0.56f* DEF_INT_PEFRIOD *(1<<LUXRES_FIX_PREC));
+ void *p_low;
+ void *p_high;
+
+ AlsAnGain=VL6180xDevDataGet(Device, AlsGainCode);
+ IntPeriod=VL6180xDevDataGet(Device, IntegrationPeriod);
+ AlsScaler=VL6180xDevDataGet(Device, AlsScaler);
+ GainFix=AlsGainLookUp[AlsAnGain];
+ IntPeriod++;
+ RawAlsLow=lux_threshold_low*AlsScaler*GainFix;
+ RawAlsLow=RawAlsLow*IntPeriod;
+ RawAlsLow=RawAlsLow/LuxResxIntIme;
+ RawAlsHigh=lux_threshold_high*(AlsScaler*GainFix);
+ RawAlsHigh=RawAlsHigh*IntPeriod;
+ RawAlsHigh=RawAlsHigh/LuxResxIntIme;
+ p_low=&RawAlsLow;
+ RawThreshLow=*(uint16_t*)p_low;
+ p_high=&RawAlsHigh;
+ RawThreshHigh=*(uint16_t*)p_high;
+ //return VL6180x_AlsSetThresholds(Device, RawThreshLow, RawThreshHigh);
+ VL6180x_AlsSetThresholds(Device, RawThreshLow, RawThreshHigh);
+ VL6180x_RdWord(Device, SYSALS_THRESH_HIGH, &RawThreshLow);
+ VL6180x_RdWord(Device, SYSALS_THRESH_LOW, &RawThreshHigh);
+}
+
+
int VL6180X::ReadID()
{
int status;
