valeria toffoli / Mbed OS COG4050_adxl355_adxl357

Dependencies:   COG4050_ADT7420 ADXL362

Fork of COG4050_adxl355_adxl357-ver2 by ADI_CAC

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ADXL355.h Source File

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