Kenji Arai / 6180XA1_simple

Dependents:   Check_VL6180XA1_ToF

Fork of X_NUCLEO_6180XA1 by ST

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;