lib
H3LIS331.h@0:ecac7a6076f0, 2014-11-18 (annotated)
- Committer:
- peterswanson87
- Date:
- Tue Nov 18 18:49:19 2014 +0000
- Revision:
- 0:ecac7a6076f0
yup
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
peterswanson87 | 0:ecac7a6076f0 | 1 | #ifndef H3LIS331_H |
peterswanson87 | 0:ecac7a6076f0 | 2 | #define H3LIS331_H |
peterswanson87 | 0:ecac7a6076f0 | 3 | |
peterswanson87 | 0:ecac7a6076f0 | 4 | /** |
peterswanson87 | 0:ecac7a6076f0 | 5 | * Includes |
peterswanson87 | 0:ecac7a6076f0 | 6 | */ |
peterswanson87 | 0:ecac7a6076f0 | 7 | #include "mbed.h" |
peterswanson87 | 0:ecac7a6076f0 | 8 | |
peterswanson87 | 0:ecac7a6076f0 | 9 | /** |
peterswanson87 | 0:ecac7a6076f0 | 10 | * Defines |
peterswanson87 | 0:ecac7a6076f0 | 11 | */ |
peterswanson87 | 0:ecac7a6076f0 | 12 | #define H3LIS331_I2C_ADDRESS 0x18 //7-bit address. |
peterswanson87 | 0:ecac7a6076f0 | 13 | |
peterswanson87 | 0:ecac7a6076f0 | 14 | //----------- |
peterswanson87 | 0:ecac7a6076f0 | 15 | // Registers |
peterswanson87 | 0:ecac7a6076f0 | 16 | //----------- |
peterswanson87 | 0:ecac7a6076f0 | 17 | #define WHO_AM_I_REG_H3LIS331 0x0F |
peterswanson87 | 0:ecac7a6076f0 | 18 | #define ACCEL_XOUT_H_REG 0x29 |
peterswanson87 | 0:ecac7a6076f0 | 19 | #define ACCEL_XOUT_L_REG 0x28 |
peterswanson87 | 0:ecac7a6076f0 | 20 | #define ACCEL_YOUT_H_REG 0x2B |
peterswanson87 | 0:ecac7a6076f0 | 21 | #define ACCEL_YOUT_L_REG 0x2A |
peterswanson87 | 0:ecac7a6076f0 | 22 | #define ACCEL_ZOUT_H_REG 0x2D |
peterswanson87 | 0:ecac7a6076f0 | 23 | #define ACCEL_ZOUT_L_REG 0x2C |
peterswanson87 | 0:ecac7a6076f0 | 24 | |
peterswanson87 | 0:ecac7a6076f0 | 25 | |
peterswanson87 | 0:ecac7a6076f0 | 26 | |
peterswanson87 | 0:ecac7a6076f0 | 27 | #define CTRL_REG_1 0x20 |
peterswanson87 | 0:ecac7a6076f0 | 28 | #define CTRL_REG_2 0x21 |
peterswanson87 | 0:ecac7a6076f0 | 29 | #define CTRL_REG_3 0x22 |
peterswanson87 | 0:ecac7a6076f0 | 30 | #define CTRL_REG_4 0x23 |
peterswanson87 | 0:ecac7a6076f0 | 31 | #define CTRL_REG_5 0x24 |
peterswanson87 | 0:ecac7a6076f0 | 32 | |
peterswanson87 | 0:ecac7a6076f0 | 33 | #define STATUS_REG 0x27 |
peterswanson87 | 0:ecac7a6076f0 | 34 | |
peterswanson87 | 0:ecac7a6076f0 | 35 | #define INT1_CFG 0x30 |
peterswanson87 | 0:ecac7a6076f0 | 36 | #define INT1_SRC 0x31 |
peterswanson87 | 0:ecac7a6076f0 | 37 | #define INT1_THS 0x32 |
peterswanson87 | 0:ecac7a6076f0 | 38 | #define INT1_DURATION 0x33 |
peterswanson87 | 0:ecac7a6076f0 | 39 | #define INT2_CFG 0x34 |
peterswanson87 | 0:ecac7a6076f0 | 40 | #define INT2_SRC 0x35 |
peterswanson87 | 0:ecac7a6076f0 | 41 | #define INT2_THS 0x36 |
peterswanson87 | 0:ecac7a6076f0 | 42 | #define INT2_DURATION 0x37 |
peterswanson87 | 0:ecac7a6076f0 | 43 | |
peterswanson87 | 0:ecac7a6076f0 | 44 | //------------------------------ |
peterswanson87 | 0:ecac7a6076f0 | 45 | // Power Mode and Output Data Rates |
peterswanson87 | 0:ecac7a6076f0 | 46 | //------------------------------ |
peterswanson87 | 0:ecac7a6076f0 | 47 | #define POWER_DOWN 0x00 |
peterswanson87 | 0:ecac7a6076f0 | 48 | #define NORMAL_50HZ 0x27 |
peterswanson87 | 0:ecac7a6076f0 | 49 | #define NORMAL_100HZ 0x2F |
peterswanson87 | 0:ecac7a6076f0 | 50 | #define NORMAL_400HZ 0x37 |
peterswanson87 | 0:ecac7a6076f0 | 51 | #define NORMAL_1000HZ 0x3F |
peterswanson87 | 0:ecac7a6076f0 | 52 | #define LOW_POWER_0_5HZ 0x47 |
peterswanson87 | 0:ecac7a6076f0 | 53 | #define LOW_POWER_1HZ 0x67 |
peterswanson87 | 0:ecac7a6076f0 | 54 | #define LOW_POWER_2HZ 0x87 |
peterswanson87 | 0:ecac7a6076f0 | 55 | #define LOW_POWER_5HZ 0xA7 |
peterswanson87 | 0:ecac7a6076f0 | 56 | #define LOW_POWER_10HZ 0xC7 |
peterswanson87 | 0:ecac7a6076f0 | 57 | |
peterswanson87 | 0:ecac7a6076f0 | 58 | /** |
peterswanson87 | 0:ecac7a6076f0 | 59 | * H3LIS331 triple axis digital accelerometer. |
peterswanson87 | 0:ecac7a6076f0 | 60 | */ |
peterswanson87 | 0:ecac7a6076f0 | 61 | class H3LIS331 { |
peterswanson87 | 0:ecac7a6076f0 | 62 | |
peterswanson87 | 0:ecac7a6076f0 | 63 | public: |
peterswanson87 | 0:ecac7a6076f0 | 64 | |
peterswanson87 | 0:ecac7a6076f0 | 65 | /** |
peterswanson87 | 0:ecac7a6076f0 | 66 | * Constructor. |
peterswanson87 | 0:ecac7a6076f0 | 67 | * |
peterswanson87 | 0:ecac7a6076f0 | 68 | * Sets FS_SEL to 0x03 for proper opertaion. |
peterswanson87 | 0:ecac7a6076f0 | 69 | * |
peterswanson87 | 0:ecac7a6076f0 | 70 | * @param sda - mbed pin to use for the SDA I2C line. |
peterswanson87 | 0:ecac7a6076f0 | 71 | * @param scl - mbed pin to use for the SCL I2C line. |
peterswanson87 | 0:ecac7a6076f0 | 72 | */ |
peterswanson87 | 0:ecac7a6076f0 | 73 | H3LIS331(PinName sda, PinName scl); |
peterswanson87 | 0:ecac7a6076f0 | 74 | |
peterswanson87 | 0:ecac7a6076f0 | 75 | /** |
peterswanson87 | 0:ecac7a6076f0 | 76 | * Get the identity of the device. |
peterswanson87 | 0:ecac7a6076f0 | 77 | * |
peterswanson87 | 0:ecac7a6076f0 | 78 | * @return The contents of the Who Am I register which contains the I2C |
peterswanson87 | 0:ecac7a6076f0 | 79 | * address of the device. |
peterswanson87 | 0:ecac7a6076f0 | 80 | */ |
peterswanson87 | 0:ecac7a6076f0 | 81 | char getWhoAmI(void); |
peterswanson87 | 0:ecac7a6076f0 | 82 | |
peterswanson87 | 0:ecac7a6076f0 | 83 | |
peterswanson87 | 0:ecac7a6076f0 | 84 | |
peterswanson87 | 0:ecac7a6076f0 | 85 | |
peterswanson87 | 0:ecac7a6076f0 | 86 | |
peterswanson87 | 0:ecac7a6076f0 | 87 | |
peterswanson87 | 0:ecac7a6076f0 | 88 | |
peterswanson87 | 0:ecac7a6076f0 | 89 | |
peterswanson87 | 0:ecac7a6076f0 | 90 | |
peterswanson87 | 0:ecac7a6076f0 | 91 | /** |
peterswanson87 | 0:ecac7a6076f0 | 92 | * Set the power mode (power down, low power, normal mode) |
peterswanson87 | 0:ecac7a6076f0 | 93 | * |
peterswanson87 | 0:ecac7a6076f0 | 94 | * |
peterswanson87 | 0:ecac7a6076f0 | 95 | * @param |
peterswanson87 | 0:ecac7a6076f0 | 96 | * |
peterswanson87 | 0:ecac7a6076f0 | 97 | * Power Mode | Output Data Rate (Hz) | Low-pass Filter Cut off (Hz) | #define |
peterswanson87 | 0:ecac7a6076f0 | 98 | * -------------------------------------------------------------------------------- |
peterswanson87 | 0:ecac7a6076f0 | 99 | * Power-down | -- | -- | POWER_DOWN |
peterswanson87 | 0:ecac7a6076f0 | 100 | * Normal | 50 | 37 | NORMAL_50HZ |
peterswanson87 | 0:ecac7a6076f0 | 101 | * Normal | 100 | 74 | NORMAL_100HZ |
peterswanson87 | 0:ecac7a6076f0 | 102 | * Normal | 400 | 292 | NORMAL_400HZ |
peterswanson87 | 0:ecac7a6076f0 | 103 | * Normal | 1000 | 780 | NORMAL_1000HZ |
peterswanson87 | 0:ecac7a6076f0 | 104 | * Low-power | 0.5 | -- | LOW_POWER_0_5HZ |
peterswanson87 | 0:ecac7a6076f0 | 105 | * Low-power | 1 | -- | LOW_POWER_1HZ |
peterswanson87 | 0:ecac7a6076f0 | 106 | * Low-power | 2 | -- | LOW_POWER_2HZ |
peterswanson87 | 0:ecac7a6076f0 | 107 | * Low-power | 5 | -- | LOW_POWER_5HZ |
peterswanson87 | 0:ecac7a6076f0 | 108 | * Low-power | 10 | -- | LOW_POWER_10HZ |
peterswanson87 | 0:ecac7a6076f0 | 109 | */ |
peterswanson87 | 0:ecac7a6076f0 | 110 | |
peterswanson87 | 0:ecac7a6076f0 | 111 | void setPowerMode(char power_mode); |
peterswanson87 | 0:ecac7a6076f0 | 112 | |
peterswanson87 | 0:ecac7a6076f0 | 113 | |
peterswanson87 | 0:ecac7a6076f0 | 114 | |
peterswanson87 | 0:ecac7a6076f0 | 115 | /** |
peterswanson87 | 0:ecac7a6076f0 | 116 | * Get the current power mode |
peterswanson87 | 0:ecac7a6076f0 | 117 | * |
peterswanson87 | 0:ecac7a6076f0 | 118 | * @return |
peterswanson87 | 0:ecac7a6076f0 | 119 | */ |
peterswanson87 | 0:ecac7a6076f0 | 120 | char getPowerMode(void); |
peterswanson87 | 0:ecac7a6076f0 | 121 | |
peterswanson87 | 0:ecac7a6076f0 | 122 | |
peterswanson87 | 0:ecac7a6076f0 | 123 | char getInterruptConfiguration(void); |
peterswanson87 | 0:ecac7a6076f0 | 124 | |
peterswanson87 | 0:ecac7a6076f0 | 125 | /** |
peterswanson87 | 0:ecac7a6076f0 | 126 | * Set the interrupt configuration. |
peterswanson87 | 0:ecac7a6076f0 | 127 | * |
peterswanson87 | 0:ecac7a6076f0 | 128 | * See datasheet for configuration byte details. |
peterswanson87 | 0:ecac7a6076f0 | 129 | * |
peterswanson87 | 0:ecac7a6076f0 | 130 | * 7 6 5 4 |
peterswanson87 | 0:ecac7a6076f0 | 131 | * +-------+-------+------+--------+ |
peterswanson87 | 0:ecac7a6076f0 | 132 | * | IHL | PP_OD | LIR2 | I2_CFG | |
peterswanson87 | 0:ecac7a6076f0 | 133 | * +-------+-------+------+--------+ |
peterswanson87 | 0:ecac7a6076f0 | 134 | * |
peterswanson87 | 0:ecac7a6076f0 | 135 | * 3 2 1 0 |
peterswanson87 | 0:ecac7a6076f0 | 136 | * +---------+------+---------+---------+ |
peterswanson87 | 0:ecac7a6076f0 | 137 | * | I2_CFG0 | LIR1 | I1_CFG1 | I1-CFG0 | |
peterswanson87 | 0:ecac7a6076f0 | 138 | * +---------+------+---------+---------+ |
peterswanson87 | 0:ecac7a6076f0 | 139 | * |
peterswanson87 | 0:ecac7a6076f0 | 140 | * IHL Interrupt active high or low. 0:active high; 1:active low (default:0) |
peterswanson87 | 0:ecac7a6076f0 | 141 | * PP_OD Push-pull/Open drain selection on interrupt pad. 0:push-pull; 1:open drain (default:0) |
peterswanson87 | 0:ecac7a6076f0 | 142 | * LIR2 Latch interupt request on INT2_SRC register, with INT2_SRC register cleared by reading INT2_SRC itself |
peterswanson87 | 0:ecac7a6076f0 | 143 | * 0: irq not latched; 1:irq latched (default:0) |
peterswanson87 | 0:ecac7a6076f0 | 144 | * I2_CFG1, I2_CFG0 See datasheet table |
peterswanson87 | 0:ecac7a6076f0 | 145 | * LIR1 Latch interupt request on INT1_SRC register, with INT1_SRC register cleared by reading INT1_SRC itself |
peterswanson87 | 0:ecac7a6076f0 | 146 | * 0: irq not latched; 1:irq latched (default:0) |
peterswanson87 | 0:ecac7a6076f0 | 147 | * I1_CFG1, I1_CFG0 See datasheet table |
peterswanson87 | 0:ecac7a6076f0 | 148 | * |
peterswanson87 | 0:ecac7a6076f0 | 149 | * @param config Configuration byte to write to INT_CFG register. |
peterswanson87 | 0:ecac7a6076f0 | 150 | */ |
peterswanson87 | 0:ecac7a6076f0 | 151 | |
peterswanson87 | 0:ecac7a6076f0 | 152 | |
peterswanson87 | 0:ecac7a6076f0 | 153 | // void setInterruptConfiguration(char config); |
peterswanson87 | 0:ecac7a6076f0 | 154 | |
peterswanson87 | 0:ecac7a6076f0 | 155 | /** |
peterswanson87 | 0:ecac7a6076f0 | 156 | * Check the status register |
peterswanson87 | 0:ecac7a6076f0 | 157 | * |
peterswanson87 | 0:ecac7a6076f0 | 158 | * @return |
peterswanson87 | 0:ecac7a6076f0 | 159 | * |
peterswanson87 | 0:ecac7a6076f0 | 160 | */ |
peterswanson87 | 0:ecac7a6076f0 | 161 | |
peterswanson87 | 0:ecac7a6076f0 | 162 | |
peterswanson87 | 0:ecac7a6076f0 | 163 | /** |
peterswanson87 | 0:ecac7a6076f0 | 164 | * Set the Full Scale Range to +/- 400g's. |
peterswanson87 | 0:ecac7a6076f0 | 165 | * |
peterswanson87 | 0:ecac7a6076f0 | 166 | */ |
peterswanson87 | 0:ecac7a6076f0 | 167 | void setFullScaleRange400g(void); |
peterswanson87 | 0:ecac7a6076f0 | 168 | |
peterswanson87 | 0:ecac7a6076f0 | 169 | /** |
peterswanson87 | 0:ecac7a6076f0 | 170 | * Set the Full Scale Range to +/- 200g's. |
peterswanson87 | 0:ecac7a6076f0 | 171 | * |
peterswanson87 | 0:ecac7a6076f0 | 172 | */ |
peterswanson87 | 0:ecac7a6076f0 | 173 | void setFullScaleRange200g(void); |
peterswanson87 | 0:ecac7a6076f0 | 174 | |
peterswanson87 | 0:ecac7a6076f0 | 175 | /** |
peterswanson87 | 0:ecac7a6076f0 | 176 | * Set the Full Scale Range to +/- 100g's. |
peterswanson87 | 0:ecac7a6076f0 | 177 | * |
peterswanson87 | 0:ecac7a6076f0 | 178 | */ |
peterswanson87 | 0:ecac7a6076f0 | 179 | void setFullScaleRange100g(void); |
peterswanson87 | 0:ecac7a6076f0 | 180 | |
peterswanson87 | 0:ecac7a6076f0 | 181 | |
peterswanson87 | 0:ecac7a6076f0 | 182 | char getAccelStatus(void); |
peterswanson87 | 0:ecac7a6076f0 | 183 | |
peterswanson87 | 0:ecac7a6076f0 | 184 | |
peterswanson87 | 0:ecac7a6076f0 | 185 | |
peterswanson87 | 0:ecac7a6076f0 | 186 | |
peterswanson87 | 0:ecac7a6076f0 | 187 | /** |
peterswanson87 | 0:ecac7a6076f0 | 188 | * Get the output for the x-axis accelerometer. |
peterswanson87 | 0:ecac7a6076f0 | 189 | * |
peterswanson87 | 0:ecac7a6076f0 | 190 | * @return The output on the x-axis in engineering units (g's). |
peterswanson87 | 0:ecac7a6076f0 | 191 | */ |
peterswanson87 | 0:ecac7a6076f0 | 192 | float getAccelX(void); |
peterswanson87 | 0:ecac7a6076f0 | 193 | |
peterswanson87 | 0:ecac7a6076f0 | 194 | /** |
peterswanson87 | 0:ecac7a6076f0 | 195 | * Get the output for the y-axis accelerometer. |
peterswanson87 | 0:ecac7a6076f0 | 196 | * |
peterswanson87 | 0:ecac7a6076f0 | 197 | * @return The output on the y-axis in engineering units (g's). |
peterswanson87 | 0:ecac7a6076f0 | 198 | */ |
peterswanson87 | 0:ecac7a6076f0 | 199 | float getAccelY(void); |
peterswanson87 | 0:ecac7a6076f0 | 200 | |
peterswanson87 | 0:ecac7a6076f0 | 201 | /** |
peterswanson87 | 0:ecac7a6076f0 | 202 | * Get the output on the z-axis accelerometer. |
peterswanson87 | 0:ecac7a6076f0 | 203 | * |
peterswanson87 | 0:ecac7a6076f0 | 204 | * @return The output on the z-axis in engineering units (g's). |
peterswanson87 | 0:ecac7a6076f0 | 205 | */ |
peterswanson87 | 0:ecac7a6076f0 | 206 | float getAccelZ(void); |
peterswanson87 | 0:ecac7a6076f0 | 207 | |
peterswanson87 | 0:ecac7a6076f0 | 208 | |
peterswanson87 | 0:ecac7a6076f0 | 209 | private: |
peterswanson87 | 0:ecac7a6076f0 | 210 | |
peterswanson87 | 0:ecac7a6076f0 | 211 | float scaling_factor; |
peterswanson87 | 0:ecac7a6076f0 | 212 | int current_range; |
peterswanson87 | 0:ecac7a6076f0 | 213 | |
peterswanson87 | 0:ecac7a6076f0 | 214 | I2C i2c_; |
peterswanson87 | 0:ecac7a6076f0 | 215 | |
peterswanson87 | 0:ecac7a6076f0 | 216 | }; |
peterswanson87 | 0:ecac7a6076f0 | 217 | |
peterswanson87 | 0:ecac7a6076f0 | 218 | #endif /* H3LIS331_H */ |
peterswanson87 | 0:ecac7a6076f0 | 219 |