Update

Dependents:   COG_UART_Base

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ADXL362.h Source File

ADXL362.h

00001 #ifndef _ADXL362_H_
00002 #define _ADXL362_H_
00003 #include "mbed.h"
00004 #include <SPI.h>
00005 
00006 // Register Memory Map
00007 #define DEVID_AD        0x00
00008 #define DEVID_MST       0x01
00009 #define PARTID          0x02
00010 #define REVID           0x03
00011 /* _ reserved _ */
00012 #define XDATA           0x08
00013 #define YDATA           0x09
00014 #define ZDATA           0x0A
00015 #define STATUS          0x0B
00016 #define FIFO_ENTRIES_L  0x0C
00017 #define FIFO_ENTRIES_H  0x0D
00018 #define XDATA_L         0x0E
00019 #define XDATA_H         0x0F
00020 #define YDATA_L         0x10
00021 #define YDATA_H         0x11
00022 #define ZDATA_L         0x12
00023 #define ZDATA_H         0x13
00024 #define TEMP_L          0x14
00025 #define TEMP_H          0x15
00026 /* _ reserved _ */
00027 #define SOFT_RESET      0x1F
00028 #define THRESH_ACT_L    0x20
00029 #define THRESH_ACT_H    0x21
00030 #define TIME_ACT        0x22
00031 #define THRESH_INACT_L  0x23
00032 #define THRESH_INACT_H  0x24
00033 #define TIME_INACT_L    0x25
00034 #define TIME_INACT_H    0x26
00035 #define ACT_INACT_CTL   0x27
00036 #define FIFO_CONTROL    0x28
00037 #define FIFO_SAMPLES    0x29
00038 #define INTMAP1         0x2A
00039 #define INTMAP2         0x2B
00040 #define FILTER_CTL      0x2C
00041 #define POWER_CTL       0x2D
00042 #define SELF_TEST       0x2E
00043 
00044 /* ADXL const parameters */
00045 #define SOFT_RESET_ADXL362      (0x52)
00046 
00047 #define POWER_CTL_PARAM_LOWNOISE_NORM   (0x00)
00048 #define POWER_CTL_PARAM_LOWNOISE_LOW    (0x10)
00049 #define POWER_CTL_PARAM_LOWNOISE_ULTRA  (0x20)
00050 
00051 #define POWER_CTL_MODEMASK      (0x03)
00052 #define POWER_CTL_STOP          (0x00)
00053 #define POWER_CTL_STANDBY       (0x01)
00054 #define POWER_CTL_MESURE        (0x02)
00055 
00056 /* ADXL362 configuration */     
00057 #define DEVID_AD_ADXL362        (0xAD)
00058 #define DEVID_MST_ADXL362       (0x1D)
00059 #define PARTID_ADXL362          (0xF2)
00060 
00061 #define GRAVITY_2G              (2.0)
00062 #define GRAVITY_4G              (4.0)
00063 #define GRAVITY_8G              (8.0)
00064 
00065 #define ODR_12                  0
00066 #define ODR_25                  1
00067 #define ODR_50                  2
00068 #define ODR_100                 3
00069 #define ODR_200                 4
00070 #define ODR_400                 5
00071 
00072 
00073 #define PARAM_ADXL362_SCALE_ACCEL     (1.0f * 0.001f * 9.80665f)  // DATA
00074 #define PARAM_ADXL362_SCALE_THERMAL   (0.0025f)                   // TEMP
00075 #define PARAM_ADXL362_THERMAL_OFFSET  (25.0f)                     // TEMP
00076 
00077 
00078 
00079 /* Output of Accelerometers */
00080 typedef struct _struct_AccelTemp {
00081     int ax;
00082     int ay;
00083     int az;
00084     int tm;
00085 } AccelTemp;
00086 
00087 /* ADIS16460 class definition */
00088 class ADXL362 {
00089 
00090 public:
00091 
00092     /* ADIS16460 initializer */
00093     ADXL362(Serial*, SPI*);
00094     ~ADXL362();
00095     
00096     /* Control */
00097     void SoftReset();
00098     void SetMesureParam(int param);
00099     void StartMesure();
00100     int GetStatus();
00101 
00102     /* Sensing */
00103     void SensorRead(AccelTemp*);
00104 
00105     /* GetSubInfo */
00106     AccelTemp* GetMinInfo(void);
00107     AccelTemp* GetMaxInfo(void);
00108     
00109     /* convert real scale */
00110     float ConvAccel(int ctrlval);
00111     float ConvThermal(int ctrlval);
00112     
00113     /* configuration */
00114     void set_gravity(int g);
00115     void set_ODR(int o);
00116     void set_powermode(int m);
00117     void set_wakeupmode(void);
00118     void set_scalefactor(void);
00119     void start(void);
00120     void stop(void);
00121         
00122 private:    
00123     /* locked */
00124     ADXL362();
00125 
00126     /* information store */
00127     Serial *uart;
00128     SPI *_spi;
00129     DigitalOut *_cs;
00130     int odr;
00131     AccelTemp minStore;
00132     AccelTemp maxStore;
00133     
00134     /* realvalue */
00135     float gravity;
00136     float scaleAccel;
00137     float scaleThermal;
00138     float offsetThermal;
00139 
00140     /* convert value */
00141     void convertSensorData(AccelTemp*, int *);
00142     int ext12bitToInt(int l, int h);
00143     
00144     /* update internal min/max */
00145     void initMinMax(AccelTemp *min, AccelTemp *max);
00146     void updateMinMax(AccelTemp *min, AccelTemp *max, AccelTemp *getData);
00147      
00148     
00149     /* communication via SPI*/
00150     void chipSelOn(void);
00151     void chipSelOff(void);
00152     void chipSelDelay(void);
00153     
00154     /* R/W primitives */
00155     int regRD(int);
00156     void regWR(int, int);
00157     void regBurstRD(int, int, int*);
00158 };
00159 
00160 #endif /* _ADXL362_H_ */