ST Americas mbed Team / Nucleo_Sensor_Shield

Dependents:   Nucleo_Sensors_Demo m2x-temp_ethernet_demo m2x-MEMS_ACKme_Wifi_demo m2x_MEMS_Ublox_Cellular_demo ... more

Fork of Nucleo_Sensor_Shield by Daniel Griffin

Committer:
dangriffin
Date:
Sat Dec 13 02:33:16 2014 +0000
Revision:
1:354f61ffdcfb
Parent:
0:0433918efb54
Cleanup warnings.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dangriffin 0:0433918efb54 1 /**
dangriffin 0:0433918efb54 2 ******************************************************************************
dangriffin 0:0433918efb54 3 * @file x_cube_mems_lsm6ds0.h
dangriffin 0:0433918efb54 4 * @author AST / EST
dangriffin 0:0433918efb54 5 * @version V0.0.1
dangriffin 0:0433918efb54 6 * @date 9-December-2014
dangriffin 0:0433918efb54 7 * @brief Header file for component LSM6DS0
dangriffin 0:0433918efb54 8 ******************************************************************************
dangriffin 0:0433918efb54 9 * @attention
dangriffin 0:0433918efb54 10 *
dangriffin 0:0433918efb54 11 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
dangriffin 0:0433918efb54 12 *
dangriffin 0:0433918efb54 13 * Redistribution and use in source and binary forms, with or without modification,
dangriffin 0:0433918efb54 14 * are permitted provided that the following conditions are met:
dangriffin 0:0433918efb54 15 * 1. Redistributions of source code must retain the above copyright notice,
dangriffin 0:0433918efb54 16 * this list of conditions and the following disclaimer.
dangriffin 0:0433918efb54 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
dangriffin 0:0433918efb54 18 * this list of conditions and the following disclaimer in the documentation
dangriffin 0:0433918efb54 19 * and/or other materials provided with the distribution.
dangriffin 0:0433918efb54 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
dangriffin 0:0433918efb54 21 * may be used to endorse or promote products derived from this software
dangriffin 0:0433918efb54 22 * without specific prior written permission.
dangriffin 0:0433918efb54 23 *
dangriffin 0:0433918efb54 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
dangriffin 0:0433918efb54 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
dangriffin 0:0433918efb54 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
dangriffin 0:0433918efb54 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
dangriffin 0:0433918efb54 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
dangriffin 0:0433918efb54 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
dangriffin 0:0433918efb54 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
dangriffin 0:0433918efb54 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
dangriffin 0:0433918efb54 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
dangriffin 0:0433918efb54 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
dangriffin 0:0433918efb54 34 *
dangriffin 0:0433918efb54 35 ******************************************************************************
dangriffin 0:0433918efb54 36 */
dangriffin 0:0433918efb54 37
dangriffin 0:0433918efb54 38 /* Includes ------------------------------------------------------------------*/
dangriffin 0:0433918efb54 39 #include "mbed.h"
dangriffin 0:0433918efb54 40 #include "lsm6ds0.h"
dangriffin 0:0433918efb54 41 #include "lsm6ds0_platform.h"
dangriffin 0:0433918efb54 42 #include <math.h>
dangriffin 0:0433918efb54 43
dangriffin 0:0433918efb54 44 /* Methods -------------------------------------------------------------------*/
dangriffin 0:0433918efb54 45
dangriffin 0:0433918efb54 46 /**
dangriffin 0:0433918efb54 47 * @brief Read data from LSM6DS0 Gyroscope and calculate angular rate in mdps.
dangriffin 0:0433918efb54 48 * @param float *pfData
dangriffin 0:0433918efb54 49 * @retval None.
dangriffin 0:0433918efb54 50 */
dangriffin 0:0433918efb54 51 void LSM6DS0::Gyro_GetAxes(AxesRaw_TypeDef *pData)
dangriffin 0:0433918efb54 52 {
dangriffin 0:0433918efb54 53
dangriffin 0:0433918efb54 54 uint8_t tempReg = 0x00;
dangriffin 0:0433918efb54 55 int16_t pDataRaw[3];
dangriffin 0:0433918efb54 56 float sensitivity = 0;
dangriffin 0:0433918efb54 57 int ret;
dangriffin 0:0433918efb54 58
dangriffin 0:0433918efb54 59 LSM6DS0::Gyro_GetAxesRaw(pDataRaw);
dangriffin 0:0433918efb54 60
dangriffin 0:0433918efb54 61 //IMU_6AXES_IO_Read(&tempReg, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG1_G, 1);
dangriffin 0:0433918efb54 62 ret = dev_i2c.i2c_read(&tempReg, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG1_G, 1);
dangriffin 0:0433918efb54 63
dangriffin 1:354f61ffdcfb 64 if (ret == 0)
dangriffin 0:0433918efb54 65 {
dangriffin 1:354f61ffdcfb 66 tempReg &= LSM6DS0_G_FS_MASK;
dangriffin 1:354f61ffdcfb 67
dangriffin 1:354f61ffdcfb 68 switch(tempReg)
dangriffin 1:354f61ffdcfb 69 {
dangriffin 1:354f61ffdcfb 70 case LSM6DS0_G_FS_245:
dangriffin 1:354f61ffdcfb 71 sensitivity = 8.75;
dangriffin 1:354f61ffdcfb 72 break;
dangriffin 1:354f61ffdcfb 73 case LSM6DS0_G_FS_500:
dangriffin 1:354f61ffdcfb 74 sensitivity = 17.50;
dangriffin 1:354f61ffdcfb 75 break;
dangriffin 1:354f61ffdcfb 76 case LSM6DS0_G_FS_2000:
dangriffin 1:354f61ffdcfb 77 sensitivity = 70;
dangriffin 1:354f61ffdcfb 78 break;
dangriffin 1:354f61ffdcfb 79 }
dangriffin 0:0433918efb54 80 }
dangriffin 0:0433918efb54 81
dangriffin 0:0433918efb54 82 pData->AXIS_X = (int32_t)(pDataRaw[0] * sensitivity);
dangriffin 0:0433918efb54 83 pData->AXIS_Y = (int32_t)(pDataRaw[1] * sensitivity);
dangriffin 0:0433918efb54 84 pData->AXIS_Z = (int32_t)(pDataRaw[2] * sensitivity);
dangriffin 0:0433918efb54 85 }
dangriffin 0:0433918efb54 86
dangriffin 0:0433918efb54 87
dangriffin 0:0433918efb54 88 /**
dangriffin 0:0433918efb54 89 * @brief Read raw data from LSM6DS0 Gyroscope output register.
dangriffin 0:0433918efb54 90 * @param float *pfData
dangriffin 0:0433918efb54 91 * @retval None.
dangriffin 0:0433918efb54 92 */
dangriffin 0:0433918efb54 93 void LSM6DS0::Gyro_GetAxesRaw(int16_t *pData)
dangriffin 0:0433918efb54 94 {
dangriffin 0:0433918efb54 95 uint8_t tempReg[2] = {0,0};
dangriffin 0:0433918efb54 96 int ret;
dangriffin 0:0433918efb54 97
dangriffin 1:354f61ffdcfb 98 pData[0] = pData[1] = pData[2] = 0;
dangriffin 1:354f61ffdcfb 99
dangriffin 0:0433918efb54 100 //IMU_6AXES_IO_Read(&tempReg[0], LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_OUT_X_L_G + 0x80, 2);
dangriffin 0:0433918efb54 101 ret = dev_i2c.i2c_read(&tempReg[0], LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_OUT_X_L_G + 0x80, 2);
dangriffin 0:0433918efb54 102
dangriffin 1:354f61ffdcfb 103 if (ret == 0)
dangriffin 1:354f61ffdcfb 104 {
dangriffin 1:354f61ffdcfb 105 pData[0] = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
dangriffin 0:0433918efb54 106
dangriffin 1:354f61ffdcfb 107 //IMU_6AXES_IO_Read(&tempReg[0], LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_OUT_Y_L_G + 0x80, 2);
dangriffin 1:354f61ffdcfb 108 ret = dev_i2c.i2c_read(&tempReg[0], LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_OUT_Y_L_G + 0x80, 2);
dangriffin 1:354f61ffdcfb 109 }
dangriffin 1:354f61ffdcfb 110
dangriffin 1:354f61ffdcfb 111 if (ret == 0)
dangriffin 1:354f61ffdcfb 112 {
dangriffin 1:354f61ffdcfb 113 pData[1] = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
dangriffin 0:0433918efb54 114
dangriffin 1:354f61ffdcfb 115 //IMU_6AXES_IO_Read(&tempReg[0], LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_OUT_Z_L_G + 0x80, 2);
dangriffin 1:354f61ffdcfb 116 ret = dev_i2c.i2c_read(&tempReg[0], LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_OUT_Z_L_G + 0x80, 2);
dangriffin 1:354f61ffdcfb 117 }
dangriffin 0:0433918efb54 118
dangriffin 1:354f61ffdcfb 119 if (ret == 0)
dangriffin 1:354f61ffdcfb 120 {
dangriffin 1:354f61ffdcfb 121 pData[2] = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
dangriffin 1:354f61ffdcfb 122 }
dangriffin 0:0433918efb54 123 }
dangriffin 0:0433918efb54 124
dangriffin 0:0433918efb54 125
dangriffin 0:0433918efb54 126 /**
dangriffin 0:0433918efb54 127 * @brief Read data from LSM6DS0 Accelerometer and calculate linear acceleration in mg.
dangriffin 0:0433918efb54 128 * @param float *pfData
dangriffin 0:0433918efb54 129 * @retval None.
dangriffin 0:0433918efb54 130 */
dangriffin 0:0433918efb54 131 void LSM6DS0::Acc_GetAxes(AxesRaw_TypeDef *pData)
dangriffin 0:0433918efb54 132 {
dangriffin 0:0433918efb54 133 uint8_t tempReg = 0x00;
dangriffin 0:0433918efb54 134 int16_t pDataRaw[3];
dangriffin 0:0433918efb54 135 float sensitivity = 0;
dangriffin 0:0433918efb54 136 int ret;
dangriffin 0:0433918efb54 137
dangriffin 0:0433918efb54 138 Acc_GetAxesRaw(pDataRaw);
dangriffin 0:0433918efb54 139
dangriffin 0:0433918efb54 140 //IMU_6AXES_IO_Read(&tempReg, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG6_XL, 1);
dangriffin 0:0433918efb54 141 ret = dev_i2c.i2c_read(&tempReg, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG6_XL, 1);
dangriffin 0:0433918efb54 142
dangriffin 1:354f61ffdcfb 143 if (ret == 0)
dangriffin 0:0433918efb54 144 {
dangriffin 1:354f61ffdcfb 145 tempReg &= LSM6DS0_XL_FS_MASK;
dangriffin 1:354f61ffdcfb 146
dangriffin 1:354f61ffdcfb 147 switch(tempReg)
dangriffin 1:354f61ffdcfb 148 {
dangriffin 1:354f61ffdcfb 149 case LSM6DS0_XL_FS_2G:
dangriffin 1:354f61ffdcfb 150 sensitivity = 0.061;
dangriffin 1:354f61ffdcfb 151 break;
dangriffin 1:354f61ffdcfb 152 case LSM6DS0_XL_FS_4G:
dangriffin 1:354f61ffdcfb 153 sensitivity = 0.122;
dangriffin 1:354f61ffdcfb 154 break;
dangriffin 1:354f61ffdcfb 155 case LSM6DS0_XL_FS_8G:
dangriffin 1:354f61ffdcfb 156 sensitivity = 0.244;
dangriffin 1:354f61ffdcfb 157 break;
dangriffin 1:354f61ffdcfb 158 }
dangriffin 0:0433918efb54 159 }
dangriffin 0:0433918efb54 160
dangriffin 0:0433918efb54 161 pData->AXIS_X = (int32_t)(pDataRaw[0] * sensitivity);
dangriffin 0:0433918efb54 162 pData->AXIS_Y = (int32_t)(pDataRaw[1] * sensitivity);
dangriffin 0:0433918efb54 163 pData->AXIS_Z = (int32_t)(pDataRaw[2] * sensitivity);
dangriffin 0:0433918efb54 164
dangriffin 0:0433918efb54 165 }
dangriffin 0:0433918efb54 166
dangriffin 0:0433918efb54 167 /**
dangriffin 0:0433918efb54 168 * @brief Read raw data from LSM6DS0 Accelerometer output register.
dangriffin 0:0433918efb54 169 * @param float *pfData
dangriffin 0:0433918efb54 170 * @retval None.
dangriffin 0:0433918efb54 171 */
dangriffin 0:0433918efb54 172 void LSM6DS0::Acc_GetAxesRaw(int16_t *pData)
dangriffin 0:0433918efb54 173 {
dangriffin 0:0433918efb54 174 uint8_t tempReg[2] = {0,0};
dangriffin 0:0433918efb54 175 int ret;
dangriffin 0:0433918efb54 176
dangriffin 1:354f61ffdcfb 177 pData[0] = pData[1] = pData[2] = 0;
dangriffin 1:354f61ffdcfb 178
dangriffin 0:0433918efb54 179 //IMU_6AXES_IO_Read(&tempReg[0], LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_OUT_X_L_XL + 0x80, 2);
dangriffin 0:0433918efb54 180 ret = dev_i2c.i2c_read(&tempReg[0], LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_OUT_X_L_XL + 0x80, 2);
dangriffin 0:0433918efb54 181
dangriffin 1:354f61ffdcfb 182 if (ret == 0)
dangriffin 1:354f61ffdcfb 183 {
dangriffin 1:354f61ffdcfb 184 pData[0] = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
dangriffin 0:0433918efb54 185
dangriffin 1:354f61ffdcfb 186 //IMU_6AXES_IO_Read(&tempReg[0], LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_OUT_Y_L_XL + 0x80, 2);
dangriffin 1:354f61ffdcfb 187 ret = dev_i2c.i2c_read(&tempReg[0], LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_OUT_Y_L_XL + 0x80, 2);
dangriffin 1:354f61ffdcfb 188 }
dangriffin 1:354f61ffdcfb 189
dangriffin 1:354f61ffdcfb 190 if (ret == 0)
dangriffin 1:354f61ffdcfb 191 {
dangriffin 1:354f61ffdcfb 192 pData[1] = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
dangriffin 1:354f61ffdcfb 193
dangriffin 1:354f61ffdcfb 194 //IMU_6AXES_IO_Read(&tempReg[0], LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_OUT_Z_L_XL + 0x80, 2);
dangriffin 1:354f61ffdcfb 195 ret = dev_i2c.i2c_read(&tempReg[0], LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_OUT_Z_L_XL + 0x80, 2);
dangriffin 1:354f61ffdcfb 196 }
dangriffin 1:354f61ffdcfb 197
dangriffin 1:354f61ffdcfb 198 if (ret == 0)
dangriffin 1:354f61ffdcfb 199 {
dangriffin 1:354f61ffdcfb 200 pData[2] = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
dangriffin 1:354f61ffdcfb 201 }
dangriffin 0:0433918efb54 202 }
dangriffin 0:0433918efb54 203
dangriffin 0:0433918efb54 204 /**
dangriffin 0:0433918efb54 205 * @brief Read ID address of HTS221
dangriffin 0:0433918efb54 206 * @param Device ID address
dangriffin 0:0433918efb54 207 * @retval ID name
dangriffin 0:0433918efb54 208 */
dangriffin 0:0433918efb54 209 uint8_t LSM6DS0::ReadID(void)
dangriffin 0:0433918efb54 210 {
dangriffin 0:0433918efb54 211 uint8_t tmp=0x00;
dangriffin 0:0433918efb54 212 int ret;
dangriffin 0:0433918efb54 213
dangriffin 0:0433918efb54 214 /* Read WHO I AM register */
dangriffin 0:0433918efb54 215 //IMU_6AXES_IO_Read(&tmp, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_WHO_AM_I_ADDR, 1);
dangriffin 0:0433918efb54 216 ret = dev_i2c.i2c_read(&tmp, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_WHO_AM_I_ADDR, 1);
dangriffin 0:0433918efb54 217
dangriffin 0:0433918efb54 218 /* Return the ID */
dangriffin 1:354f61ffdcfb 219 return ((ret == 0) ? (uint8_t)tmp : 0);
dangriffin 0:0433918efb54 220 }
dangriffin 0:0433918efb54 221
dangriffin 0:0433918efb54 222 /**
dangriffin 0:0433918efb54 223 * @brief Set LSM6DS0 Initialization.
dangriffin 0:0433918efb54 224 * @param InitStruct: it contains the configuration setting for the LSM6DS0.
dangriffin 0:0433918efb54 225 * @retval None
dangriffin 0:0433918efb54 226 */
dangriffin 0:0433918efb54 227 void LSM6DS0::Init() {
dangriffin 0:0433918efb54 228
dangriffin 0:0433918efb54 229 uint8_t tmp1 = 0x00;
dangriffin 0:0433918efb54 230 int ret;
dangriffin 0:0433918efb54 231
dangriffin 0:0433918efb54 232 /******* Gyroscope init *******/
dangriffin 0:0433918efb54 233
dangriffin 0:0433918efb54 234 //IMU_6AXES_IO_Read(&tmp1, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG1_G, 1);
dangriffin 0:0433918efb54 235 ret = dev_i2c.i2c_read(&tmp1, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG1_G, 1);
dangriffin 0:0433918efb54 236
dangriffin 1:354f61ffdcfb 237 if (ret == 0)
dangriffin 1:354f61ffdcfb 238 {
dangriffin 1:354f61ffdcfb 239 /* Output Data Rate selection */
dangriffin 1:354f61ffdcfb 240 tmp1 &= ~(LSM6DS0_G_ODR_MASK);
dangriffin 1:354f61ffdcfb 241 tmp1 |= LSM6DS0_G_ODR_119HZ;
dangriffin 1:354f61ffdcfb 242
dangriffin 1:354f61ffdcfb 243 /* Full scale selection */
dangriffin 1:354f61ffdcfb 244 tmp1 &= ~(LSM6DS0_G_FS_MASK);
dangriffin 1:354f61ffdcfb 245 tmp1 |= LSM6DS0_G_FS_2000;
dangriffin 0:0433918efb54 246
dangriffin 1:354f61ffdcfb 247 //IMU_6AXES_IO_Write(&tmp1, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG1_G, 1);
dangriffin 1:354f61ffdcfb 248 ret = dev_i2c.i2c_write(&tmp1, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG1_G, 1);
dangriffin 1:354f61ffdcfb 249 }
dangriffin 1:354f61ffdcfb 250
dangriffin 1:354f61ffdcfb 251 if (ret == 0)
dangriffin 1:354f61ffdcfb 252 {
dangriffin 1:354f61ffdcfb 253 //IMU_6AXES_IO_Read(&tmp1, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG4, 1);
dangriffin 1:354f61ffdcfb 254 ret = dev_i2c.i2c_read(&tmp1, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG4, 1);
dangriffin 1:354f61ffdcfb 255 }
dangriffin 0:0433918efb54 256
dangriffin 1:354f61ffdcfb 257 if (ret == 0)
dangriffin 1:354f61ffdcfb 258 {
dangriffin 1:354f61ffdcfb 259 /* Enable X axis selection */
dangriffin 1:354f61ffdcfb 260 tmp1 &= ~(LSM6DS0_G_XEN_MASK);
dangriffin 1:354f61ffdcfb 261 tmp1 |= LSM6DS0_G_XEN_ENABLE;
dangriffin 0:0433918efb54 262
dangriffin 1:354f61ffdcfb 263 /* Enable Y axis selection */
dangriffin 1:354f61ffdcfb 264 tmp1 &= ~(LSM6DS0_G_YEN_MASK);
dangriffin 1:354f61ffdcfb 265 tmp1 |= LSM6DS0_G_YEN_ENABLE;
dangriffin 1:354f61ffdcfb 266
dangriffin 1:354f61ffdcfb 267 /* Enable Z axis selection */
dangriffin 1:354f61ffdcfb 268 tmp1 &= ~(LSM6DS0_G_ZEN_MASK);
dangriffin 1:354f61ffdcfb 269 tmp1 |= LSM6DS0_G_ZEN_ENABLE;
dangriffin 1:354f61ffdcfb 270
dangriffin 1:354f61ffdcfb 271 //IMU_6AXES_IO_Write(&tmp1, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG4, 1);
dangriffin 1:354f61ffdcfb 272 ret = dev_i2c.i2c_write(&tmp1, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG4, 1);
dangriffin 1:354f61ffdcfb 273 }
dangriffin 0:0433918efb54 274
dangriffin 1:354f61ffdcfb 275 /******************************/
dangriffin 1:354f61ffdcfb 276 /***** Accelerometer init *****/
dangriffin 1:354f61ffdcfb 277 if (ret == 0)
dangriffin 1:354f61ffdcfb 278 {
dangriffin 1:354f61ffdcfb 279 //IMU_6AXES_IO_Read(&tmp1, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG6_XL, 1);
dangriffin 1:354f61ffdcfb 280 ret = dev_i2c.i2c_read(&tmp1, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG6_XL, 1);
dangriffin 1:354f61ffdcfb 281 }
dangriffin 1:354f61ffdcfb 282
dangriffin 1:354f61ffdcfb 283 if (ret == 0)
dangriffin 1:354f61ffdcfb 284 {
dangriffin 1:354f61ffdcfb 285 /* Output Data Rate selection */
dangriffin 1:354f61ffdcfb 286 tmp1 &= ~(LSM6DS0_XL_ODR_MASK);
dangriffin 1:354f61ffdcfb 287 tmp1 |= LSM6DS0_XL_ODR_119HZ;
dangriffin 0:0433918efb54 288
dangriffin 1:354f61ffdcfb 289 /* Full scale selection */
dangriffin 1:354f61ffdcfb 290 tmp1 &= ~(LSM6DS0_XL_FS_MASK);
dangriffin 1:354f61ffdcfb 291 tmp1 |= LSM6DS0_XL_FS_2G;
dangriffin 0:0433918efb54 292
dangriffin 1:354f61ffdcfb 293 //IMU_6AXES_IO_Write(&tmp1, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG6_XL, 1);
dangriffin 1:354f61ffdcfb 294 ret = dev_i2c.i2c_write(&tmp1, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG6_XL, 1);
dangriffin 1:354f61ffdcfb 295 }
dangriffin 1:354f61ffdcfb 296
dangriffin 1:354f61ffdcfb 297 if (ret == 0)
dangriffin 1:354f61ffdcfb 298 {
dangriffin 1:354f61ffdcfb 299 //IMU_6AXES_IO_Read(&tmp1, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG5_XL, 1);
dangriffin 1:354f61ffdcfb 300 ret = dev_i2c.i2c_read(&tmp1, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG5_XL, 1);
dangriffin 1:354f61ffdcfb 301 }
dangriffin 1:354f61ffdcfb 302
dangriffin 1:354f61ffdcfb 303 if (ret == 0)
dangriffin 1:354f61ffdcfb 304 {
dangriffin 1:354f61ffdcfb 305 /* Enable X axis selection */
dangriffin 1:354f61ffdcfb 306 tmp1 &= ~(LSM6DS0_XL_XEN_MASK);
dangriffin 1:354f61ffdcfb 307 tmp1 |= LSM6DS0_XL_XEN_ENABLE;
dangriffin 0:0433918efb54 308
dangriffin 1:354f61ffdcfb 309 /* Enable Y axis selection */
dangriffin 1:354f61ffdcfb 310 tmp1 &= ~(LSM6DS0_XL_YEN_MASK);
dangriffin 1:354f61ffdcfb 311 tmp1 |= LSM6DS0_XL_YEN_ENABLE;
dangriffin 0:0433918efb54 312
dangriffin 1:354f61ffdcfb 313 /* Enable Z axis selection */
dangriffin 1:354f61ffdcfb 314 tmp1 &= ~(LSM6DS0_XL_ZEN_MASK);
dangriffin 1:354f61ffdcfb 315 tmp1 |= LSM6DS0_XL_ZEN_ENABLE;
dangriffin 1:354f61ffdcfb 316
dangriffin 1:354f61ffdcfb 317 //IMU_6AXES_IO_Write(&tmp1, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG5_XL, 1);
dangriffin 1:354f61ffdcfb 318 ret = dev_i2c.i2c_write(&tmp1, LSM6DS0_XG_MEMS_ADDRESS, LSM6DS0_XG_CTRL_REG5_XL, 1);
dangriffin 1:354f61ffdcfb 319 }
dangriffin 0:0433918efb54 320 /******************************/
dangriffin 0:0433918efb54 321
dangriffin 1:354f61ffdcfb 322 if (ret == 0)
dangriffin 1:354f61ffdcfb 323 {
dangriffin 1:354f61ffdcfb 324 if(ReadID() == I_AM_LSM6DS0_XG)
dangriffin 1:354f61ffdcfb 325 {
dangriffin 0:0433918efb54 326 LSM6DS0Initialized = 1;
dangriffin 0:0433918efb54 327 //ret = HUM_TEMP_OK;
dangriffin 1:354f61ffdcfb 328 }
dangriffin 0:0433918efb54 329 }
dangriffin 0:0433918efb54 330
dangriffin 0:0433918efb54 331 return;
dangriffin 0:0433918efb54 332 }