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.
Dependencies: COG4050_ADT7420 ADXL362
Fork of COG4050_adxl355_adxl357-ver2 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 const static float t_sens = -9.05; 00011 const static float t_bias = 1852; 00012 float axis355_sens; 00013 float axis357_sens; 00014 // -------------------------- // 00015 // REGISTERS // 00016 // -------------------------- // 00017 typedef enum { 00018 DEVID_AD = 0x00, 00019 DEVID_MST = 0x01, 00020 PARTID = 0x02, 00021 REVID = 0x03, 00022 STATUS = 0x04, 00023 FIFO_ENTRIES = 0x05, 00024 TEMP2 = 0x06, 00025 TEMP1 = 0x07, 00026 XDATA3 = 0x08, 00027 XDATA2 = 0x09, 00028 XDATA1 = 0x0A, 00029 YDATA3 = 0x0B, 00030 YDATA2 = 0x0C, 00031 YDATA1 = 0x0D, 00032 ZDATA3 = 0x0E, 00033 ZDATA2 = 0x0F, 00034 ZDATA1 = 0x10, 00035 FIFO_DATA = 0x11, 00036 OFFSET_X_H = 0x1E, 00037 OFFSET_X_L = 0x1F, 00038 OFFSET_Y_H = 0x20, 00039 OFFSET_Y_L = 0x21, 00040 OFFSET_Z_H = 0x22, 00041 OFFSET_Z_L = 0x23, 00042 ACT_EN = 0x24, 00043 ACT_THRESH_H = 0x25, 00044 ACT_THRESH_L = 0x26, 00045 ACT_COUNT = 0x27, 00046 FILTER = 0x28, 00047 FIFO_SAMPLES = 0x29, 00048 INT_MAP = 0x2A, 00049 SYNC = 0x2B, 00050 RANGE = 0x2C, 00051 POWER_CTL = 0x2D, 00052 SELF_TEST = 0x2E, 00053 RESET = 0x2F 00054 } ADXL355_register_t; 00055 // -------------------------- // 00056 // REGISTERS - DEFAULT VALUES // 00057 // -------------------------- // 00058 // Modes - POWER_CTL 00059 typedef enum { 00060 DRDY_OFF = 0x04, 00061 TEMP_OFF = 0x02, 00062 STANDBY = 0x01, 00063 MEASUREMENT = 0x00 00064 } ADXL355_modes_t; 00065 // Activate Threshold - ACT_EN 00066 typedef enum { 00067 ACT_Z = 0x04, 00068 ACT_Y = 0x02, 00069 ACT_X = 0x01 00070 } ADXL355_act_ctl_t; 00071 // High-Pass and Low-Pass Filter - FILTER 00072 typedef enum { 00073 HPFOFF = 0x00, 00074 HPF247 = 0x10, 00075 HPF62 = 0x20, 00076 HPF15 = 0x30, 00077 HPF3 = 0x40, 00078 HPF09 = 0x50, 00079 HPF02 = 0x60, 00080 ODR4000HZ = 0x00, 00081 ODR2000HZ = 0x01, 00082 ODR1000HZ = 0x02, 00083 ODR500HZ = 0x03, 00084 ODR250HZ = 0x04, 00085 ODR125Hz = 0x05, 00086 ODR62HZ = 0x06, 00087 ODR31Hz = 0x07, 00088 ODR15Hz = 0x08, 00089 ODR7Hz = 0x09, 00090 ODR3HZ = 0x0A 00091 } ADXL355_filter_ctl_t; 00092 // External timing register - INT_MAP 00093 typedef enum { 00094 OVR_EN = 0x04, 00095 FULL_EN = 0x02, 00096 RDY_EN = 0x01 00097 } ADXL355_intmap_ctl_t; 00098 // External timing register - SYNC 00099 typedef enum { 00100 EXT_CLK = 0x04, 00101 INT_SYNC = 0x00, 00102 EXT_SYNC_NO_INT = 0x01, 00103 EXT_SYNC_INT = 0x02 00104 } ADXL355_sync_ctl_t; 00105 // polarity and range - RANGE 00106 typedef enum { 00107 RANGE2G = 0x01, 00108 RANGE4G = 0x02, 00109 RANGE8G = 0x03, 00110 RANGE10 = 0x01, 00111 RANGE20 = 0x02, 00112 RANGE40 = 0x03 00113 } ADXL355_range_ctl_t; 00114 // self test interrupt - INT 00115 typedef enum { 00116 ST2 = 0x02, 00117 ST1 = 0x01 00118 } ADXL355_int_ctl_t; 00119 // -------------------------- // 00120 // FUNCTIONS // 00121 // -------------------------- // 00122 // SPI configuration & constructor 00123 ADXL355(PinName cs_pin , PinName MOSI , PinName MISO , PinName SCK ); 00124 void frequency(int hz); 00125 // Low level SPI bus comm methods 00126 void reset(void); 00127 void write_reg(ADXL355_register_t reg, uint8_t data); 00128 void write_reg_u16(ADXL355_register_t reg, uint16_t data); 00129 uint8_t read_reg(ADXL355_register_t reg); 00130 uint16_t read_reg_u16(ADXL355_register_t reg); 00131 uint32_t read_reg_u20(ADXL355_register_t reg); 00132 // ADXL general register R/W methods 00133 void set_power_ctl_reg(uint8_t data); 00134 void set_filter_ctl_reg(ADXL355_filter_ctl_t hpf, ADXL355_filter_ctl_t odr); 00135 void set_clk(ADXL355_sync_ctl_t data); 00136 void set_device(ADXL355_range_ctl_t range); 00137 uint8_t read_status(); 00138 // ADXL X/Y/Z/T scanning methods 00139 uint32_t scanx(); 00140 uint32_t scany(); 00141 uint32_t scanz(); 00142 uint16_t scant(); 00143 // ADXL activity methods 00144 void set_activity_axis(ADXL355_act_ctl_t axis); 00145 void set_activity_cnt(uint8_t count); 00146 void set_activity_threshold(uint8_t data_h, uint8_t data_l); 00147 void set_inactivity(); 00148 // ADXL interrupt methods 00149 void set_interrupt1_pin(PinName in, ADXL355_intmap_ctl_t mode); 00150 void set_interrupt2_pin(PinName in, ADXL355_intmap_ctl_t mode); 00151 void enable_interrupt1(); 00152 void enable_interrupt2(); 00153 void disable_interrupt1(); 00154 void disable_interrupt2(); 00155 void set_polling_interrupt1_pin(uint8_t data); 00156 void set_polling_interrupt2_pin(uint8_t data); 00157 bool get_int1(); 00158 bool get_int2(); 00159 // ADXL FIFO methods 00160 uint8_t fifo_read_nr_of_entries(); 00161 void fifo_setup(uint8_t nr_of_entries); 00162 uint32_t fifo_read_u32(); 00163 uint64_t fifo_scan(); 00164 // ADXL conversion 00165 float convert(uint32_t data); 00166 // ADXL angle measurement 00167 float single_axis(float x); 00168 float dual_axis(float x, float y); 00169 float tri_axis(float x, float y, float z); 00170 private: 00171 // SPI adxl355; ///< SPI instance of the ADXL 00172 SPI adxl355; DigitalOut cs; 00173 const static uint8_t _DEVICE_AD = 0xAD; // contect of DEVID_AD (only-read) register 00174 const static uint8_t _RESET = 0x52; // reset code 00175 const static uint8_t _DUMMY_BYTE = 0xAA; // 10101010 00176 const static uint8_t _WRITE_REG_CMD = 0x00; // write register 00177 const static uint8_t _READ_REG_CMD = 0x01; // read register 00178 const static uint8_t _READ_FIFO_CMD = 0x23; // read FIFO 00179 const static uint8_t _SPI_MODE = 0; // timing scheme 00180 }; 00181 00182 #endif
Generated on Thu Jul 21 2022 06:24:42 by
1.7.2
