(working) Use this code for calibrating the Load cells.

Fork of ADISense1000_Example_FW by Analog Devices

Files at this revision

API Documentation at this revision

Comitter:
RGurav
Date:
Thu Jul 19 13:25:33 2018 +0000
Parent:
1:ae66eccef75f
Commit message:
(Working); Code to read values from bridge load cell

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
sample_lut_data.c Show annotated file Show diff for this revision Revisions of this file
sensor2_bridge-6w-pressure_config.c Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Wed Jul 18 11:40:48 2018 +0000
+++ b/main.cpp	Thu Jul 19 13:25:33 2018 +0000
@@ -43,10 +43,14 @@
 #include "inc/adi_sense_log.h"
 #include "common/utils.h"
 
-extern ADI_SENSE_CONFIG config;
+extern ADI_SENSE_CONFIG sensor2_bridge_6w_pressure_config;
+
+extern ADI_SENSE_1000_LUT_DESCRIPTOR *sample_lut_desc_list[];
+extern ADI_SENSE_1000_LUT_TABLE_DATA *sample_lut_data_list[];
+extern unsigned                       sample_lut_num_tables;
 
 /* Change the following pointer to select any of the configurations above */
-static ADI_SENSE_CONFIG *pSelectedConfig = &config;
+static ADI_SENSE_CONFIG *pSelectedConfig = &sensor2_bridge_6w_pressure_config;
 
 static ADI_SENSE_CONNECTION connectionInfo = {
     .type = ADI_SENSE_CONNECTION_TYPE_SPI,
@@ -117,13 +121,51 @@
         ADI_SENSE_LOG_ERROR("Failed to set device configuration");
         return res;
     }
+   
+
+    /*
+     * Assemble the list of user-defined Look-Up Tables from sample_lut_data.c
+     * into the single contiguous data format required by the device.
+     */
+    unsigned lutBufferSize = ADI_SENSE_LUT_MAX_SIZE;
+    ADI_SENSE_1000_LUT *pLutBuffer = (ADI_SENSE_1000_LUT *) ::operator new (lutBufferSize);
+    if (pLutBuffer == NULL)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to allocate memory for user-defined LUT data buffer");
+        return ADI_SENSE_NO_MEM;
+    }
+
+    ADI_SENSE_LOG_INFO("Assembling LUT data");
+    res = adi_sense_1000_AssembleLutData(pLutBuffer, lutBufferSize,
+                                         sample_lut_num_tables,
+                                         sample_lut_desc_list,
+                                         sample_lut_data_list);
+    if (res != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to assemble user-defined LUT data");
+        return res;
+    }
+
+    /*
+     * Write assembled user-defined Look-Up Table data structure to the device
+     * User-defined LUT data is not applied until adi_sense_ApplyConfigUpdates() is called.
+     */
+    ADI_SENSE_LOG_INFO("Setting LUT data");
+    res = adi_sense_1000_SetLutData(hDevice, pLutBuffer);
+    if (res != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set user-defined LUT data");
+        return res;
+    }
+
+    delete pLutBuffer;
+    
     res = adi_sense_ApplyConfigUpdates(hDevice);
     if (res != ADI_SENSE_SUCCESS)
     {
         ADI_SENSE_LOG_ERROR("Failed to apply device configuration");
         return res;
     }
-
     /*
      * Kick off the measurement cycle here
      */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sample_lut_data.c	Thu Jul 19 13:25:33 2018 +0000
