Blame | Last modification | View Log | RSS feed
#define ADXL345_LOW_POWER_MODE
// Chip Address
#define ADXL345_ADDRESS (0x53) // Assumes ALT address pin low
// Register Defines
#define ADXL345_REG_DEVID (0x00) // Device ID
#define ADXL345_REG_THRESH_TAP (0x1D) // Tap threshold
#define ADXL345_REG_OFSX (0x1E) // X-axis offset
#define ADXL345_REG_OFSY (0x1F) // Y-axis offset
#define ADXL345_REG_OFSZ (0x20) // Z-axis offset
#define ADXL345_REG_DUR (0x21) // Tap duration
#define ADXL345_REG_LATENT (0x22) // Tap latency
#define ADXL345_REG_WINDOW (0x23) // Tap window
#define ADXL345_REG_THRESH_ACT (0x24) // Activity threshold
#define ADXL345_REG_THRESH_INACT (0x25) // Inactivity threshold
#define ADXL345_REG_TIME_INACT (0x26) // Inactivity time
#define ADXL345_REG_ACT_INACT_CTL (0x27) // Axis enable control for activity and inactivity detection
#define ADXL345_REG_THRESH_FF (0x28) // Free-fall threshold
#define ADXL345_REG_TIME_FF (0x29) // Free-fall time
#define ADXL345_REG_TAP_AXES (0x2A) // Axis control for single/double tap
#define ADXL345_REG_ACT_TAP_STATUS (0x2B) // Source for single/double tap
#define ADXL345_REG_BW_RATE (0x2C) // Data rate and power mode control
#define ADXL345_REG_POWER_CTL (0x2D) // Power-saving features control
#define ADXL345_REG_INT_ENABLE (0x2E) // Interrupt enable control
#define ADXL345_REG_INT_MAP (0x2F) // Interrupt mapping control
#define ADXL345_REG_INT_SOURCE (0x30) // Source of interrupts
#define ADXL345_REG_DATA_FORMAT (0x31) // Data format control
#define ADXL345_REG_DATAX0 (0x32) // X-axis data 0
#define ADXL345_REG_DATAX1 (0x33) // X-axis data 1
#define ADXL345_REG_DATAY0 (0x34) // Y-axis data 0
#define ADXL345_REG_DATAY1 (0x35) // Y-axis data 1
#define ADXL345_REG_DATAZ0 (0x36) // Z-axis data 0
#define ADXL345_REG_DATAZ1 (0x37) // Z-axis data 1
#define ADXL345_REG_FIFO_CTL (0x38) // FIFO control
#define ADXL345_REG_FIFO_STATUS (0x39) // FIFO status
#define ADXL345_MG2G_MULTIPLIER (0.004) // 4mg per lsb
#define ADXL_BYTE_READ (0x80)
#define ADXL_BYTE_WRITE (0x80)
#define ADXL_MULTI_BYTE_READ (0xC0)
// Register values for ADXL345_REG_BW_RATE
typedef enum
{
#ifndef ADXL345_LOW_POWER_MODE
ADXL345_DATARATE_3200_HZ = 0xF, // 1600Hz Bandwidth 140µA IDD
ADXL345_DATARATE_1600_HZ = 0xE, // 800Hz Bandwidth 90µA IDD
ADXL345_DATARATE_800_HZ = 0xD, // 400Hz Bandwidth 140µA IDD
ADXL345_DATARATE_6_25HZ = 0x6, // 3.13Hz Bandwidth 45µA IDD
ADXL345_DATARATE_3_13_HZ = 0x5, // 1.56Hz Bandwidth 40µA IDD
ADXL345_DATARATE_1_56_HZ = 0x4, // 0.78Hz Bandwidth 34µA IDD
ADXL345_DATARATE_0_78_HZ = 0x3, // 0.39Hz Bandwidth 23µA IDD
ADXL345_DATARATE_0_39_HZ = 0x2, // 0.20Hz Bandwidth 23µA IDD
ADXL345_DATARATE_0_20_HZ = 0x1, // 0.10Hz Bandwidth 23µA IDD
ADXL345_DATARATE_0_10_HZ = 0x0, // 0.05Hz Bandwidth 23µA IDD (default value)
#endif
ADXL345_DATARATE_400_HZ = 0xC, // 200Hz Bandwidth 140µA IDD / 90uA LP
ADXL345_DATARATE_200_HZ = 0xB, // 100Hz Bandwidth 140µA IDD / 60uA LP
ADXL345_DATARATE_100_HZ = 0xA, // 50Hz Bandwidth 140µA IDD / 50uA LP
ADXL345_DATARATE_50_HZ = 0x9, // 25Hz Bandwidth 90µA IDD / 45uA LP
ADXL345_DATARATE_25_HZ = 0x8, // 12.5Hz Bandwidth 60µA IDD / 40uA LP
ADXL345_DATARATE_12_5_HZ = 0x7 // 6.25Hz Bandwidth 50µA IDD / 35uA LP
} dataRate_t;
// Register values for ADXL345_REG_DATA_FORMAT
typedef enum
{
ADXL345_RANGE_16_G = 0x3, // +/- 16g
ADXL345_RANGE_8_G = 0x2, // +/- 8g
ADXL345_RANGE_4_G = 0x1, // +/- 4g
ADXL345_RANGE_2_G = 0x0 // +/- 2g (default value)
} range_t;
unsigned char ADXLInit(void);
void ADXLStandbyOn(void);
void ADXLStandbyOff(void);
void ADXLInitInterrupts(void);
void ADXLClearInterrupts(void);
void ADXLRead(int *x, int *y, int *z);
void ADXLSetRange(range_t range);
void ADXLSetDataRate(dataRate_t rate);