LSM9DS1 SPI
LSM9DS1.h@0:cc9489570dd1, 2019-04-25 (annotated)
- Committer:
- 771_8bit
- Date:
- Thu Apr 25 04:04:04 2019 +0000
- Revision:
- 0:cc9489570dd1
hello
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
771_8bit | 0:cc9489570dd1 | 1 | // Linear Acceleration: mg per LSB |
771_8bit | 0:cc9489570dd1 | 2 | #define LSM9DS1_ACCEL_MG_LSB_2G (0.061F) |
771_8bit | 0:cc9489570dd1 | 3 | #define LSM9DS1_ACCEL_MG_LSB_4G (0.122F) |
771_8bit | 0:cc9489570dd1 | 4 | #define LSM9DS1_ACCEL_MG_LSB_8G (0.244F) |
771_8bit | 0:cc9489570dd1 | 5 | #define LSM9DS1_ACCEL_MG_LSB_16G (0.732F) |
771_8bit | 0:cc9489570dd1 | 6 | |
771_8bit | 0:cc9489570dd1 | 7 | // Magnetic Field Strength: gauss range |
771_8bit | 0:cc9489570dd1 | 8 | #define LSM9DS1_MAG_MGAUSS_4GAUSS (0.14F) |
771_8bit | 0:cc9489570dd1 | 9 | #define LSM9DS1_MAG_MGAUSS_8GAUSS (0.29F) |
771_8bit | 0:cc9489570dd1 | 10 | #define LSM9DS1_MAG_MGAUSS_12GAUSS (0.43F) |
771_8bit | 0:cc9489570dd1 | 11 | #define LSM9DS1_MAG_MGAUSS_16GAUSS (0.58F) |
771_8bit | 0:cc9489570dd1 | 12 | |
771_8bit | 0:cc9489570dd1 | 13 | // Angular Rate: dps per LSB |
771_8bit | 0:cc9489570dd1 | 14 | #define LSM9DS1_GYRO_DPS_DIGIT_245DPS (0.00875F) |
771_8bit | 0:cc9489570dd1 | 15 | #define LSM9DS1_GYRO_DPS_DIGIT_500DPS (0.01750F) |
771_8bit | 0:cc9489570dd1 | 16 | #define LSM9DS1_GYRO_DPS_DIGIT_2000DPS (0.07000F) |
771_8bit | 0:cc9489570dd1 | 17 | |
771_8bit | 0:cc9489570dd1 | 18 | #include "mbed.h" |
771_8bit | 0:cc9489570dd1 | 19 | |
771_8bit | 0:cc9489570dd1 | 20 | class LSM9DS1 |
771_8bit | 0:cc9489570dd1 | 21 | { |
771_8bit | 0:cc9489570dd1 | 22 | SPI spi8; |
771_8bit | 0:cc9489570dd1 | 23 | DigitalOut cs_AG; |
771_8bit | 0:cc9489570dd1 | 24 | DigitalOut cs_M; |
771_8bit | 0:cc9489570dd1 | 25 | |
771_8bit | 0:cc9489570dd1 | 26 | public: |
771_8bit | 0:cc9489570dd1 | 27 | |
771_8bit | 0:cc9489570dd1 | 28 | LSM9DS1(PinName _mosi, PinName _miso, PinName _sclk, PinName _cs_AG, PinName _cs_M); |
771_8bit | 0:cc9489570dd1 | 29 | float gyro_x; |
771_8bit | 0:cc9489570dd1 | 30 | float gyro_y; |
771_8bit | 0:cc9489570dd1 | 31 | float gyro_z; |
771_8bit | 0:cc9489570dd1 | 32 | float accel_x; |
771_8bit | 0:cc9489570dd1 | 33 | float accel_y; |
771_8bit | 0:cc9489570dd1 | 34 | float accel_z; |
771_8bit | 0:cc9489570dd1 | 35 | float mag_x; |
771_8bit | 0:cc9489570dd1 | 36 | float mag_y; |
771_8bit | 0:cc9489570dd1 | 37 | float mag_z; |
771_8bit | 0:cc9489570dd1 | 38 | |
771_8bit | 0:cc9489570dd1 | 39 | typedef enum |
771_8bit | 0:cc9489570dd1 | 40 | { |
771_8bit | 0:cc9489570dd1 | 41 | LSM9DS1_cs_AG = 0, |
771_8bit | 0:cc9489570dd1 | 42 | LSM9DS1_cs_M = 1, |
771_8bit | 0:cc9489570dd1 | 43 | |
771_8bit | 0:cc9489570dd1 | 44 | } lsm9ds1ChipSelect_t; |
771_8bit | 0:cc9489570dd1 | 45 | |
771_8bit | 0:cc9489570dd1 | 46 | typedef enum |
771_8bit | 0:cc9489570dd1 | 47 | { |
771_8bit | 0:cc9489570dd1 | 48 | LSM9DS1_REGISTER_WHO_AM_I_XG = 0x0F, |
771_8bit | 0:cc9489570dd1 | 49 | LSM9DS1_REGISTER_CTRL_REG1_G = 0x10, |
771_8bit | 0:cc9489570dd1 | 50 | LSM9DS1_REGISTER_CTRL_REG2_G = 0x11, |
771_8bit | 0:cc9489570dd1 | 51 | LSM9DS1_REGISTER_CTRL_REG3_G = 0x12, |
771_8bit | 0:cc9489570dd1 | 52 | LSM9DS1_REGISTER_TEMP_OUT_L = 0x15, |
771_8bit | 0:cc9489570dd1 | 53 | LSM9DS1_REGISTER_TEMP_OUT_H = 0x16, |
771_8bit | 0:cc9489570dd1 | 54 | LSM9DS1_REGISTER_STATUS_REG = 0x17, |
771_8bit | 0:cc9489570dd1 | 55 | LSM9DS1_REGISTER_OUT_X_L_G = 0x18, |
771_8bit | 0:cc9489570dd1 | 56 | LSM9DS1_REGISTER_OUT_X_H_G = 0x19, |
771_8bit | 0:cc9489570dd1 | 57 | LSM9DS1_REGISTER_OUT_Y_L_G = 0x1A, |
771_8bit | 0:cc9489570dd1 | 58 | LSM9DS1_REGISTER_OUT_Y_H_G = 0x1B, |
771_8bit | 0:cc9489570dd1 | 59 | LSM9DS1_REGISTER_OUT_Z_L_G = 0x1C, |
771_8bit | 0:cc9489570dd1 | 60 | LSM9DS1_REGISTER_OUT_Z_H_G = 0x1D, |
771_8bit | 0:cc9489570dd1 | 61 | LSM9DS1_REGISTER_CTRL_REG4 = 0x1E, |
771_8bit | 0:cc9489570dd1 | 62 | LSM9DS1_REGISTER_CTRL_REG5_XL = 0x1F, |
771_8bit | 0:cc9489570dd1 | 63 | LSM9DS1_REGISTER_CTRL_REG6_XL = 0x20, |
771_8bit | 0:cc9489570dd1 | 64 | LSM9DS1_REGISTER_CTRL_REG7_XL = 0x21, |
771_8bit | 0:cc9489570dd1 | 65 | LSM9DS1_REGISTER_CTRL_REG8 = 0x22, |
771_8bit | 0:cc9489570dd1 | 66 | LSM9DS1_REGISTER_CTRL_REG9 = 0x23, |
771_8bit | 0:cc9489570dd1 | 67 | LSM9DS1_REGISTER_CTRL_REG10 = 0x24, |
771_8bit | 0:cc9489570dd1 | 68 | |
771_8bit | 0:cc9489570dd1 | 69 | LSM9DS1_REGISTER_OUT_X_L_XL = 0x28, |
771_8bit | 0:cc9489570dd1 | 70 | LSM9DS1_REGISTER_OUT_X_H_XL = 0x29, |
771_8bit | 0:cc9489570dd1 | 71 | LSM9DS1_REGISTER_OUT_Y_L_XL = 0x2A, |
771_8bit | 0:cc9489570dd1 | 72 | LSM9DS1_REGISTER_OUT_Y_H_XL = 0x2B, |
771_8bit | 0:cc9489570dd1 | 73 | LSM9DS1_REGISTER_OUT_Z_L_XL = 0x2C, |
771_8bit | 0:cc9489570dd1 | 74 | LSM9DS1_REGISTER_OUT_Z_H_XL = 0x2D, |
771_8bit | 0:cc9489570dd1 | 75 | |
771_8bit | 0:cc9489570dd1 | 76 | } lsm9ds1AccGyroRegisters_t; |
771_8bit | 0:cc9489570dd1 | 77 | |
771_8bit | 0:cc9489570dd1 | 78 | typedef enum |
771_8bit | 0:cc9489570dd1 | 79 | { |
771_8bit | 0:cc9489570dd1 | 80 | LSM9DS1_REGISTER_WHO_AM_I_M = 0x0F, |
771_8bit | 0:cc9489570dd1 | 81 | LSM9DS1_REGISTER_CTRL_REG1_M = 0x20, |
771_8bit | 0:cc9489570dd1 | 82 | LSM9DS1_REGISTER_CTRL_REG2_M = 0x21, |
771_8bit | 0:cc9489570dd1 | 83 | LSM9DS1_REGISTER_CTRL_REG3_M = 0x22, |
771_8bit | 0:cc9489570dd1 | 84 | LSM9DS1_REGISTER_CTRL_REG4_M = 0x23, |
771_8bit | 0:cc9489570dd1 | 85 | LSM9DS1_REGISTER_CTRL_REG5_M = 0x24, |
771_8bit | 0:cc9489570dd1 | 86 | LSM9DS1_REGISTER_STATUS_REG_M = 0x27, |
771_8bit | 0:cc9489570dd1 | 87 | LSM9DS1_REGISTER_OUT_X_L_M = 0x28, |
771_8bit | 0:cc9489570dd1 | 88 | LSM9DS1_REGISTER_OUT_X_H_M = 0x29, |
771_8bit | 0:cc9489570dd1 | 89 | LSM9DS1_REGISTER_OUT_Y_L_M = 0x2A, |
771_8bit | 0:cc9489570dd1 | 90 | LSM9DS1_REGISTER_OUT_Y_H_M = 0x2B, |
771_8bit | 0:cc9489570dd1 | 91 | LSM9DS1_REGISTER_OUT_Z_L_M = 0x2C, |
771_8bit | 0:cc9489570dd1 | 92 | LSM9DS1_REGISTER_OUT_Z_H_M = 0x2D, |
771_8bit | 0:cc9489570dd1 | 93 | LSM9DS1_REGISTER_CFG_M = 0x30, |
771_8bit | 0:cc9489570dd1 | 94 | LSM9DS1_REGISTER_INT_SRC_M = 0x31, |
771_8bit | 0:cc9489570dd1 | 95 | } lsm9ds1MagRegisters_t; |
771_8bit | 0:cc9489570dd1 | 96 | |
771_8bit | 0:cc9489570dd1 | 97 | typedef enum |
771_8bit | 0:cc9489570dd1 | 98 | { |
771_8bit | 0:cc9489570dd1 | 99 | LSM9DS1_ACCELRANGE_2G = (0b00 << 3), |
771_8bit | 0:cc9489570dd1 | 100 | LSM9DS1_ACCELRANGE_16G = (0b01 << 3), |
771_8bit | 0:cc9489570dd1 | 101 | LSM9DS1_ACCELRANGE_4G = (0b10 << 3), |
771_8bit | 0:cc9489570dd1 | 102 | LSM9DS1_ACCELRANGE_8G = (0b11 << 3), |
771_8bit | 0:cc9489570dd1 | 103 | } lsm9ds1AccelRange_t; |
771_8bit | 0:cc9489570dd1 | 104 | |
771_8bit | 0:cc9489570dd1 | 105 | typedef enum |
771_8bit | 0:cc9489570dd1 | 106 | { |
771_8bit | 0:cc9489570dd1 | 107 | LSM9DS1_ACCELDATARATE_POWERDOWN = (0b0000 << 4), |
771_8bit | 0:cc9489570dd1 | 108 | LSM9DS1_ACCELDATARATE_3_125HZ = (0b0001 << 4), |
771_8bit | 0:cc9489570dd1 | 109 | LSM9DS1_ACCELDATARATE_6_25HZ = (0b0010 << 4), |
771_8bit | 0:cc9489570dd1 | 110 | LSM9DS1_ACCELDATARATE_12_5HZ = (0b0011 << 4), |
771_8bit | 0:cc9489570dd1 | 111 | LSM9DS1_ACCELDATARATE_25HZ = (0b0100 << 4), |
771_8bit | 0:cc9489570dd1 | 112 | LSM9DS1_ACCELDATARATE_50HZ = (0b0101 << 4), |
771_8bit | 0:cc9489570dd1 | 113 | LSM9DS1_ACCELDATARATE_100HZ = (0b0110 << 4), |
771_8bit | 0:cc9489570dd1 | 114 | LSM9DS1_ACCELDATARATE_200HZ = (0b0111 << 4), |
771_8bit | 0:cc9489570dd1 | 115 | LSM9DS1_ACCELDATARATE_400HZ = (0b1000 << 4), |
771_8bit | 0:cc9489570dd1 | 116 | LSM9DS1_ACCELDATARATE_800HZ = (0b1001 << 4), |
771_8bit | 0:cc9489570dd1 | 117 | LSM9DS1_ACCELDATARATE_1600HZ = (0b1010 << 4) |
771_8bit | 0:cc9489570dd1 | 118 | } lm9ds1AccelDataRate_t; |
771_8bit | 0:cc9489570dd1 | 119 | |
771_8bit | 0:cc9489570dd1 | 120 | typedef enum |
771_8bit | 0:cc9489570dd1 | 121 | { |
771_8bit | 0:cc9489570dd1 | 122 | LSM9DS1_MAGGAIN_4GAUSS = (0b00 << 5), // +/- 4 gauss |
771_8bit | 0:cc9489570dd1 | 123 | LSM9DS1_MAGGAIN_8GAUSS = (0b01 << 5), // +/- 8 gauss |
771_8bit | 0:cc9489570dd1 | 124 | LSM9DS1_MAGGAIN_12GAUSS = (0b10 << 5), // +/- 12 gauss |
771_8bit | 0:cc9489570dd1 | 125 | LSM9DS1_MAGGAIN_16GAUSS = (0b11 << 5) // +/- 16 gauss |
771_8bit | 0:cc9489570dd1 | 126 | } lsm9ds1MagGain_t; |
771_8bit | 0:cc9489570dd1 | 127 | |
771_8bit | 0:cc9489570dd1 | 128 | typedef enum |
771_8bit | 0:cc9489570dd1 | 129 | { |
771_8bit | 0:cc9489570dd1 | 130 | LSM9DS1_MAGDATARATE_3_125HZ = (0b000 << 2), |
771_8bit | 0:cc9489570dd1 | 131 | LSM9DS1_MAGDATARATE_6_25HZ = (0b001 << 2), |
771_8bit | 0:cc9489570dd1 | 132 | LSM9DS1_MAGDATARATE_12_5HZ = (0b010 << 2), |
771_8bit | 0:cc9489570dd1 | 133 | LSM9DS1_MAGDATARATE_25HZ = (0b011 << 2), |
771_8bit | 0:cc9489570dd1 | 134 | LSM9DS1_MAGDATARATE_50HZ = (0b100 << 2), |
771_8bit | 0:cc9489570dd1 | 135 | LSM9DS1_MAGDATARATE_100HZ = (0b101 << 2) |
771_8bit | 0:cc9489570dd1 | 136 | } lsm9ds1MagDataRate_t; |
771_8bit | 0:cc9489570dd1 | 137 | |
771_8bit | 0:cc9489570dd1 | 138 | typedef enum |
771_8bit | 0:cc9489570dd1 | 139 | { |
771_8bit | 0:cc9489570dd1 | 140 | LSM9DS1_GYROSCALE_245DPS = (0b00 << 3), // +/- 245 degrees per second rotation |
771_8bit | 0:cc9489570dd1 | 141 | LSM9DS1_GYROSCALE_500DPS = (0b01 << 3), // +/- 500 degrees per second rotation |
771_8bit | 0:cc9489570dd1 | 142 | LSM9DS1_GYROSCALE_2000DPS = (0b11 << 3) // +/- 2000 degrees per second rotation |
771_8bit | 0:cc9489570dd1 | 143 | } lsm9ds1GyroScale_t; |
771_8bit | 0:cc9489570dd1 | 144 | |
771_8bit | 0:cc9489570dd1 | 145 | typedef struct vector_s |
771_8bit | 0:cc9489570dd1 | 146 | { |
771_8bit | 0:cc9489570dd1 | 147 | float x; |
771_8bit | 0:cc9489570dd1 | 148 | float y; |
771_8bit | 0:cc9489570dd1 | 149 | float z; |
771_8bit | 0:cc9489570dd1 | 150 | } lsm9ds1Vector_t; |
771_8bit | 0:cc9489570dd1 | 151 | |
771_8bit | 0:cc9489570dd1 | 152 | void initSPI(void); |
771_8bit | 0:cc9489570dd1 | 153 | void initAccel(lsm9ds1AccelRange_t scale); |
771_8bit | 0:cc9489570dd1 | 154 | void initGyro(lsm9ds1GyroScale_t scale); |
771_8bit | 0:cc9489570dd1 | 155 | void initMag(lsm9ds1MagGain_t scale); |
771_8bit | 0:cc9489570dd1 | 156 | void readAccel(); |
771_8bit | 0:cc9489570dd1 | 157 | void readGyro(); |
771_8bit | 0:cc9489570dd1 | 158 | void readMag(); |
771_8bit | 0:cc9489570dd1 | 159 | uint8_t whoami(); |
771_8bit | 0:cc9489570dd1 | 160 | uint8_t read8(lsm9ds1ChipSelect_t cs,uint8_t address); |
771_8bit | 0:cc9489570dd1 | 161 | void write8(lsm9ds1ChipSelect_t cs,uint8_t address,uint8_t data); |
771_8bit | 0:cc9489570dd1 | 162 | |
771_8bit | 0:cc9489570dd1 | 163 | private: |
771_8bit | 0:cc9489570dd1 | 164 | float _accel_mg_lsb; |
771_8bit | 0:cc9489570dd1 | 165 | float _mag_mgauss_lsb; |
771_8bit | 0:cc9489570dd1 | 166 | float _gyro_dps_digit; |
771_8bit | 0:cc9489570dd1 | 167 | }; |