use VL6180XA1 chip wothout X-NUCLEO-6180XA1 Board. Simple way to use the chip.

Dependents:   Check_VL6180XA1_ToF

Fork of X_NUCLEO_6180XA1 by ST

Files at this revision

API Documentation at this revision

Comitter:
gallonm
Date:
Wed Nov 04 09:11:52 2015 +0100
Parent:
25:126b760a3f55
Child:
27:22c6f69967d9
Commit message:
Settled AlsSetThresholds and AlsGetThresholds.
Modified the function parameters.
Implemented the computation from lux to raw device value.

Changed in this revision

Components/VL6180X/vl6180x_class.cpp Show annotated file Show diff for this revision Revisions of this file
Components/VL6180X/vl6180x_class.h Show annotated file Show diff for this revision Revisions of this file
--- a/Components/VL6180X/vl6180x_class.cpp	Mon Nov 02 13:49:54 2015 +0000
+++ b/Components/VL6180X/vl6180x_class.cpp	Wed Nov 04 09:11:52 2015 +0100
@@ -528,7 +528,7 @@
         if( status ) break;
         status = VL6180x_AlsSetAnalogueGain(dev,  0);
         if( status ) break;
-        status = VL6180x_AlsSetThresholds(dev, 0, 0xFFFF);
+        status = VL6180x_AlsSetThresholds(dev, 0, 1800);
         if( status ) break;
         /* set Als InterruptMode to new sample */
         status=VL6180x_AlsConfigInterrupt(dev, CONFIG_GPIO_INTERRUPT_DISABLED);
@@ -725,10 +725,12 @@
  
  
  
-int VL6180X::VL6180x_AlsSetThresholds(VL6180xDev_t dev, uint16_t low, uint16_t high) { 
+int VL6180X::VL6180x_AlsSetThresholds(VL6180xDev_t dev, lux_t low, lux_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);
@@ -738,16 +740,18 @@
     IntPeriod++;
     RawAlsLow=low*AlsScaler*GainFix;
     RawAlsLow=RawAlsLow*IntPeriod;
-    RawAlsLow=RawAlsLow/LuxResxIntIme;
-    
+    RawAlsLow=RawAlsLow/LuxResxIntIme;  
     RawAlsHigh=high*(AlsScaler*GainFix);
     RawAlsHigh=RawAlsHigh*IntPeriod;
     RawAlsHigh=RawAlsHigh/LuxResxIntIme;
-    status = VL6180x_WrByte(dev, SYSALS_THRESH_LOW, (uint16_t)RawAlsLow); 
+    ptr=&RawAlsLow;
+    RawThreshLow=*(uint16_t*)ptr;
+    status = VL6180x_WrWord(dev, SYSALS_THRESH_LOW, RawThreshLow); 
     if(!status ){
-        status = VL6180x_WrByte(dev, SYSALS_THRESH_HIGH, (uint16_t)RawAlsHigh);
+        ptr=&RawAlsHigh;
+        RawThreshHigh=*(uint16_t*)ptr;
+        status = VL6180x_WrWord(dev, SYSALS_THRESH_HIGH, RawThreshHigh);
     }
- 
     LOG_FUNCTION_END(status) ;
     return status;
 }
@@ -2896,7 +2900,7 @@
         else
            return (r_status|l_status);                  
             
-      case(range_continuous_interrrupt_high_threshold):   
+      case(range_continuous_interrupt_high_threshold):   
         status=VL6180x_RangeConfigInterrupt(Device, CONFIG_GPIO_INTERRUPT_LEVEL_HIGH);
         status=VL6180x_AlsConfigInterrupt(Device, CONFIG_GPIO_INTERRUPT_DISABLED);
         if((!r_status)&&(!l_status))
