ADI_CAC / ADXL355

Dependents:   COG4050_adxl355_tilt COG4050_adxl355_tilt COG4050_adxl355_tilt_4050

Fork of ADXL355 by Rohan Gurav

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     // -------------------------- //
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