ADS1256 program
ADS1256.h@0:897d3bb0accd, 2017-12-01 (annotated)
- Committer:
- laserdad
- Date:
- Fri Dec 01 21:31:48 2017 +0000
- Revision:
- 0:897d3bb0accd
last known version;
Who changed what in which revision?
User | Revision | Line number | New 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 |