IMU
IMU_I2C.h@0:7b3acf8e2a6f, 2013-07-05 (annotated)
- Committer:
- YSB
- Date:
- Fri Jul 05 04:16:49 2013 +0000
- Revision:
- 0:7b3acf8e2a6f
ADXL345/ITG3200
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
YSB | 0:7b3acf8e2a6f | 1 | #ifndef IMU_I2C_H |
YSB | 0:7b3acf8e2a6f | 2 | #define IMU_I2C_H |
YSB | 0:7b3acf8e2a6f | 3 | |
YSB | 0:7b3acf8e2a6f | 4 | #include "mbed.h" |
YSB | 0:7b3acf8e2a6f | 5 | |
YSB | 0:7b3acf8e2a6f | 6 | /////////////ADXL345/////////////////////////////////////////////// |
YSB | 0:7b3acf8e2a6f | 7 | //Registers. |
YSB | 0:7b3acf8e2a6f | 8 | #define ADXL345_DEVID_REG 0x00 |
YSB | 0:7b3acf8e2a6f | 9 | #define ADXL345_THRESH_TAP_REG 0x1D |
YSB | 0:7b3acf8e2a6f | 10 | #define ADXL345_OFSX_REG 0x1E |
YSB | 0:7b3acf8e2a6f | 11 | #define ADXL345_OFSY_REG 0x1F |
YSB | 0:7b3acf8e2a6f | 12 | #define ADXL345_OFSZ_REG 0x20 |
YSB | 0:7b3acf8e2a6f | 13 | #define ADXL345_DUR_REG 0x21 |
YSB | 0:7b3acf8e2a6f | 14 | #define ADXL345_LATENT_REG 0x22 |
YSB | 0:7b3acf8e2a6f | 15 | #define ADXL345_WINDOW_REG 0x23 |
YSB | 0:7b3acf8e2a6f | 16 | #define ADXL345_THRESH_ACT_REG 0x24 |
YSB | 0:7b3acf8e2a6f | 17 | #define ADXL345_THRESH_INACT_REG 0x25 |
YSB | 0:7b3acf8e2a6f | 18 | #define ADXL345_TIME_INACT_REG 0x26 |
YSB | 0:7b3acf8e2a6f | 19 | #define ADXL345_ACT_INACT_CTL_REG 0x27 |
YSB | 0:7b3acf8e2a6f | 20 | #define ADXL345_THRESH_FF_REG 0x28 |
YSB | 0:7b3acf8e2a6f | 21 | #define ADXL345_TIME_FF_REG 0x29 |
YSB | 0:7b3acf8e2a6f | 22 | #define ADXL345_TAP_AXES_REG 0x2A |
YSB | 0:7b3acf8e2a6f | 23 | #define ADXL345_ACT_TAP_STATUS_REG 0x2B |
YSB | 0:7b3acf8e2a6f | 24 | #define ADXL345_BW_RATE_REG 0x2C |
YSB | 0:7b3acf8e2a6f | 25 | #define ADXL345_POWER_CTL_REG 0x2D |
YSB | 0:7b3acf8e2a6f | 26 | #define ADXL345_INT_ENABLE_REG 0x2E |
YSB | 0:7b3acf8e2a6f | 27 | #define ADXL345_INT_MAP_REG 0x2F |
YSB | 0:7b3acf8e2a6f | 28 | #define ADXL345_INT_SOURCE_REG 0x30 |
YSB | 0:7b3acf8e2a6f | 29 | #define ADXL345_DATA_FORMAT_REG 0x31 |
YSB | 0:7b3acf8e2a6f | 30 | #define ADXL345_DATAX0_REG 0x32 |
YSB | 0:7b3acf8e2a6f | 31 | #define ADXL345_DATAX1_REG 0x33 |
YSB | 0:7b3acf8e2a6f | 32 | #define ADXL345_DATAY0_REG 0x34 |
YSB | 0:7b3acf8e2a6f | 33 | #define ADXL345_DATAY1_REG 0x35 |
YSB | 0:7b3acf8e2a6f | 34 | #define ADXL345_DATAZ0_REG 0x36 |
YSB | 0:7b3acf8e2a6f | 35 | #define ADXL345_DATAZ1_REG 0x37 |
YSB | 0:7b3acf8e2a6f | 36 | #define ADXL345_FIFO_CTL 0x38 |
YSB | 0:7b3acf8e2a6f | 37 | #define ADXL345_FIFO_STATUS 0x39 |
YSB | 0:7b3acf8e2a6f | 38 | |
YSB | 0:7b3acf8e2a6f | 39 | //Data rate codes. |
YSB | 0:7b3acf8e2a6f | 40 | #define ADXL345_3200HZ 0x0F |
YSB | 0:7b3acf8e2a6f | 41 | #define ADXL345_1600HZ 0x0E |
YSB | 0:7b3acf8e2a6f | 42 | #define ADXL345_800HZ 0x0D |
YSB | 0:7b3acf8e2a6f | 43 | #define ADXL345_400HZ 0x0C |
YSB | 0:7b3acf8e2a6f | 44 | #define ADXL345_200HZ 0x0B |
YSB | 0:7b3acf8e2a6f | 45 | #define ADXL345_100HZ 0x0A |
YSB | 0:7b3acf8e2a6f | 46 | #define ADXL345_50HZ 0x09 |
YSB | 0:7b3acf8e2a6f | 47 | #define ADXL345_25HZ 0x08 |
YSB | 0:7b3acf8e2a6f | 48 | #define ADXL345_12HZ5 0x07 |
YSB | 0:7b3acf8e2a6f | 49 | #define ADXL345_6HZ25 0x06 |
YSB | 0:7b3acf8e2a6f | 50 | |
YSB | 0:7b3acf8e2a6f | 51 | // read or write bytes |
YSB | 0:7b3acf8e2a6f | 52 | #define ADXL345_I2C_READ 0xA7 |
YSB | 0:7b3acf8e2a6f | 53 | #define ADXL345_I2C_WRITE 0xA6 |
YSB | 0:7b3acf8e2a6f | 54 | #define ADXL345_I2C_ADDRESS 0x53 //the ADXL345 7-bit address is 0x53 when ALT ADDRESS is low as it is on the sparkfun chip: when ALT ADDRESS is high the address is 0x1D |
YSB | 0:7b3acf8e2a6f | 55 | |
YSB | 0:7b3acf8e2a6f | 56 | /////////////when ALT ADDRESS pin is high: |
YSB | 0:7b3acf8e2a6f | 57 | //#define ADXL345_I2C_READ 0x3B |
YSB | 0:7b3acf8e2a6f | 58 | //#define ADXL345_I2C_WRITE 0x3A |
YSB | 0:7b3acf8e2a6f | 59 | //#define ADXL345_I2C_ADDRESS 0x1D |
YSB | 0:7b3acf8e2a6f | 60 | |
YSB | 0:7b3acf8e2a6f | 61 | #define ADXL345_X 0x00 |
YSB | 0:7b3acf8e2a6f | 62 | #define ADXL345_Y 0x01 |
YSB | 0:7b3acf8e2a6f | 63 | #define ADXL345_Z 0x02 |
YSB | 0:7b3acf8e2a6f | 64 | |
YSB | 0:7b3acf8e2a6f | 65 | // modes |
YSB | 0:7b3acf8e2a6f | 66 | #define MeasurementMode 0x08 |
YSB | 0:7b3acf8e2a6f | 67 | |
YSB | 0:7b3acf8e2a6f | 68 | ////////////////L3G4200D///////////////////////////////////////////////////////////////// |
YSB | 0:7b3acf8e2a6f | 69 | // register addresses |
YSB | 0:7b3acf8e2a6f | 70 | #define L3G4200D_WHO_AM_I 0x0F |
YSB | 0:7b3acf8e2a6f | 71 | |
YSB | 0:7b3acf8e2a6f | 72 | #define L3G4200D_CTRL_REG1 0x20 |
YSB | 0:7b3acf8e2a6f | 73 | #define L3G4200D_CTRL_REG2 0x21 |
YSB | 0:7b3acf8e2a6f | 74 | #define L3G4200D_CTRL_REG3 0x22 |
YSB | 0:7b3acf8e2a6f | 75 | #define L3G4200D_CTRL_REG4 0x23 |
YSB | 0:7b3acf8e2a6f | 76 | #define L3G4200D_CTRL_REG5 0x24 |
YSB | 0:7b3acf8e2a6f | 77 | #define L3G4200D_REFERENCE 0x25 |
YSB | 0:7b3acf8e2a6f | 78 | #define L3G4200D_OUT_TEMP 0x26 |
YSB | 0:7b3acf8e2a6f | 79 | #define L3G4200D_STATUS_REG 0x27 |
YSB | 0:7b3acf8e2a6f | 80 | |
YSB | 0:7b3acf8e2a6f | 81 | #define L3G4200D_OUT_X_L 0x28 |
YSB | 0:7b3acf8e2a6f | 82 | #define L3G4200D_OUT_X_H 0x29 |
YSB | 0:7b3acf8e2a6f | 83 | #define L3G4200D_OUT_Y_L 0x2A |
YSB | 0:7b3acf8e2a6f | 84 | #define L3G4200D_OUT_Y_H 0x2B |
YSB | 0:7b3acf8e2a6f | 85 | #define L3G4200D_OUT_Z_L 0x2C |
YSB | 0:7b3acf8e2a6f | 86 | #define L3G4200D_OUT_Z_H 0x2D |
YSB | 0:7b3acf8e2a6f | 87 | |
YSB | 0:7b3acf8e2a6f | 88 | #define L3G4200D_FIFO_CTRL_REG 0x2E |
YSB | 0:7b3acf8e2a6f | 89 | #define L3G4200D_FIFO_SRC_REG 0x2F |
YSB | 0:7b3acf8e2a6f | 90 | |
YSB | 0:7b3acf8e2a6f | 91 | #define L3G4200D_INT1_CFG 0x30 |
YSB | 0:7b3acf8e2a6f | 92 | #define L3G4200D_INT1_SRC 0x31 |
YSB | 0:7b3acf8e2a6f | 93 | #define L3G4200D_INT1_THS_XH 0x32 |
YSB | 0:7b3acf8e2a6f | 94 | #define L3G4200D_INT1_THS_XL 0x33 |
YSB | 0:7b3acf8e2a6f | 95 | #define L3G4200D_INT1_THS_YH 0x34 |
YSB | 0:7b3acf8e2a6f | 96 | #define L3G4200D_INT1_THS_YL 0x35 |
YSB | 0:7b3acf8e2a6f | 97 | #define L3G4200D_INT1_THS_ZH 0x36 |
YSB | 0:7b3acf8e2a6f | 98 | #define L3G4200D_INT1_THS_ZL 0x37 |
YSB | 0:7b3acf8e2a6f | 99 | #define L3G4200D_INT1_DURATION 0x38 |
YSB | 0:7b3acf8e2a6f | 100 | |
YSB | 0:7b3acf8e2a6f | 101 | ///////////////ITG3200///////////////////////////////////////////////////// |
YSB | 0:7b3acf8e2a6f | 102 | #define ITG3200_I2C_ADDRESS 0x68 //7-bit address. |
YSB | 0:7b3acf8e2a6f | 103 | |
YSB | 0:7b3acf8e2a6f | 104 | #define WHO_AM_I_REG 0x00 |
YSB | 0:7b3acf8e2a6f | 105 | #define SMPLRT_DIV_REG 0x15 |
YSB | 0:7b3acf8e2a6f | 106 | #define DLPF_FS_REG 0x16 |
YSB | 0:7b3acf8e2a6f | 107 | #define INT_CFG_REG 0x17 |
YSB | 0:7b3acf8e2a6f | 108 | #define INT_STATUS 0x1A |
YSB | 0:7b3acf8e2a6f | 109 | #define TEMP_OUT_H_REG 0x1B |
YSB | 0:7b3acf8e2a6f | 110 | #define TEMP_OUT_L_REG 0x1C |
YSB | 0:7b3acf8e2a6f | 111 | #define GYRO_XOUT_H_REG 0x1D |
YSB | 0:7b3acf8e2a6f | 112 | #define GYRO_XOUT_L_REG 0x1E |
YSB | 0:7b3acf8e2a6f | 113 | #define GYRO_YOUT_H_REG 0x1F |
YSB | 0:7b3acf8e2a6f | 114 | #define GYRO_YOUT_L_REG 0x20 |
YSB | 0:7b3acf8e2a6f | 115 | #define GYRO_ZOUT_H_REG 0x21 |
YSB | 0:7b3acf8e2a6f | 116 | #define GYRO_ZOUT_L_REG 0x22 |
YSB | 0:7b3acf8e2a6f | 117 | #define PWR_MGM_REG 0x3E |
YSB | 0:7b3acf8e2a6f | 118 | |
YSB | 0:7b3acf8e2a6f | 119 | //---------------------------- |
YSB | 0:7b3acf8e2a6f | 120 | // Low Pass Filter Bandwidths |
YSB | 0:7b3acf8e2a6f | 121 | //---------------------------- |
YSB | 0:7b3acf8e2a6f | 122 | #define LPFBW_256HZ 0x00 |
YSB | 0:7b3acf8e2a6f | 123 | #define LPFBW_188HZ 0x01 |
YSB | 0:7b3acf8e2a6f | 124 | #define LPFBW_98HZ 0x02 |
YSB | 0:7b3acf8e2a6f | 125 | #define LPFBW_42HZ 0x03 |
YSB | 0:7b3acf8e2a6f | 126 | #define LPFBW_20HZ 0x04 |
YSB | 0:7b3acf8e2a6f | 127 | #define LPFBW_10HZ 0x05 |
YSB | 0:7b3acf8e2a6f | 128 | #define LPFBW_5HZ 0x06 |
YSB | 0:7b3acf8e2a6f | 129 | |
YSB | 0:7b3acf8e2a6f | 130 | typedef char byte; |
YSB | 0:7b3acf8e2a6f | 131 | |
YSB | 0:7b3acf8e2a6f | 132 | ///////////////class/////////////////////////////////////////////////////// |
YSB | 0:7b3acf8e2a6f | 133 | |
YSB | 0:7b3acf8e2a6f | 134 | class IMU_I2C { |
YSB | 0:7b3acf8e2a6f | 135 | |
YSB | 0:7b3acf8e2a6f | 136 | public: |
YSB | 0:7b3acf8e2a6f | 137 | |
YSB | 0:7b3acf8e2a6f | 138 | /** |
YSB | 0:7b3acf8e2a6f | 139 | * Constructor. |
YSB | 0:7b3acf8e2a6f | 140 | */ |
YSB | 0:7b3acf8e2a6f | 141 | IMU_I2C(PinName sda, PinName scl); |
YSB | 0:7b3acf8e2a6f | 142 | |
YSB | 0:7b3acf8e2a6f | 143 | //////ADXL345_function/////////////////////////////////////////////////// |
YSB | 0:7b3acf8e2a6f | 144 | void getOutput(int* readings); |
YSB | 0:7b3acf8e2a6f | 145 | char getDeviceID(void); |
YSB | 0:7b3acf8e2a6f | 146 | int setPowerMode(char mode); |
YSB | 0:7b3acf8e2a6f | 147 | int setPowerControl(char settings); |
YSB | 0:7b3acf8e2a6f | 148 | char getPowerControl(void); |
YSB | 0:7b3acf8e2a6f | 149 | char getDataFormatControl(void); |
YSB | 0:7b3acf8e2a6f | 150 | int setDataFormatControl(char settings); |
YSB | 0:7b3acf8e2a6f | 151 | int setDataRate(char rate); |
YSB | 0:7b3acf8e2a6f | 152 | char getOffset(char axis); |
YSB | 0:7b3acf8e2a6f | 153 | int setOffset(char axis, char offset); |
YSB | 0:7b3acf8e2a6f | 154 | char getFifoControl(void); |
YSB | 0:7b3acf8e2a6f | 155 | int setFifoControl(char settings); |
YSB | 0:7b3acf8e2a6f | 156 | char getFifoStatus(void); |
YSB | 0:7b3acf8e2a6f | 157 | char getTapThreshold(void); |
YSB | 0:7b3acf8e2a6f | 158 | int setTapThreshold(char threshold); |
YSB | 0:7b3acf8e2a6f | 159 | float getTapDuration(void); |
YSB | 0:7b3acf8e2a6f | 160 | int setTapDuration(short int duration_us); |
YSB | 0:7b3acf8e2a6f | 161 | float getTapLatency(void); |
YSB | 0:7b3acf8e2a6f | 162 | int setTapLatency(short int latency_ms); |
YSB | 0:7b3acf8e2a6f | 163 | float getWindowTime(void); |
YSB | 0:7b3acf8e2a6f | 164 | int setWindowTime(short int window_ms); |
YSB | 0:7b3acf8e2a6f | 165 | char getActivityThreshold(void); |
YSB | 0:7b3acf8e2a6f | 166 | int setActivityThreshold(char threshold); |
YSB | 0:7b3acf8e2a6f | 167 | char getInactivityThreshold(void); |
YSB | 0:7b3acf8e2a6f | 168 | int setInactivityThreshold(char threshold); |
YSB | 0:7b3acf8e2a6f | 169 | char getTimeInactivity(void); |
YSB | 0:7b3acf8e2a6f | 170 | int setTimeInactivity(char timeInactivity); |
YSB | 0:7b3acf8e2a6f | 171 | char getActivityInactivityControl(void); |
YSB | 0:7b3acf8e2a6f | 172 | int setActivityInactivityControl(char settings); |
YSB | 0:7b3acf8e2a6f | 173 | char getFreefallThreshold(void); |
YSB | 0:7b3acf8e2a6f | 174 | int setFreefallThreshold(char threshold); |
YSB | 0:7b3acf8e2a6f | 175 | char getFreefallTime(void); |
YSB | 0:7b3acf8e2a6f | 176 | int setFreefallTime(short int freefallTime_ms); |
YSB | 0:7b3acf8e2a6f | 177 | char getTapAxisControl(void); |
YSB | 0:7b3acf8e2a6f | 178 | int setTapAxisControl(char settings); |
YSB | 0:7b3acf8e2a6f | 179 | char getTapSource(void); |
YSB | 0:7b3acf8e2a6f | 180 | char getInterruptEnableControl(void); |
YSB | 0:7b3acf8e2a6f | 181 | int setInterruptEnableControl(char settings); |
YSB | 0:7b3acf8e2a6f | 182 | char getInterruptMappingControl(void); |
YSB | 0:7b3acf8e2a6f | 183 | int setInterruptMappingControl(char settings); |
YSB | 0:7b3acf8e2a6f | 184 | char getInterruptSource(void); |
YSB | 0:7b3acf8e2a6f | 185 | |
YSB | 0:7b3acf8e2a6f | 186 | ///////////////L3G4200D_function/////////////////////////////////////////////// |
YSB | 0:7b3acf8e2a6f | 187 | void read(int g[3]); |
YSB | 0:7b3acf8e2a6f | 188 | |
YSB | 0:7b3acf8e2a6f | 189 | ///////////////ITG3200_function//////////////////////////////////////////////// |
YSB | 0:7b3acf8e2a6f | 190 | char getWhoAmI(void); |
YSB | 0:7b3acf8e2a6f | 191 | void setWhoAmI(char address); |
YSB | 0:7b3acf8e2a6f | 192 | char getSampleRateDivider(void); |
YSB | 0:7b3acf8e2a6f | 193 | void setSampleRateDivider(char divider); |
YSB | 0:7b3acf8e2a6f | 194 | int getInternalSampleRate(void); |
YSB | 0:7b3acf8e2a6f | 195 | void setLpBandwidth(char bandwidth); |
YSB | 0:7b3acf8e2a6f | 196 | char getInterruptConfiguration(void); |
YSB | 0:7b3acf8e2a6f | 197 | void setInterruptConfiguration(char config); |
YSB | 0:7b3acf8e2a6f | 198 | bool isPllReady(void); |
YSB | 0:7b3acf8e2a6f | 199 | bool isRawDataReady(void); |
YSB | 0:7b3acf8e2a6f | 200 | float getTemperature(void); |
YSB | 0:7b3acf8e2a6f | 201 | int getGyroX(void); |
YSB | 0:7b3acf8e2a6f | 202 | int getGyroY(void); |
YSB | 0:7b3acf8e2a6f | 203 | int getGyroZ(void); |
YSB | 0:7b3acf8e2a6f | 204 | char getPowerManagement(void); |
YSB | 0:7b3acf8e2a6f | 205 | void setPowerManagement(char config); |
YSB | 0:7b3acf8e2a6f | 206 | |
YSB | 0:7b3acf8e2a6f | 207 | private: |
YSB | 0:7b3acf8e2a6f | 208 | |
YSB | 0:7b3acf8e2a6f | 209 | I2C i2c_; |
YSB | 0:7b3acf8e2a6f | 210 | |
YSB | 0:7b3acf8e2a6f | 211 | ////////////ADXL345//////////////////////////////////////////////////////////// |
YSB | 0:7b3acf8e2a6f | 212 | char SingleByteRead(char address); |
YSB | 0:7b3acf8e2a6f | 213 | int SingleByteWrite(char address, char data); |
YSB | 0:7b3acf8e2a6f | 214 | void multiByteRead(char startAddress, char* ptr_output, int size); |
YSB | 0:7b3acf8e2a6f | 215 | int multiByteWrite(char startAddress, char* ptr_data, int size); |
YSB | 0:7b3acf8e2a6f | 216 | |
YSB | 0:7b3acf8e2a6f | 217 | ////////////L3G4200D/////////////////////////////////////////////////////////// |
YSB | 0:7b3acf8e2a6f | 218 | byte data[6]; |
YSB | 0:7b3acf8e2a6f | 219 | int _rates[3]; |
YSB | 0:7b3acf8e2a6f | 220 | void writeReg(byte reg, byte value); |
YSB | 0:7b3acf8e2a6f | 221 | byte readReg(byte reg); |
YSB | 0:7b3acf8e2a6f | 222 | void enableDefault(void); |
YSB | 0:7b3acf8e2a6f | 223 | |
YSB | 0:7b3acf8e2a6f | 224 | }; |
YSB | 0:7b3acf8e2a6f | 225 | |
YSB | 0:7b3acf8e2a6f | 226 | #endif |