ADS1220 Library Modified from Sandeep Malladi

Dependents:   ADS1220SPI BMI160Test Seismograph-Geodynamic

Revision:
0:90cd7e5e24af
Child:
1:34692a3d25f7
diff -r 000000000000 -r 90cd7e5e24af ADS1220.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ADS1220.h	Tue May 24 13:44:10 2016 +0000
@@ -0,0 +1,250 @@
+#ifndef ADS1220_H_
+#define ADS1220_H_
+#include "mbed.h"
+
+#define COUNTOF(__BUFFER__)   (sizeof(__BUFFER__) / sizeof(*(__BUFFER__)))
+#define gain_error_correction 0.9107468123861566//0.9980039920159681//6218905 // 0.977517107
+#define weight_gram 408
+
+/* Error Return Values */
+#define ADS1220_NO_ERROR           0
+#define ADS1220_ERROR               -1
+
+/* Command Definitions */
+#define ADS1220_CMD_RDATA       0x10
+#define ADS1220_CMD_RREG        0x20
+#define ADS1220_CMD_WREG        0x40
+#define ADS1220_CMD_SYNC        0x08
+#define ADS1220_CMD_SHUTDOWN  0x02
+#define ADS1220_CMD_RESET       0x06
+
+/* ADS1220 Register Definitions */
+#define ADS1220_0_REGISTER        0x00
+#define ADS1220_1_REGISTER      0x01
+#define ADS1220_2_REGISTER      0x02
+#define ADS1220_3_REGISTER      0x03
+
+
+/* ADS1220 Register 0 Definition */
+//   Bit 7   |   Bit 6   |   Bit 5   |   Bit 4   |   Bit 3   |   Bit 2   |   Bit 1   |   Bit 0 
+//--------------------------------------------------------------------------------------------
+//                     MUX [3:0]                 |             GAIN[2:0]             | PGA_BYPASS
+//
+// Define MUX
+#define ADS1220_MUX_0_1     0x00
+#define ADS1220_MUX_0_2     0x10
+#define ADS1220_MUX_0_3     0x20
+#define ADS1220_MUX_1_2     0x30
+#define ADS1220_MUX_1_3     0x40
+#define ADS1220_MUX_2_3     0x50
+#define ADS1220_MUX_1_0     0x60
+#define ADS1220_MUX_3_2     0x70
+#define ADS1220_MUX_0_G       0x80
+#define ADS1220_MUX_1_G     0x90
+#define ADS1220_MUX_2_G     0xa0
+#define ADS1220_MUX_3_G     0xb0
+#define ADS1220_MUX_EX_VREF 0xc0
+#define ADS1220_MUX_AVDD    0xd0
+#define ADS1220_MUX_DIV2    0xe0
+
+// Define GAIN
+#define ADS1220_GAIN_1      0x00
+#define ADS1220_GAIN_2      0x02
+#define ADS1220_GAIN_4      0x04
+#define ADS1220_GAIN_8      0x06
+#define ADS1220_GAIN_16     0x08
+#define ADS1220_GAIN_32     0x0a
+#define ADS1220_GAIN_64     0x0c
+#define ADS1220_GAIN_128    0x0e
+
+// Define PGA_BYPASS
+#define ADS1220_PGA_BYPASS  0x01
+
+/* ADS1220 Register 1 Definition */
+//   Bit 7   |   Bit 6   |   Bit 5   |   Bit 4   |   Bit 3   |   Bit 2   |   Bit 1   |   Bit 0 
+//--------------------------------------------------------------------------------------------
+//                DR[2:0]            |      MODE[1:0]        |     CM    |     TS    |    BCS
+//
+// Define DR (data rate)
+#define ADS1220_DR_20           0x00
+#define ADS1220_DR_45           0x20
+#define ADS1220_DR_90           0x40
+#define ADS1220_DR_175              0x60
+#define ADS1220_DR_330              0x80
+#define ADS1220_DR_600              0xa0
+#define ADS1220_DR_1000             0xc0
+
+// Define MODE of Operation
+#define ADS1220_MODE_NORMAL 0x00
+#define ADS1220_MODE_DUTY   0x08
+#define ADS1220_MODE_TURBO  0x10
+#define ADS1220_MODE_DCT    0x18
+
+// Define CM (conversion mode)
+#define ADS1220_CC          0x04
+
+// Define TS (temperature sensor)
+#define ADS1220_TEMP_SENSOR 0x02
+
+// Define BCS (burnout current source)
+#define ADS1220_BCS         0x01
+
+/* ADS1220 Register 2 Definition */
+//   Bit 7   |   Bit 6   |   Bit 5   |   Bit 4   |   Bit 3   |   Bit 2   |   Bit 1   |   Bit 0 
+//--------------------------------------------------------------------------------------------
+//         VREF[1:0]     |        50/60[1:0]     |    PSW    |             IDAC[2:0]
+//
+// Define VREF
+#define ADS1220_VREF_INT    0x00
+#define ADS1220_VREF_EX_DED 0x40
+#define ADS1220_VREF_EX_AIN 0x80
+#define ADS1220_VREF_SUPPLY 0xc0
+
+// Define 50/60 (filter response)
+#define ADS1220_REJECT_OFF  0x00
+#define ADS1220_REJECT_BOTH 0x10
+#define ADS1220_REJECT_50   0x20
+#define ADS1220_REJECT_60   0x30
+
+// Define PSW (low side power switch)
+#define ADS1220_PSW_SW      0x08
+
+// Define IDAC (IDAC current)
+#define ADS1220_IDAC_OFF    0x00
+#define ADS1220_IDAC_10     0x01
+#define ADS1220_IDAC_50     0x02
+#define ADS1220_IDAC_100    0x03
+#define ADS1220_IDAC_250    0x04
+#define ADS1220_IDAC_500    0x05
+#define ADS1220_IDAC_1000   0x06
+#define ADS1220_IDAC_2000   0x07
+
+/* ADS1220 Register 3 Definition */
+//   Bit 7   |   Bit 6   |   Bit 5   |   Bit 4   |   Bit 3   |   Bit 2   |   Bit 1   |   Bit 0 
+//--------------------------------------------------------------------------------------------
+//               I1MUX[2:0]          |               I2MUX[2:0]          |   DRDYM   | RESERVED
+//
+// Define I1MUX (current routing)
+#define ADS1220_IDAC1_OFF   0x00
+#define ADS1220_IDAC1_AIN0  0x20
+#define ADS1220_IDAC1_AIN1  0x40
+#define ADS1220_IDAC1_AIN2  0x60
+#define ADS1220_IDAC1_AIN3  0x80
+#define ADS1220_IDAC1_REFP0 0xa0
+#define ADS1220_IDAC1_REFN0 0xc0
+
+// Define I2MUX (current routing)
+#define ADS1220_IDAC2_OFF   0x00
+#define ADS1220_IDAC2_AIN0  0x04
+#define ADS1220_IDAC2_AIN1  0x08
+#define ADS1220_IDAC2_AIN2  0x0c
+#define ADS1220_IDAC2_AIN3  0x10
+#define ADS1220_IDAC2_REFP0 0x14
+#define ADS1220_IDAC2_REFN0 0x18
+
+// define DRDYM (DOUT/DRDY behaviour)
+
+#define ADS1220_DRDY_MODE   0x02
+
+class ADS1220 {
+public:
+
+    /** Create a new Digole Serial Display interface
+     *
+     * @param sda is the pin for I2C SDA
+     * @param scl is the pin for I2C SCL
+     * @param address is the 7-bit address (default is 0x27 for the device)
+     */
+    ADS1220(PinName mosi, PinName miso, PinName sclk);
+
+
+        /* Low Level ADS1220 Device Functions */
+        void Init(void);                         // Device intialization
+        int WaitForDataReady(int Timeout);       // DRDY polling 
+        void AssertCS(int fAssert);              // Assert/deassert CS
+        void SendByte(unsigned char cData );     // Send byte to the ADS1220
+        unsigned int ReceiveByte(void);          // Receive byte from the ADS1220
+
+        /* ADS1220 Higher Level Functions */
+        unsigned int ReadData(void);                     // Read the data results    
+        void ReadRegister(int StartAddress, int NumRegs, unsigned * pData);  // Read the register(s)
+        void WriteRegister(int StartAddress, int NumRegs, unsigned * pData); // Write the register(s)
+        void SendResetCommand(void);             // Send a device Reset Command
+        void SendStartCommand(void);             // Send a Start/SYNC command
+        void SendShutdownCommand(void);          // Place the device in powerdown mode
+
+
+        /* Register Set Value Commands */
+        void Config(void);
+        int SetChannel(int Mux);
+        int SetGain(int Gain);
+        int SetPGABypass(int Bypass);
+        int SetDataRate(int DataRate);
+        int SetClockMode(int ClockMode);
+        int SetPowerDown(int PowerDown);
+        int SetTemperatureMode(int TempMode);
+        int SetBurnOutSource(int BurnOut);
+        int SetVoltageReference(int VoltageRef);
+        int Set50_60Rejection(int Rejection);
+        int SetLowSidePowerSwitch(int PowerSwitch);
+        int SetCurrentDACOutput(int CurrentOutput);
+        int SetIDACRouting(int IDACRoute);
+        int SetDRDYMode(int DRDYMode);
+
+        /* Register Get Value Commands */
+        int GetChannel(void);
+        int GetGain(void);
+        int GetPGABypass(void);
+        int GetDataRate(void);
+        int GetClockMode(void);
+        int GetPowerDown(void);
+        int GetTemperatureMode(void);
+        int GetBurnOutSource(void);
+        int GetVoltageReference(void);
+        int Get50_60Rejection(void);
+        int GetLowSidePowerSwitch(void);
+        int GetCurrentDACOutput(void);
+        int GetIDACRouting(int WhichOne);
+        int GetDRDYMode(void);
+
+        /* Useful Functions within Main Program for Setting Register Contents
+        *
+        *   These functions show the programming flow based on the header definitions.
+        *   The calls are not made within the demo example, but could easily be used by calling the function
+        *       defined within the program to complete a fully useful program.
+        *   Similar function calls were made in the firwmare design for the ADS1220EVM.
+        *  
+        *  The following function calls use ASCII data sent from a COM port to control settings 
+        *   on the ADS1220.  The data is recontructed from ASCII and then combined with the
+        *   register contents to save as new configuration settings.
+        *
+        *   Function names correspond to datasheet register definitions
+        */
+        void set_MUX(char c);
+        void set_GAIN(char c);
+        void set_PGA_BYPASS(char c);
+        void set_DR(char c);
+        void set_MODE(char c);
+        void set_CM(char c);
+        void set_TS(char c);
+        void set_BCS(char c);
+        void set_VREF(char c);
+        void set_50_60(char c);
+        void set_PSW(char c);
+        void set_IDAC(char c);
+        void set_IMUX(char c, int i);
+        void set_DRDYM(char c);
+        void set_ERROR(void);
+        void set_ERROR_Transmit(void);
+        void set_ERROR_Receive(void);
+        
+private:
+    SPI _device;
+    uint8_t _address;
+    uint8_t _Comdelay;
+
+    size_t printNumber(unsigned long n, uint8_t base);
+    size_t printFloat(double number, uint8_t digits);
+};
+
+#endif /*ADS1220_H_*/