Update
Diff: ADXL362.h
- Revision:
- 0:860fafcf34d6
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ADXL362.h Fri Jan 11 07:05:02 2019 +0000 @@ -0,0 +1,160 @@ +#ifndef _ADXL362_H_ +#define _ADXL362_H_ +#include "mbed.h" +#include <SPI.h> + +// Register Memory Map +#define DEVID_AD 0x00 +#define DEVID_MST 0x01 +#define PARTID 0x02 +#define REVID 0x03 +/* _ reserved _ */ +#define XDATA 0x08 +#define YDATA 0x09 +#define ZDATA 0x0A +#define STATUS 0x0B +#define FIFO_ENTRIES_L 0x0C +#define FIFO_ENTRIES_H 0x0D +#define XDATA_L 0x0E +#define XDATA_H 0x0F +#define YDATA_L 0x10 +#define YDATA_H 0x11 +#define ZDATA_L 0x12 +#define ZDATA_H 0x13 +#define TEMP_L 0x14 +#define TEMP_H 0x15 +/* _ reserved _ */ +#define SOFT_RESET 0x1F +#define THRESH_ACT_L 0x20 +#define THRESH_ACT_H 0x21 +#define TIME_ACT 0x22 +#define THRESH_INACT_L 0x23 +#define THRESH_INACT_H 0x24 +#define TIME_INACT_L 0x25 +#define TIME_INACT_H 0x26 +#define ACT_INACT_CTL 0x27 +#define FIFO_CONTROL 0x28 +#define FIFO_SAMPLES 0x29 +#define INTMAP1 0x2A +#define INTMAP2 0x2B +#define FILTER_CTL 0x2C +#define POWER_CTL 0x2D +#define SELF_TEST 0x2E + +/* ADXL const parameters */ +#define SOFT_RESET_ADXL362 (0x52) + +#define POWER_CTL_PARAM_LOWNOISE_NORM (0x00) +#define POWER_CTL_PARAM_LOWNOISE_LOW (0x10) +#define POWER_CTL_PARAM_LOWNOISE_ULTRA (0x20) + +#define POWER_CTL_MODEMASK (0x03) +#define POWER_CTL_STOP (0x00) +#define POWER_CTL_STANDBY (0x01) +#define POWER_CTL_MESURE (0x02) + +/* ADXL362 configuration */ +#define DEVID_AD_ADXL362 (0xAD) +#define DEVID_MST_ADXL362 (0x1D) +#define PARTID_ADXL362 (0xF2) + +#define GRAVITY_2G (2.0) +#define GRAVITY_4G (4.0) +#define GRAVITY_8G (8.0) + +#define ODR_12 0 +#define ODR_25 1 +#define ODR_50 2 +#define ODR_100 3 +#define ODR_200 4 +#define ODR_400 5 + + +#define PARAM_ADXL362_SCALE_ACCEL (1.0f * 0.001f * 9.80665f) // DATA +#define PARAM_ADXL362_SCALE_THERMAL (0.0025f) // TEMP +#define PARAM_ADXL362_THERMAL_OFFSET (25.0f) // TEMP + + + +/* Output of Accelerometers */ +typedef struct _struct_AccelTemp { + int ax; + int ay; + int az; + int tm; +} AccelTemp; + +/* ADIS16460 class definition */ +class ADXL362 { + +public: + + /* ADIS16460 initializer */ + ADXL362(Serial*, SPI*); + ~ADXL362(); + + /* Control */ + void SoftReset(); + void SetMesureParam(int param); + void StartMesure(); + int GetStatus(); + + /* Sensing */ + void SensorRead(AccelTemp*); + + /* GetSubInfo */ + AccelTemp* GetMinInfo(void); + AccelTemp* GetMaxInfo(void); + + /* convert real scale */ + float ConvAccel(int ctrlval); + float ConvThermal(int ctrlval); + + /* configuration */ + void set_gravity(int g); + void set_ODR(int o); + void set_powermode(int m); + void set_wakeupmode(void); + void set_scalefactor(void); + void start(void); + void stop(void); + +private: + /* locked */ + ADXL362(); + + /* information store */ + Serial *uart; + SPI *_spi; + DigitalOut *_cs; + int odr; + AccelTemp minStore; + AccelTemp maxStore; + + /* realvalue */ + float gravity; + float scaleAccel; + float scaleThermal; + float offsetThermal; + + /* convert value */ + void convertSensorData(AccelTemp*, int *); + int ext12bitToInt(int l, int h); + + /* update internal min/max */ + void initMinMax(AccelTemp *min, AccelTemp *max); + void updateMinMax(AccelTemp *min, AccelTemp *max, AccelTemp *getData); + + + /* communication via SPI*/ + void chipSelOn(void); + void chipSelOff(void); + void chipSelDelay(void); + + /* R/W primitives */ + int regRD(int); + void regWR(int, int); + void regBurstRD(int, int, int*); +}; + +#endif /* _ADXL362_H_ */ \ No newline at end of file