Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: COG4050_adxl355_tilt COG4050_adxl355_tilt COG4050_adxl355_tilt_4050
Fork of ADXL355 by
ADXL355.h
00001 00002 #ifndef ADXL355_H_ 00003 #define ADXL355_H_ 00004 00005 class ADXL355 00006 { 00007 public: 00008 // -------------------------- // 00009 // CONST AND VARIABLES // 00010 // -------------------------- // 00011 typedef struct { 00012 // sensitivity 00013 float S[2][2]; 00014 float St; 00015 // 0g offset 00016 float B[2][0]; 00017 } ADXL355_calibdata_t; 00018 ADXL355_calibdata_t calib_data; 00019 // gravity filed vectors 00020 const static float t_sens = -9.05; 00021 const static float t_bias = 1852; 00022 float axis355_sens; 00023 float axis357_sens; 00024 // -------------------------- // 00025 // REGISTERS // 00026 // -------------------------- // 00027 typedef enum { 00028 DEVID_AD = 0x00, 00029 DEVID_MST = 0x01, 00030 PARTID = 0x02, 00031 REVID = 0x03, 00032 STATUS = 0x04, 00033 FIFO_ENTRIES = 0x05, 00034 TEMP2 = 0x06, 00035 TEMP1 = 0x07, 00036 XDATA3 = 0x08, 00037 XDATA2 = 0x09, 00038 XDATA1 = 0x0A, 00039 YDATA3 = 0x0B, 00040 YDATA2 = 0x0C, 00041 YDATA1 = 0x0D, 00042 ZDATA3 = 0x0E, 00043 ZDATA2 = 0x0F, 00044 ZDATA1 = 0x10, 00045 FIFO_DATA = 0x11, 00046 OFFSET_X_H = 0x1E, 00047 OFFSET_X_L = 0x1F, 00048 OFFSET_Y_H = 0x20, 00049 OFFSET_Y_L = 0x21, 00050 OFFSET_Z_H = 0x22, 00051 OFFSET_Z_L = 0x23, 00052 ACT_EN = 0x24, 00053 ACT_THRESH_H = 0x25, 00054 ACT_THRESH_L = 0x26, 00055 ACT_COUNT = 0x27, 00056 FILTER = 0x28, 00057 FIFO_SAMPLES = 0x29, 00058 INT_MAP = 0x2A, 00059 SYNC = 0x2B, 00060 RANGE = 0x2C, 00061 POWER_CTL = 0x2D, 00062 SELF_TEST = 0x2E, 00063 RESET = 0x2F 00064 } ADXL355_register_t; 00065 // -------------------------- // 00066 // REGISTERS - DEFAULT VALUES // 00067 // -------------------------- // 00068 // Modes - POWER_CTL 00069 typedef enum { 00070 DRDY_OFF = 0x04, 00071 TEMP_OFF = 0x02, 00072 STANDBY = 0x01, 00073 MEASUREMENT = 0x00 00074 } ADXL355_modes_t; 00075 // Activate Threshold - ACT_EN 00076 typedef enum { 00077 ACT_Z = 0x04, 00078 ACT_Y = 0x02, 00079 ACT_X = 0x01 00080 } ADXL355_act_ctl_t; 00081 // High-Pass and Low-Pass Filter - FILTER 00082 typedef enum { 00083 HPFOFF = 0x00, 00084 HPF247 = 0x10, 00085 HPF62 = 0x20, 00086 HPF15 = 0x30, 00087 HPF3 = 0x40, 00088 HPF09 = 0x50, 00089 HPF02 = 0x60, 00090 ODR4000HZ = 0x00, 00091 ODR2000HZ = 0x01, 00092 ODR1000HZ = 0x02, 00093 ODR500HZ = 0x03, 00094 ODR250HZ = 0x04, 00095 ODR125Hz = 0x05, 00096 ODR62HZ = 0x06, 00097 ODR31Hz = 0x07, 00098 ODR15Hz = 0x08, 00099 ODR7Hz = 0x09, 00100 ODR3HZ = 0x0A 00101 } ADXL355_filter_ctl_t; 00102 // External timing register - INT_MAP 00103 typedef enum { 00104 OVR_EN = 0x04, 00105 FULL_EN = 0x02, 00106 RDY_EN = 0x01 00107 } ADXL355_intmap_ctl_t; 00108 // External timing register - SYNC 00109 typedef enum { 00110 EXT_CLK = 0x04, 00111 INT_SYNC = 0x00, 00112 EXT_SYNC_NO_INT = 0x01, 00113 EXT_SYNC_INT = 0x02 00114 } ADXL355_sync_ctl_t; 00115 // polarity and range - RANGE 00116 typedef enum { 00117 RANGE2G = 0x01, 00118 RANGE4G = 0x02, 00119 RANGE8G = 0x03, 00120 RANGE10 = 0x01, 00121 RANGE20 = 0x02, 00122 RANGE40 = 0x03 00123 } ADXL355_range_ctl_t; 00124 // self test interrupt - INT 00125 typedef enum { 00126 ST2 = 0x02, 00127 ST1 = 0x01 00128 } ADXL355_int_ctl_t; 00129 // -------------------------- // 00130 // FUNCTIONS // 00131 // -------------------------- // 00132 // SPI configuration & constructor 00133 ADXL355(PinName cs_pin , PinName MOSI , PinName MISO , PinName SCK ); 00134 void frequency(int hz); 00135 // Low level SPI bus comm methods 00136 void reset(void); 00137 void write_reg(ADXL355_register_t reg, uint8_t data); 00138 void write_reg_u16(ADXL355_register_t reg, uint16_t data); 00139 uint8_t read_reg(ADXL355_register_t reg); 00140 uint16_t read_reg_u16(ADXL355_register_t reg); 00141 uint32_t read_reg_u20(ADXL355_register_t reg); 00142 // ADXL general register R/W methods 00143 void set_power_ctl_reg(uint8_t data); 00144 void set_filter_ctl_reg(ADXL355_filter_ctl_t hpf, ADXL355_filter_ctl_t odr); 00145 void set_clk(ADXL355_sync_ctl_t data); 00146 void set_device(ADXL355_range_ctl_t range); 00147 uint8_t read_status(); 00148 // ADXL X/Y/Z/T scanning methods 00149 uint32_t scanx(); 00150 uint32_t scany(); 00151 uint32_t scanz(); 00152 uint16_t scant(); 00153 // ADXL activity methods 00154 void set_activity_axis(ADXL355_act_ctl_t axis); 00155 void set_activity_cnt(uint8_t count); 00156 void set_activity_threshold(uint8_t data_h, uint8_t data_l); 00157 void set_inactivity(); 00158 // ADXL interrupt methods 00159 void set_interrupt1_pin(PinName in, ADXL355_intmap_ctl_t mode); 00160 void set_interrupt2_pin(PinName in, ADXL355_intmap_ctl_t mode); 00161 void enable_interrupt1(); 00162 void enable_interrupt2(); 00163 void disable_interrupt1(); 00164 void disable_interrupt2(); 00165 void set_polling_interrupt1_pin(uint8_t data); 00166 void set_polling_interrupt2_pin(uint8_t data); 00167 bool get_int1(); 00168 bool get_int2(); 00169 // ADXL FIFO methods 00170 uint8_t fifo_read_nr_of_entries(); 00171 void fifo_setup(uint8_t nr_of_entries); 00172 uint32_t fifo_read_u32(); 00173 uint64_t fifo_scan(); 00174 // ADXL calibration 00175 float convert(uint32_t data); 00176 ADXL355_calibdata_t convert_2p(float angle[11][2], float meas[11][2]); 00177 ADXL355_calibdata_t convert_3to8p(float angle[11][2], float meas[11][2], int count); 00178 ADXL355_calibdata_t convert_12p(float angle[11][2], float meas[11][2]); 00179 00180 private: 00181 // SPI adxl355; ///< SPI instance of the ADXL 00182 SPI adxl355; DigitalOut cs; 00183 const static uint8_t _DEVICE_AD = 0xAD; // contect of DEVID_AD (only-read) register 00184 const static uint8_t _RESET = 0x52; // reset code 00185 const static uint8_t _DUMMY_BYTE = 0xAA; // 10101010 00186 const static uint8_t _WRITE_REG_CMD = 0x00; // write register 00187 const static uint8_t _READ_REG_CMD = 0x01; // read register 00188 const static uint8_t _READ_FIFO_CMD = 0x23; // read FIFO 00189 const static uint8_t _SPI_MODE = 0; // timing scheme 00190 }; 00191 00192 #endif 00193
Generated on Wed Jul 13 2022 11:18:19 by
1.7.2
