IMU

Dependents:   EM_Logger

Committer:
YSB
Date:
Fri Jul 05 04:16:49 2013 +0000
Revision:
0:7b3acf8e2a6f
ADXL345/ITG3200

Who changed what in which revision?

UserRevisionLine numberNew 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