@@ -0,0 +1,57 @@
+#include "adi_sense_1000_lut_data.h"
+#include "adi_sense_1000_sensor_types.h"
+
+/*
+ * The following example illustrates how individual tables can be declared, and
+ * later assembled into a complete LUT data structure using
+ * adi_sense_1000_AssembleLutData().  That LUT data structure can then be
+ * written to the ADI Sense 1000 device using adi_sense_1000_SetLutData().
+ */
+
+
+
+/*
+ * The following table provide linearisation data for a 4-wire bridge sensor
+ * identified with the ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_1_DEF_L2
+ * sensor type.  The Look-Up Table provided maps a range of input (X)
+ * values to a corresponding range of output (Y) values.  In this example,
+ * the bridge sensor input in millivolts is effectively translated to volts.
+ */
+ADI_SENSE_1000_LUT_DESCRIPTOR bridge_4wire_1_def_l2_range1_desc = {
+    .geometry = ADI_SENSE_1000_LUT_GEOMETRY_NES_1D,
+    .equation = ADI_SENSE_1000_LUT_EQUATION_LUT,
+    .dir = ADI_SENSE_1000_LUT_TC_DIRECTION_FORWARD,
+    .sensor = ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_2_DEF_L2,
+    .dataType = ADI_SENSE_1000_LUT_DATA_TYPE_FLOAT32,
+    .length = 0, /* Filled by adi_sense_1000_AssembleLutData() */
+    .crc16 = 0   /* Filled by adi_sense_1000_AssembleLutData() */
+};
+ADI_SENSE_1000_LUT_1D_NES bridge_4wire_1_def_l2_range1_data = {
+    .nElements = 2,
+    .lut = {
+        -3300.0f, /* x(min) */
+        +3300.0f, /* x(max) */
+        -3.3f,    /* y(min) */
+        +3.3f,    /* y(max) */
+    },
+};
+
+/*
+ * The following variables can be passed as parameters to
+ * adi_sense_1000_AssembleLutData()
+ */
+ADI_SENSE_1000_LUT_DESCRIPTOR *sample_lut_desc_list[] = {
+
+    &bridge_4wire_1_def_l2_range1_desc,
+    
+};
+
+ADI_SENSE_1000_LUT_TABLE_DATA *sample_lut_data_list[] = {
+    
+    (ADI_SENSE_1000_LUT_TABLE_DATA *) &bridge_4wire_1_def_l2_range1_data,
+    
+};
+
+unsigned sample_lut_num_tables =
+    (sizeof(sample_lut_desc_list) / sizeof(sample_lut_desc_list[0]));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sensor2_bridge-6w-pressure_config.c	Thu Jul 19 13:25:33 2018 +0000
@@ -0,0 +1,79 @@
+/*
+Copyright 2017 (c) Analog Devices, Inc.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+  - Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+  - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+  - Neither the name of Analog Devices, Inc. nor the names of its
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+  - The use of this software may or may not infringe the patent rights
+    of one or more patent holders. This license does not release you
+    from the requirement that you obtain separate licenses from these
+    patent holders to use this software.
+  - Use of the software either in source or binary form, must be run
+    on or directly connected to an Analog Devices Inc. component.
+
+THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *****************************************************************************/
+
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ */
+#include "adi_sense_config_types.h"
+
+ADI_SENSE_CONFIG sensor2_bridge_6w_pressure_config = {
+    .versionId = { .major = 1, .minor = 4 },
+    .productId = ADI_SENSE_PRODUCT_ID_1000,
+    .adisense1000 = {
+        .power = {
+            .powerMode = ADI_SENSE_1000_POWER_MODE_FULL,
+        },
+        .measurement = {
+            .operatingMode = ADI_SENSE_1000_OPERATING_MODE_CONTINUOUS,
+            .dataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE,
+        },
+        .channels = {
+            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_2] = {
+                .enableChannel = true,
+                .disablePublishing = false,
+                .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementsPerCycle = 1,
+                .extraSettlingTime = 20000,
+                .adcChannelConfig = {
+                    .sensor = ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_2_DEF_L2,
+                    .gain = ADI_SENSE_1000_ADC_GAIN_1X,
+                    .filter = {
+                        .type = ADI_SENSE_1000_ADC_FILTER_FIR_25SPS,
+                    },
+                    .reference = {
+                        .type = ADI_SENSE_1000_ADC_REFERENCE_BRIDGE_EXCITATION,
+                        .disableBuffer = false,
+                    },
+                    .enableVbias = false,
+                },
+            },
+        },
+    },
+};
+