Update

Dependents:   COG_UART_Base

Committer:
APS_Lab
Date:
Fri Jan 11 07:05:02 2019 +0000
Revision:
0:860fafcf34d6
First;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
APS_Lab 0:860fafcf34d6 1 #ifndef _ADXL362_H_
APS_Lab 0:860fafcf34d6 2 #define _ADXL362_H_
APS_Lab 0:860fafcf34d6 3 #include "mbed.h"
APS_Lab 0:860fafcf34d6 4 #include <SPI.h>
APS_Lab 0:860fafcf34d6 5
APS_Lab 0:860fafcf34d6 6 // Register Memory Map
APS_Lab 0:860fafcf34d6 7 #define DEVID_AD 0x00
APS_Lab 0:860fafcf34d6 8 #define DEVID_MST 0x01
APS_Lab 0:860fafcf34d6 9 #define PARTID 0x02
APS_Lab 0:860fafcf34d6 10 #define REVID 0x03
APS_Lab 0:860fafcf34d6 11 /* _ reserved _ */
APS_Lab 0:860fafcf34d6 12 #define XDATA 0x08
APS_Lab 0:860fafcf34d6 13 #define YDATA 0x09
APS_Lab 0:860fafcf34d6 14 #define ZDATA 0x0A
APS_Lab 0:860fafcf34d6 15 #define STATUS 0x0B
APS_Lab 0:860fafcf34d6 16 #define FIFO_ENTRIES_L 0x0C
APS_Lab 0:860fafcf34d6 17 #define FIFO_ENTRIES_H 0x0D
APS_Lab 0:860fafcf34d6 18 #define XDATA_L 0x0E
APS_Lab 0:860fafcf34d6 19 #define XDATA_H 0x0F
APS_Lab 0:860fafcf34d6 20 #define YDATA_L 0x10
APS_Lab 0:860fafcf34d6 21 #define YDATA_H 0x11
APS_Lab 0:860fafcf34d6 22 #define ZDATA_L 0x12
APS_Lab 0:860fafcf34d6 23 #define ZDATA_H 0x13
APS_Lab 0:860fafcf34d6 24 #define TEMP_L 0x14
APS_Lab 0:860fafcf34d6 25 #define TEMP_H 0x15
APS_Lab 0:860fafcf34d6 26 /* _ reserved _ */
APS_Lab 0:860fafcf34d6 27 #define SOFT_RESET 0x1F
APS_Lab 0:860fafcf34d6 28 #define THRESH_ACT_L 0x20
APS_Lab 0:860fafcf34d6 29 #define THRESH_ACT_H 0x21
APS_Lab 0:860fafcf34d6 30 #define TIME_ACT 0x22
APS_Lab 0:860fafcf34d6 31 #define THRESH_INACT_L 0x23
APS_Lab 0:860fafcf34d6 32 #define THRESH_INACT_H 0x24
APS_Lab 0:860fafcf34d6 33 #define TIME_INACT_L 0x25
APS_Lab 0:860fafcf34d6 34 #define TIME_INACT_H 0x26
APS_Lab 0:860fafcf34d6 35 #define ACT_INACT_CTL 0x27
APS_Lab 0:860fafcf34d6 36 #define FIFO_CONTROL 0x28
APS_Lab 0:860fafcf34d6 37 #define FIFO_SAMPLES 0x29
APS_Lab 0:860fafcf34d6 38 #define INTMAP1 0x2A
APS_Lab 0:860fafcf34d6 39 #define INTMAP2 0x2B
APS_Lab 0:860fafcf34d6 40 #define FILTER_CTL 0x2C
APS_Lab 0:860fafcf34d6 41 #define POWER_CTL 0x2D
APS_Lab 0:860fafcf34d6 42 #define SELF_TEST 0x2E
APS_Lab 0:860fafcf34d6 43
APS_Lab 0:860fafcf34d6 44 /* ADXL const parameters */
APS_Lab 0:860fafcf34d6 45 #define SOFT_RESET_ADXL362 (0x52)
APS_Lab 0:860fafcf34d6 46
APS_Lab 0:860fafcf34d6 47 #define POWER_CTL_PARAM_LOWNOISE_NORM (0x00)
APS_Lab 0:860fafcf34d6 48 #define POWER_CTL_PARAM_LOWNOISE_LOW (0x10)
APS_Lab 0:860fafcf34d6 49 #define POWER_CTL_PARAM_LOWNOISE_ULTRA (0x20)
APS_Lab 0:860fafcf34d6 50
APS_Lab 0:860fafcf34d6 51 #define POWER_CTL_MODEMASK (0x03)
APS_Lab 0:860fafcf34d6 52 #define POWER_CTL_STOP (0x00)
APS_Lab 0:860fafcf34d6 53 #define POWER_CTL_STANDBY (0x01)
APS_Lab 0:860fafcf34d6 54 #define POWER_CTL_MESURE (0x02)
APS_Lab 0:860fafcf34d6 55
APS_Lab 0:860fafcf34d6 56 /* ADXL362 configuration */
APS_Lab 0:860fafcf34d6 57 #define DEVID_AD_ADXL362 (0xAD)
APS_Lab 0:860fafcf34d6 58 #define DEVID_MST_ADXL362 (0x1D)
APS_Lab 0:860fafcf34d6 59 #define PARTID_ADXL362 (0xF2)
APS_Lab 0:860fafcf34d6 60
APS_Lab 0:860fafcf34d6 61 #define GRAVITY_2G (2.0)
APS_Lab 0:860fafcf34d6 62 #define GRAVITY_4G (4.0)
APS_Lab 0:860fafcf34d6 63 #define GRAVITY_8G (8.0)
APS_Lab 0:860fafcf34d6 64
APS_Lab 0:860fafcf34d6 65 #define ODR_12 0
APS_Lab 0:860fafcf34d6 66 #define ODR_25 1
APS_Lab 0:860fafcf34d6 67 #define ODR_50 2
APS_Lab 0:860fafcf34d6 68 #define ODR_100 3
APS_Lab 0:860fafcf34d6 69 #define ODR_200 4
APS_Lab 0:860fafcf34d6 70 #define ODR_400 5
APS_Lab 0:860fafcf34d6 71
APS_Lab 0:860fafcf34d6 72
APS_Lab 0:860fafcf34d6 73 #define PARAM_ADXL362_SCALE_ACCEL (1.0f * 0.001f * 9.80665f) // DATA
APS_Lab 0:860fafcf34d6 74 #define PARAM_ADXL362_SCALE_THERMAL (0.0025f) // TEMP
APS_Lab 0:860fafcf34d6 75 #define PARAM_ADXL362_THERMAL_OFFSET (25.0f) // TEMP
APS_Lab 0:860fafcf34d6 76
APS_Lab 0:860fafcf34d6 77
APS_Lab 0:860fafcf34d6 78
APS_Lab 0:860fafcf34d6 79 /* Output of Accelerometers */
APS_Lab 0:860fafcf34d6 80 typedef struct _struct_AccelTemp {
APS_Lab 0:860fafcf34d6 81 int ax;
APS_Lab 0:860fafcf34d6 82 int ay;
APS_Lab 0:860fafcf34d6 83 int az;
APS_Lab 0:860fafcf34d6 84 int tm;
APS_Lab 0:860fafcf34d6 85 } AccelTemp;
APS_Lab 0:860fafcf34d6 86
APS_Lab 0:860fafcf34d6 87 /* ADIS16460 class definition */
APS_Lab 0:860fafcf34d6 88 class ADXL362 {
APS_Lab 0:860fafcf34d6 89
APS_Lab 0:860fafcf34d6 90 public:
APS_Lab 0:860fafcf34d6 91
APS_Lab 0:860fafcf34d6 92 /* ADIS16460 initializer */
APS_Lab 0:860fafcf34d6 93 ADXL362(Serial*, SPI*);
APS_Lab 0:860fafcf34d6 94 ~ADXL362();
APS_Lab 0:860fafcf34d6 95
APS_Lab 0:860fafcf34d6 96 /* Control */
APS_Lab 0:860fafcf34d6 97 void SoftReset();
APS_Lab 0:860fafcf34d6 98 void SetMesureParam(int param);
APS_Lab 0:860fafcf34d6 99 void StartMesure();
APS_Lab 0:860fafcf34d6 100 int GetStatus();
APS_Lab 0:860fafcf34d6 101
APS_Lab 0:860fafcf34d6 102 /* Sensing */
APS_Lab 0:860fafcf34d6 103 void SensorRead(AccelTemp*);
APS_Lab 0:860fafcf34d6 104
APS_Lab 0:860fafcf34d6 105 /* GetSubInfo */
APS_Lab 0:860fafcf34d6 106 AccelTemp* GetMinInfo(void);
APS_Lab 0:860fafcf34d6 107 AccelTemp* GetMaxInfo(void);
APS_Lab 0:860fafcf34d6 108
APS_Lab 0:860fafcf34d6 109 /* convert real scale */
APS_Lab 0:860fafcf34d6 110 float ConvAccel(int ctrlval);
APS_Lab 0:860fafcf34d6 111 float ConvThermal(int ctrlval);
APS_Lab 0:860fafcf34d6 112
APS_Lab 0:860fafcf34d6 113 /* configuration */
APS_Lab 0:860fafcf34d6 114 void set_gravity(int g);
APS_Lab 0:860fafcf34d6 115 void set_ODR(int o);
APS_Lab 0:860fafcf34d6 116 void set_powermode(int m);
APS_Lab 0:860fafcf34d6 117 void set_wakeupmode(void);
APS_Lab 0:860fafcf34d6 118 void set_scalefactor(void);
APS_Lab 0:860fafcf34d6 119 void start(void);
APS_Lab 0:860fafcf34d6 120 void stop(void);
APS_Lab 0:860fafcf34d6 121
APS_Lab 0:860fafcf34d6 122 private:
APS_Lab 0:860fafcf34d6 123 /* locked */
APS_Lab 0:860fafcf34d6 124 ADXL362();
APS_Lab 0:860fafcf34d6 125
APS_Lab 0:860fafcf34d6 126 /* information store */
APS_Lab 0:860fafcf34d6 127 Serial *uart;
APS_Lab 0:860fafcf34d6 128 SPI *_spi;
APS_Lab 0:860fafcf34d6 129 DigitalOut *_cs;
APS_Lab 0:860fafcf34d6 130 int odr;
APS_Lab 0:860fafcf34d6 131 AccelTemp minStore;
APS_Lab 0:860fafcf34d6 132 AccelTemp maxStore;
APS_Lab 0:860fafcf34d6 133
APS_Lab 0:860fafcf34d6 134 /* realvalue */
APS_Lab 0:860fafcf34d6 135 float gravity;
APS_Lab 0:860fafcf34d6 136 float scaleAccel;
APS_Lab 0:860fafcf34d6 137 float scaleThermal;
APS_Lab 0:860fafcf34d6 138 float offsetThermal;
APS_Lab 0:860fafcf34d6 139
APS_Lab 0:860fafcf34d6 140 /* convert value */
APS_Lab 0:860fafcf34d6 141 void convertSensorData(AccelTemp*, int *);
APS_Lab 0:860fafcf34d6 142 int ext12bitToInt(int l, int h);
APS_Lab 0:860fafcf34d6 143
APS_Lab 0:860fafcf34d6 144 /* update internal min/max */
APS_Lab 0:860fafcf34d6 145 void initMinMax(AccelTemp *min, AccelTemp *max);
APS_Lab 0:860fafcf34d6 146 void updateMinMax(AccelTemp *min, AccelTemp *max, AccelTemp *getData);
APS_Lab 0:860fafcf34d6 147
APS_Lab 0:860fafcf34d6 148
APS_Lab 0:860fafcf34d6 149 /* communication via SPI*/
APS_Lab 0:860fafcf34d6 150 void chipSelOn(void);
APS_Lab 0:860fafcf34d6 151 void chipSelOff(void);
APS_Lab 0:860fafcf34d6 152 void chipSelDelay(void);
APS_Lab 0:860fafcf34d6 153
APS_Lab 0:860fafcf34d6 154 /* R/W primitives */
APS_Lab 0:860fafcf34d6 155 int regRD(int);
APS_Lab 0:860fafcf34d6 156 void regWR(int, int);
APS_Lab 0:860fafcf34d6 157 void regBurstRD(int, int, int*);
APS_Lab 0:860fafcf34d6 158 };
APS_Lab 0:860fafcf34d6 159
APS_Lab 0:860fafcf34d6 160 #endif /* _ADXL362_H_ */