109 lines
3.3 KiB
C++
109 lines
3.3 KiB
C++
#ifndef _ITG3200_H_
|
|
#define _ITG3200_H_
|
|
|
|
#define ITG3200_ADDRESS_AD0_LOW 0x68 // address pin low (GND), default for SparkFun IMU Digital Combo board
|
|
#define ITG3200_ADDRESS_AD0_HIGH 0x69 // address pin high (VCC), default for SparkFun ITG-3200 Breakout board
|
|
#define ITG3200_DEFAULT_ADDRESS ITG3200_ADDRESS_AD0_LOW
|
|
|
|
#define ITG3200_RA_WHO_AM_I 0x00
|
|
#define ITG3200_RA_SMPLRT_DIV 0x15
|
|
#define ITG3200_RA_DLPF_FS 0x16
|
|
#define ITG3200_RA_INT_CFG 0x17
|
|
#define ITG3200_RA_INT_STATUS 0x1A
|
|
#define ITG3200_RA_TEMP_OUT_H 0x1B
|
|
#define ITG3200_RA_TEMP_OUT_L 0x1C
|
|
#define ITG3200_RA_GYRO_XOUT_H 0x1D
|
|
#define ITG3200_RA_GYRO_XOUT_L 0x1E
|
|
#define ITG3200_RA_GYRO_YOUT_H 0x1F
|
|
#define ITG3200_RA_GYRO_YOUT_L 0x20
|
|
#define ITG3200_RA_GYRO_ZOUT_H 0x21
|
|
#define ITG3200_RA_GYRO_ZOUT_L 0x22
|
|
#define ITG3200_RA_PWR_MGM 0x3E
|
|
|
|
#define ITG3200_DEVID_BIT 6
|
|
#define ITG3200_DEVID_LENGTH 6
|
|
|
|
#define ITG3200_DF_FS_SEL_BIT 4
|
|
#define ITG3200_DF_FS_SEL_LENGTH 2
|
|
#define ITG3200_DF_DLPF_CFG_BIT 2
|
|
#define ITG3200_DF_DLPF_CFG_LENGTH 3
|
|
|
|
#define ITG3200_FULLSCALE_2000 0x03
|
|
|
|
#define ITG3200_DLPF_BW_256 0x00
|
|
#define ITG3200_DLPF_BW_188 0x01
|
|
#define ITG3200_DLPF_BW_98 0x02
|
|
#define ITG3200_DLPF_BW_42 0x03
|
|
#define ITG3200_DLPF_BW_20 0x04
|
|
#define ITG3200_DLPF_BW_10 0x05
|
|
#define ITG3200_DLPF_BW_5 0x06
|
|
|
|
#define ITG3200_INTCFG_ACTL_BIT 7
|
|
#define ITG3200_INTCFG_OPEN_BIT 6
|
|
#define ITG3200_INTCFG_LATCH_INT_EN_BIT 5
|
|
#define ITG3200_INTCFG_INT_ANYRD_2CLEAR_BIT 4
|
|
#define ITG3200_INTCFG_ITG_RDY_EN_BIT 2
|
|
#define ITG3200_INTCFG_RAW_RDY_EN_BIT 0
|
|
|
|
#define ITG3200_INTMODE_ACTIVEHIGH 0x00
|
|
#define ITG3200_INTMODE_ACTIVELOW 0x01
|
|
|
|
#define ITG3200_INTDRV_PUSHPULL 0x00
|
|
#define ITG3200_INTDRV_OPENDRAIN 0x01
|
|
|
|
#define ITG3200_INTLATCH_50USPULSE 0x00
|
|
#define ITG3200_INTLATCH_WAITCLEAR 0x01
|
|
|
|
#define ITG3200_INTCLEAR_STATUSREAD 0x00
|
|
#define ITG3200_INTCLEAR_ANYREAD 0x01
|
|
|
|
#define ITG3200_INTSTAT_ITG_RDY_BIT 2
|
|
#define ITG3200_INTSTAT_RAW_DATA_READY_BIT 0
|
|
|
|
#define ITG3200_PWR_H_RESET_BIT 7
|
|
#define ITG3200_PWR_SLEEP_BIT 6
|
|
#define ITG3200_PWR_STBY_XG_BIT 5
|
|
#define ITG3200_PWR_STBY_YG_BIT 4
|
|
#define ITG3200_PWR_STBY_ZG_BIT 3
|
|
#define ITG3200_PWR_CLK_SEL_BIT 2
|
|
#define ITG3200_PWR_CLK_SEL_LENGTH 3
|
|
|
|
#define ITG3200_CLOCK_INTERNAL 0x00
|
|
#define ITG3200_CLOCK_PLL_XGYRO 0x01
|
|
#define ITG3200_CLOCK_PLL_YGYRO 0x02
|
|
#define ITG3200_CLOCK_PLL_ZGYRO 0x03
|
|
#define ITG3200_CLOCK_PLL_EXT32K 0x04
|
|
#define ITG3200_CLOCK_PLL_EXT19M 0x05
|
|
|
|
class ITG3200 {
|
|
public:
|
|
ITG3200();
|
|
ITG3200(unsigned char address);
|
|
|
|
void initialize();
|
|
bool testConnection();
|
|
|
|
// WHO_AM_I register
|
|
unsigned char getDeviceID();
|
|
|
|
// SMPLRT_DIV register
|
|
void setRate(unsigned char rate);
|
|
|
|
// DLPF_FS register
|
|
void setFullScaleRange(unsigned char range);
|
|
void setDLPFBandwidth(unsigned char bandwidth);
|
|
|
|
// GYRO_*OUT_* registers
|
|
void getRotation(short* x, short* y, short* z);
|
|
|
|
// PWR_MGM register
|
|
void reset();
|
|
void setClockSource(unsigned char source);
|
|
|
|
private:
|
|
unsigned char devAddr;
|
|
unsigned char buffer[6];
|
|
};
|
|
|
|
#endif /* _ITG3200_H_ */
|