@@ -3229,9 +3233,9 @@
 int VL6180X::AlsSetLowThreshold(uint16_t threshold)
 {
    int status;
-   uint16_t low, high;
+   lux_t low, high;
      
-   status=VL6180x_AlsGetThresholds(Device, &low, &high);
+   status=AlsGetThresholds(Device, &low, &high);
    if(!status)
       status=VL6180x_AlsSetThresholds(Device, threshold, high);
    return status;
@@ -3241,31 +3245,47 @@
 int VL6180X::AlsSetHighThreshold(uint16_t threshold)
 {
    int status;
-   uint16_t low, high;
+   lux_t low, high;
      
-   status=VL6180x_AlsGetThresholds(Device, &low, &high);
+   status=AlsGetThresholds(Device, &low, &high);
    if(!status)
       status=VL6180x_AlsSetThresholds(Device, low, threshold);
    return status;
 }
  
     
-int VL6180X::VL6180x_AlsGetThresholds(VL6180xDev_t dev, uint16_t *low, uint16_t *high)  
+int VL6180X::AlsGetThresholds(VL6180xDev_t dev, lux_t *low, lux_t *high)  
 {
    int status;
+   uint16_t RawAlsLow, RawAlsHigh;
+   uint32_t luxLowValue, luxHighValue, IntPeriod, AlsAnGain, GainFix, AlsScaler;
+   const uint32_t LuxResxIntIme =(uint32_t)(0.56f* DEF_INT_PEFRIOD *(1<<LUXRES_FIX_PREC));
      
-   status=VL6180x_RdWord(dev, SYSALS_THRESH_LOW, low);
+   status=VL6180x_RdWord(dev, SYSALS_THRESH_LOW, &RawAlsLow);
    if(status)
    {
       VL6180x_ErrLog("rd SYSALS_THRESH_LOW fail");
       return status;
    }
-   status=VL6180x_RdWord(dev, SYSALS_THRESH_HIGH, high);
+   status=VL6180x_RdWord(dev, SYSALS_THRESH_HIGH, &RawAlsHigh);
    if(status)
    {
       VL6180x_ErrLog("rd SYSALS_THRESH_HIGH fail");
       return status;
    }
+   AlsAnGain=VL6180xDevDataGet(dev, AlsGainCode);
+   IntPeriod=VL6180xDevDataGet(dev, IntegrationPeriod);
+   AlsScaler=VL6180xDevDataGet(dev, AlsScaler);
+   GainFix=AlsGainLookUp[AlsAnGain];
+   IntPeriod++;
+   luxLowValue=(uint32_t)RawAlsLow*LuxResxIntIme;
+   luxLowValue=luxLowValue/IntPeriod;
+   luxLowValue=luxLowValue/(AlsScaler*GainFix);
+   luxHighValue=(uint32_t)RawAlsHigh*LuxResxIntIme;
+   luxHighValue=luxHighValue/IntPeriod;
+   luxHighValue=luxHighValue/(AlsScaler*GainFix);
+   *low=luxLowValue;
+   *high=luxHighValue;
    return status;
 }
     
@@ -3281,7 +3301,7 @@
       case(range_continuous_polling_high_threshold):
       case(range_continuous_polling_out_of_window):
       case(range_continuous_interrupt_low_threshold):
-      case(range_continuous_interrrupt_high_threshold):
+      case(range_continuous_interrupt_high_threshold):
       case(range_continuous_interrupt_out_of_window):
         return GetRangeMeas(operating_mode, Data);
          
@@ -3351,7 +3371,7 @@
       else
          return NOT_READY;
    }
-   else if((operating_mode==range_continuous_polling_high_threshold)||(operating_mode==range_continuous_interrrupt_high_threshold))
+   else if((operating_mode==range_continuous_polling_high_threshold)||(operating_mode==range_continuous_interrupt_high_threshold))
    {
       if(IntStatus.status.Range==RES_INT_STAT_GPIO_HIGH_LEVEL_THRESHOLD)
          status=VL6180x_RangeGetMeasurement(Device, &RangeData);
@@ -3509,7 +3529,7 @@
       case(range_continuous_polling_high_threshold):
       case(range_continuous_polling_out_of_window):
       case(range_continuous_interrupt_low_threshold):
-      case(range_continuous_interrrupt_high_threshold):
+      case(range_continuous_interrupt_high_threshold):
       case(range_continuous_interrupt_out_of_window):
         return StopRangeMeasurement(operating_mode);
          
@@ -3599,7 +3619,7 @@
       VL6180x_ErrLog("VL6180x_ClearErrorInterrupt fail");
       return status;
    }
-   status=VL6180x_AlsSetThresholds(Device, 0x0, 0xFFFF);
+   status=VL6180x_AlsSetThresholds(Device, 0x0, 1800);
    if(status)
       VL6180x_ErrLog("VL6180x_AlsSetThresholds fail");
    return status;
--- a/Components/VL6180X/vl6180x_class.h	Mon Nov 02 13:49:54 2015 +0000
+++ b/Components/VL6180X/vl6180x_class.h	Wed Nov 04 09:11:52 2015 +0100
@@ -78,7 +78,7 @@
    als_continuous_polling_high_threshold,
    als_continuous_polling_out_of_window,
    range_continuous_interrupt_low_threshold,
-   range_continuous_interrrupt_high_threshold,
+   range_continuous_interrupt_high_threshold,
    range_continuous_interrupt_out_of_window,
    als_continuous_interrupt_low_threshold,
    als_continuous_interrupt_high_threshold,
@@ -277,7 +277,7 @@
        return VL6180x_AlsSetAnalogueGain(Device, gain);
     }
 		
-    int AlsSetThresholds(uint16_t low, uint16_t high)
+    int AlsSetThresholds(lux_t low, lux_t high)
     {
        return VL6180x_AlsSetThresholds(Device, low, high);
     }
@@ -473,7 +473,7 @@
     int VL6180x_AlsSetIntegrationPeriod(VL6180xDev_t dev, uint16_t period_ms);
     int VL6180x_AlsSetInterMeasurementPeriod(VL6180xDev_t dev,  uint16_t intermeasurement_period_ms);
     int VL6180x_AlsSetAnalogueGain(VL6180xDev_t dev, uint8_t gain);
-    int VL6180x_AlsSetThresholds(VL6180xDev_t dev, uint16_t low, uint16_t high);
+    int VL6180x_AlsSetThresholds(VL6180xDev_t dev, lux_t low, lux_t high);
     int VL6180x_AlsGetInterruptStatus(VL6180xDev_t dev, uint8_t *pIntStatus);
     int VL6180x_StaticInit(VL6180xDev_t dev);
     int VL6180x_RangeWaitDeviceReady(VL6180xDev_t dev, int MaxLoop );
@@ -563,7 +563,7 @@
     int AlsMeasIntContinuousMode(void (*fptr)(void));
     int InterleavedMode(void (*fptr)(void));
     int StartInterleavedMode();
-    int VL6180x_AlsGetThresholds(VL6180xDev_t dev, uint16_t *low, uint16_t *high);
+    int AlsGetThresholds(VL6180xDev_t dev, lux_t *low, lux_t *high);
 
 		
     /* IO Device */