ADS1256 program

Committer:
laserdad
Date:
Fri Dec 01 21:31:48 2017 +0000
Revision:
0:897d3bb0accd
last known version;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
laserdad 0:897d3bb0accd 1 #ifndef __ADS1256_H__
laserdad 0:897d3bb0accd 2 #define __ADS1256_H__
laserdad 0:897d3bb0accd 3
laserdad 0:897d3bb0accd 4 #include "mbed.h"
laserdad 0:897d3bb0accd 5
laserdad 0:897d3bb0accd 6 #define ADS1256_SPI_MODE 1
laserdad 0:897d3bb0accd 7 #define DRATE_MAX 16
laserdad 0:897d3bb0accd 8 #define DEBUG
laserdad 0:897d3bb0accd 9
laserdad 0:897d3bb0accd 10 #define ADS1256_GAIN_1 0 /* GAIN 1 */
laserdad 0:897d3bb0accd 11 #define ADS1256_GAIN_2 1 /*GAIN 2 */
laserdad 0:897d3bb0accd 12 #define ADS1256_GAIN_4 2 /*GAIN 4 */
laserdad 0:897d3bb0accd 13 #define ADS1256_GAIN_8 3 /*GAIN 8 */
laserdad 0:897d3bb0accd 14 #define ADS1256_GAIN_16 4 /* GAIN 16 */
laserdad 0:897d3bb0accd 15 #define ADS1256_GAIN_32 5 /*GAIN 32 */
laserdad 0:897d3bb0accd 16 #define ADS1256_GAIN_64 6 /*GAIN 64 */
laserdad 0:897d3bb0accd 17
laserdad 0:897d3bb0accd 18
laserdad 0:897d3bb0accd 19 #define ADS1256_30000SPS 15
laserdad 0:897d3bb0accd 20 #define ADS1256_15000SPS 14
laserdad 0:897d3bb0accd 21 #define ADS1256_7500SPS 13
laserdad 0:897d3bb0accd 22 #define ADS1256_3750SPS 12
laserdad 0:897d3bb0accd 23 #define ADS1256_2000SPS 11
laserdad 0:897d3bb0accd 24 #define ADS1256_1000SPS 10
laserdad 0:897d3bb0accd 25 #define ADS1256_500SPS 9
laserdad 0:897d3bb0accd 26 #define ADS1256_100SPS 8
laserdad 0:897d3bb0accd 27 #define ADS1256_60SPS 7
laserdad 0:897d3bb0accd 28 #define ADS1256_50SPS 6
laserdad 0:897d3bb0accd 29 #define ADS1256_30SPS 5
laserdad 0:897d3bb0accd 30 #define ADS1256_25SPS 4
laserdad 0:897d3bb0accd 31 #define ADS1256_15SPS 3
laserdad 0:897d3bb0accd 32 #define ADS1256_10SPS 2
laserdad 0:897d3bb0accd 33 #define ADS1256_5SPS 1
laserdad 0:897d3bb0accd 34 #define ADS1256_2d5SPS 0
laserdad 0:897d3bb0accd 35
laserdad 0:897d3bb0accd 36
laserdad 0:897d3bb0accd 37 class ADS1256
laserdad 0:897d3bb0accd 38 {
laserdad 0:897d3bb0accd 39 SPI *spi;
laserdad 0:897d3bb0accd 40 DigitalOut *cs;
laserdad 0:897d3bb0accd 41 DigitalIn *nrdy;
laserdad 0:897d3bb0accd 42
laserdad 0:897d3bb0accd 43 public:
laserdad 0:897d3bb0accd 44 ADS1256(SPI *, DigitalIn *, DigitalOut *);
laserdad 0:897d3bb0accd 45 uint8_t gain;
laserdad 0:897d3bb0accd 46 uint8_t dataRate;
laserdad 0:897d3bb0accd 47 int32_t adcNow[8]; /* ADC Conversion value */
laserdad 0:897d3bb0accd 48 uint8_t channel; /* The current channel*/
laserdad 0:897d3bb0accd 49 uint8_t prevChannel; /* The previous channel --when muxing */
laserdad 0:897d3bb0accd 50 uint8_t scanMode; /*Scanning mode, 0 = Single-ended input 8 channel; 1= Differential input 4 channels*/
laserdad 0:897d3bb0accd 51 uint8_t buffer_en;
laserdad 0:897d3bb0accd 52 uint32_t maxWaitDelay_us;
laserdad 0:897d3bb0accd 53 /* gain channelî */
laserdad 0:897d3bb0accd 54
laserdad 0:897d3bb0accd 55
laserdad 0:897d3bb0accd 56 /* Sampling speed choice*/
laserdad 0:897d3bb0accd 57 /*
laserdad 0:897d3bb0accd 58 11110000 = 30,000SPS (default)
laserdad 0:897d3bb0accd 59 11100000 = 15,000SPS
laserdad 0:897d3bb0accd 60 11010000 = 7,500SPS
laserdad 0:897d3bb0accd 61 11000000 = 3,750SPS
laserdad 0:897d3bb0accd 62 10110000 = 2,000SPS
laserdad 0:897d3bb0accd 63 10100001 = 1,000SPS
laserdad 0:897d3bb0accd 64 10010010 = 500SPS
laserdad 0:897d3bb0accd 65 10000010 = 100SPS
laserdad 0:897d3bb0accd 66 01110010 = 60SPS
laserdad 0:897d3bb0accd 67 01100011 = 50SPS
laserdad 0:897d3bb0accd 68 01010011 = 30SPS
laserdad 0:897d3bb0accd 69 01000011 = 25SPS
laserdad 0:897d3bb0accd 70 00110011 = 15SPS
laserdad 0:897d3bb0accd 71 00100011 = 10SPS
laserdad 0:897d3bb0accd 72 00010011 = 5SPS
laserdad 0:897d3bb0accd 73 00000011 = 2.5SPS
laserdad 0:897d3bb0accd 74 */
laserdad 0:897d3bb0accd 75
laserdad 0:897d3bb0accd 76
laserdad 0:897d3bb0accd 77 /*Register definitions Table 23. Register Map --- ADS1256 datasheet Page 30*/
laserdad 0:897d3bb0accd 78 enum
laserdad 0:897d3bb0accd 79 {
laserdad 0:897d3bb0accd 80 /*Register address, followed by reset the default values */
laserdad 0:897d3bb0accd 81 REG_STATUS = 0, // x1H
laserdad 0:897d3bb0accd 82 REG_MUX = 1, // 01H
laserdad 0:897d3bb0accd 83 REG_ADCON = 2, // 20H
laserdad 0:897d3bb0accd 84 REG_DRATE = 3, // F0H
laserdad 0:897d3bb0accd 85 REG_IO = 4, // E0H
laserdad 0:897d3bb0accd 86 REG_OFC0 = 5, // xxH
laserdad 0:897d3bb0accd 87 REG_OFC1 = 6, // xxH
laserdad 0:897d3bb0accd 88 REG_OFC2 = 7, // xxH
laserdad 0:897d3bb0accd 89 REG_FSC0 = 8, // xxH
laserdad 0:897d3bb0accd 90 REG_FSC1 = 9, // xxH
laserdad 0:897d3bb0accd 91 REG_FSC2 = 10, // xxH
laserdad 0:897d3bb0accd 92 };
laserdad 0:897d3bb0accd 93
laserdad 0:897d3bb0accd 94 /* Command definition£º TTable 24. Command Definitions --- ADS1256 datasheet Page 34 */
laserdad 0:897d3bb0accd 95 enum
laserdad 0:897d3bb0accd 96 {
laserdad 0:897d3bb0accd 97 CMD_WAKEUP = 0x00, // Completes SYNC and Exits Standby Mode 0000 0000 (00h)
laserdad 0:897d3bb0accd 98 CMD_RDATA = 0x01, // Read Data 0000 0001 (01h)
laserdad 0:897d3bb0accd 99 CMD_RDATAC = 0x03, // Read Data Continuously 0000 0011 (03h)
laserdad 0:897d3bb0accd 100 CMD_SDATAC = 0x0F, // Stop Read Data Continuously 0000 1111 (0Fh)
laserdad 0:897d3bb0accd 101 CMD_RREG = 0x10, // Read from REG rrr 0001 rrrr (1xh)
laserdad 0:897d3bb0accd 102 CMD_WREG = 0x50, // Write to REG rrr 0101 rrrr (5xh)
laserdad 0:897d3bb0accd 103 CMD_SELFCAL = 0xF0, // Offset and Gain Self-Calibration 1111 0000 (F0h)
laserdad 0:897d3bb0accd 104 CMD_SELFOCAL= 0xF1, // Offset Self-Calibration 1111 0001 (F1h)
laserdad 0:897d3bb0accd 105 CMD_SELFGCAL= 0xF2, // Gain Self-Calibration 1111 0010 (F2h)
laserdad 0:897d3bb0accd 106 CMD_SYSOCAL = 0xF3, // System Offset Calibration 1111 0011 (F3h)
laserdad 0:897d3bb0accd 107 CMD_SYSGCAL = 0xF4, // System Gain Calibration 1111 0100 (F4h)
laserdad 0:897d3bb0accd 108 CMD_SYNC = 0xFC, // Synchronize the A/D Conversion 1111 1100 (FCh)
laserdad 0:897d3bb0accd 109 CMD_STANDBY = 0xFD, // Begin Standby Mode 1111 1101 (FDh)
laserdad 0:897d3bb0accd 110 CMD_RESET = 0xFE, // Reset to Power-Up Values 1111 1110 (FEh)
laserdad 0:897d3bb0accd 111 };
laserdad 0:897d3bb0accd 112
laserdad 0:897d3bb0accd 113
laserdad 0:897d3bb0accd 114
laserdad 0:897d3bb0accd 115
laserdad 0:897d3bb0accd 116
laserdad 0:897d3bb0accd 117 //declare functions
laserdad 0:897d3bb0accd 118 void setSpi(void);
laserdad 0:897d3bb0accd 119 void cfgADC(void);
laserdad 0:897d3bb0accd 120 void delayDATA(void);
laserdad 0:897d3bb0accd 121 void writeReg(uint8_t _RegID, uint8_t _RegValue);
laserdad 0:897d3bb0accd 122 uint8_t readReg(uint8_t _RegID);
laserdad 0:897d3bb0accd 123 void writeCmd(uint8_t _cmd);
laserdad 0:897d3bb0accd 124 uint8_t readChipID(void);
laserdad 0:897d3bb0accd 125 void setChannel();
laserdad 0:897d3bb0accd 126 void setDiffChannel();
laserdad 0:897d3bb0accd 127 void waitDRDY(void);
laserdad 0:897d3bb0accd 128 void waitNDRDY(void);
laserdad 0:897d3bb0accd 129 int32_t readData(void);
laserdad 0:897d3bb0accd 130 uint8_t getGainVal(void);
laserdad 0:897d3bb0accd 131 void isr(void);
laserdad 0:897d3bb0accd 132 uint8_t scan(void);
laserdad 0:897d3bb0accd 133 uint16_t voltageConvert(float Vref, float voltage);
laserdad 0:897d3bb0accd 134 void readDiffChannel(uint8_t);
laserdad 0:897d3bb0accd 135 uint32_t getDataRateVal_us(uint8_t);
laserdad 0:897d3bb0accd 136 void getMaxWaitDelay_us(void);
laserdad 0:897d3bb0accd 137 void resync(void);
laserdad 0:897d3bb0accd 138
laserdad 0:897d3bb0accd 139 };
laserdad 0:897d3bb0accd 140
laserdad 0:897d3bb0accd 141 #endif