ADS1256 program

ADS1256.h

Committer:
laserdad
Date:
2017-12-01
Revision:
0:897d3bb0accd

File content as of revision 0:897d3bb0accd:

#ifndef __ADS1256_H__
#define __ADS1256_H__

#include "mbed.h"

#define ADS1256_SPI_MODE 1
#define DRATE_MAX 16
#define DEBUG

#define ADS1256_GAIN_1 0 /* GAIN   1 */
#define ADS1256_GAIN_2 1  /*GAIN   2 */
#define ADS1256_GAIN_4 2  /*GAIN   4 */
#define ADS1256_GAIN_8 3  /*GAIN   8 */
#define ADS1256_GAIN_16 4  /* GAIN  16 */
#define ADS1256_GAIN_32 5  /*GAIN    32 */
#define ADS1256_GAIN_64 6  /*GAIN    64 */


#define ADS1256_30000SPS 15
#define ADS1256_15000SPS 14
#define ADS1256_7500SPS 13
#define ADS1256_3750SPS 12
#define ADS1256_2000SPS 11
#define ADS1256_1000SPS 10
#define ADS1256_500SPS 9
#define ADS1256_100SPS 8
#define ADS1256_60SPS 7
#define ADS1256_50SPS 6
#define ADS1256_30SPS 5
#define ADS1256_25SPS 4
#define ADS1256_15SPS 3
#define ADS1256_10SPS 2
#define ADS1256_5SPS 1
#define ADS1256_2d5SPS 0


class ADS1256
{
    SPI *spi;
    DigitalOut *cs;
    DigitalIn *nrdy;
    
    public:
    ADS1256(SPI *, DigitalIn *, DigitalOut *);
    uint8_t gain;
    uint8_t dataRate;
    int32_t adcNow[8];          /* ADC  Conversion value */
    uint8_t channel;            /* The current channel*/
    uint8_t prevChannel;        /* The previous channel --when muxing */
    uint8_t scanMode;   /*Scanning mode,   0 = Single-ended input  8 channel; 1= Differential input  4 channels*/
    uint8_t buffer_en;
    uint32_t maxWaitDelay_us;
        /* gain channelî */

    
    /* Sampling speed choice*/
    /* 
        11110000 = 30,000SPS (default)
        11100000 = 15,000SPS
        11010000 = 7,500SPS
        11000000 = 3,750SPS
        10110000 = 2,000SPS
        10100001 = 1,000SPS
        10010010 = 500SPS
        10000010 = 100SPS
        01110010 = 60SPS
        01100011 = 50SPS
        01010011 = 30SPS
        01000011 = 25SPS
        00110011 = 15SPS
        00100011 = 10SPS
        00010011 = 5SPS
        00000011 = 2.5SPS
    */

    
    /*Register definitions Table 23. Register Map --- ADS1256 datasheet Page 30*/
    enum
    {
        /*Register address, followed by reset the default values */
        REG_STATUS = 0, // x1H
        REG_MUX    = 1, // 01H
        REG_ADCON  = 2, // 20H
        REG_DRATE  = 3, // F0H
        REG_IO     = 4, // E0H
        REG_OFC0   = 5, // xxH
        REG_OFC1   = 6, // xxH
        REG_OFC2   = 7, // xxH
        REG_FSC0   = 8, // xxH
        REG_FSC1   = 9, // xxH
        REG_FSC2   = 10, // xxH
    };
    
    /* Command definition£º TTable 24. Command Definitions --- ADS1256 datasheet Page 34 */
    enum
    {
        CMD_WAKEUP  = 0x00, // Completes SYNC and Exits Standby Mode 0000  0000 (00h)
        CMD_RDATA   = 0x01, // Read Data 0000  0001 (01h)
        CMD_RDATAC  = 0x03, // Read Data Continuously 0000   0011 (03h)
        CMD_SDATAC  = 0x0F, // Stop Read Data Continuously 0000   1111 (0Fh)
        CMD_RREG    = 0x10, // Read from REG rrr 0001 rrrr (1xh)
        CMD_WREG    = 0x50, // Write to REG rrr 0101 rrrr (5xh)
        CMD_SELFCAL = 0xF0, // Offset and Gain Self-Calibration 1111    0000 (F0h)
        CMD_SELFOCAL= 0xF1, // Offset Self-Calibration 1111    0001 (F1h)
        CMD_SELFGCAL= 0xF2, // Gain Self-Calibration 1111    0010 (F2h)
        CMD_SYSOCAL = 0xF3, // System Offset Calibration 1111   0011 (F3h)
        CMD_SYSGCAL = 0xF4, // System Gain Calibration 1111    0100 (F4h)
        CMD_SYNC    = 0xFC, // Synchronize the A/D Conversion 1111   1100 (FCh)
        CMD_STANDBY = 0xFD, // Begin Standby Mode 1111   1101 (FDh)
        CMD_RESET   = 0xFE, // Reset to Power-Up Values 1111   1110 (FEh)
    };

    


    
    //declare functions
    void setSpi(void);
    void cfgADC(void);
    void delayDATA(void);
    void writeReg(uint8_t _RegID, uint8_t _RegValue);
    uint8_t readReg(uint8_t _RegID);
    void writeCmd(uint8_t _cmd);
    uint8_t readChipID(void);
    void setChannel();
    void setDiffChannel();
    void waitDRDY(void);
    void waitNDRDY(void);
    int32_t readData(void);
    uint8_t getGainVal(void);
    void isr(void);
    uint8_t scan(void);
    uint16_t voltageConvert(float Vref, float voltage);
    void readDiffChannel(uint8_t);
    uint32_t getDataRateVal_us(uint8_t);
    void getMaxWaitDelay_us(void);
    void resync(void);

};

#endif