ADS1246/7/8 24bit ADC converter for Temperature Sensors class
ADS1248.h@1:d62be7487e9d, 2016-01-19 (annotated)
- Committer:
- mederic
- Date:
- Tue Jan 19 07:52:07 2016 +0000
- Revision:
- 1:d62be7487e9d
- Parent:
- 0:e015f99b8dfb
Increase hold time before & after release the CS pin
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mederic | 0:e015f99b8dfb | 1 | #ifndef ADS1248_H |
mederic | 0:e015f99b8dfb | 2 | #define ADS1248_H |
mederic | 0:e015f99b8dfb | 3 | |
mederic | 0:e015f99b8dfb | 4 | #include "mbed.h" |
mederic | 0:e015f99b8dfb | 5 | /** ADS1248 class. |
mederic | 0:e015f99b8dfb | 6 | * Used for read ADS1248/7/6 Temperature ADC |
mederic | 0:e015f99b8dfb | 7 | * |
mederic | 0:e015f99b8dfb | 8 | */ |
mederic | 0:e015f99b8dfb | 9 | class ADS1248 |
mederic | 0:e015f99b8dfb | 10 | { |
mederic | 0:e015f99b8dfb | 11 | public: |
mederic | 0:e015f99b8dfb | 12 | /** Create ADS1248 instance |
mederic | 0:e015f99b8dfb | 13 | * @param SPI SPI bus to use |
mederic | 0:e015f99b8dfb | 14 | * @param cs pin to connect at CS input |
mederic | 0:e015f99b8dfb | 15 | * @param rdy pin connect at !rdy output |
mederic | 0:e015f99b8dfb | 16 | * @param start pin connect at start inpout (pullup if unused) |
mederic | 0:e015f99b8dfb | 17 | */ |
mederic | 0:e015f99b8dfb | 18 | ADS1248(SPI& spi, PinName cs, PinName rdy, PinName start = NC); |
mederic | 0:e015f99b8dfb | 19 | |
mederic | 0:e015f99b8dfb | 20 | /** register name list of ADS1248 |
mederic | 0:e015f99b8dfb | 21 | */ |
mederic | 0:e015f99b8dfb | 22 | enum reg{ |
mederic | 0:e015f99b8dfb | 23 | MUX0 = 0x00, |
mederic | 0:e015f99b8dfb | 24 | VBIAS = 0x01, |
mederic | 0:e015f99b8dfb | 25 | MUX1 = 0x02, |
mederic | 0:e015f99b8dfb | 26 | SYS0 = 0x03, |
mederic | 0:e015f99b8dfb | 27 | OFC0 = 0x04, |
mederic | 0:e015f99b8dfb | 28 | OFC1 = 0x05, |
mederic | 0:e015f99b8dfb | 29 | OFC2 = 0x06, |
mederic | 0:e015f99b8dfb | 30 | FSC0 = 0x07, |
mederic | 0:e015f99b8dfb | 31 | FSC1 = 0x08, |
mederic | 0:e015f99b8dfb | 32 | FSC2 = 0x09, |
mederic | 0:e015f99b8dfb | 33 | IDAC0 = 0x0A, |
mederic | 0:e015f99b8dfb | 34 | IDAC1 = 0x0B, |
mederic | 0:e015f99b8dfb | 35 | GPIOCFG = 0x0C, |
mederic | 0:e015f99b8dfb | 36 | GPIODIR = 0x0D, |
mederic | 0:e015f99b8dfb | 37 | GPIODAT = 0x0E}; |
mederic | 0:e015f99b8dfb | 38 | |
mederic | 0:e015f99b8dfb | 39 | /** commande list of ADS1248 |
mederic | 0:e015f99b8dfb | 40 | */ |
mederic | 0:e015f99b8dfb | 41 | enum cmd{ |
mederic | 0:e015f99b8dfb | 42 | WAKEUP = 0x00, |
mederic | 0:e015f99b8dfb | 43 | SLEEP = 0x02, |
mederic | 0:e015f99b8dfb | 44 | SYNC = 0x04, |
mederic | 0:e015f99b8dfb | 45 | RESET = 0x06, |
mederic | 0:e015f99b8dfb | 46 | NOP = 0xff, |
mederic | 0:e015f99b8dfb | 47 | RDATA = 0x12, |
mederic | 0:e015f99b8dfb | 48 | RDATAC = 0x14, |
mederic | 0:e015f99b8dfb | 49 | SDATAC = 0x16, |
mederic | 0:e015f99b8dfb | 50 | RREG = 0x20, |
mederic | 0:e015f99b8dfb | 51 | WREG = 0x40, |
mederic | 0:e015f99b8dfb | 52 | SYSOCAL = 0x60, |
mederic | 0:e015f99b8dfb | 53 | SYSGCAL = 0x61, |
mederic | 0:e015f99b8dfb | 54 | SELFOCAL= 0x62}; |
mederic | 0:e015f99b8dfb | 55 | |
mederic | 0:e015f99b8dfb | 56 | /** Access to output start pin |
mederic | 0:e015f99b8dfb | 57 | * @param en start pin state |
mederic | 0:e015f99b8dfb | 58 | */ |
mederic | 0:e015f99b8dfb | 59 | void start(bool en); |
mederic | 0:e015f99b8dfb | 60 | |
mederic | 0:e015f99b8dfb | 61 | /** Wait ADS1248 to be ready (pooling method) |
mederic | 0:e015f99b8dfb | 62 | */ |
mederic | 0:e015f99b8dfb | 63 | void waitReady(void); |
mederic | 0:e015f99b8dfb | 64 | |
mederic | 0:e015f99b8dfb | 65 | /** Sleep cmd of ADS1248 (ask waitReady) |
mederic | 0:e015f99b8dfb | 66 | * @param en for wakeup or sleep |
mederic | 0:e015f99b8dfb | 67 | */ |
mederic | 0:e015f99b8dfb | 68 | void sleep(bool en); |
mederic | 0:e015f99b8dfb | 69 | |
mederic | 0:e015f99b8dfb | 70 | /** Synchronisation cmd of ADS1248 |
mederic | 0:e015f99b8dfb | 71 | */ |
mederic | 0:e015f99b8dfb | 72 | void sync(void); |
mederic | 0:e015f99b8dfb | 73 | |
mederic | 0:e015f99b8dfb | 74 | /** Reset cmd of ADS1248 |
mederic | 0:e015f99b8dfb | 75 | */ |
mederic | 0:e015f99b8dfb | 76 | void reset(void); |
mederic | 0:e015f99b8dfb | 77 | |
mederic | 0:e015f99b8dfb | 78 | /** Read data when conversion was finished (ask waitReady) |
mederic | 0:e015f99b8dfb | 79 | * @return 24bit data 2's complement |
mederic | 0:e015f99b8dfb | 80 | */ |
mederic | 0:e015f99b8dfb | 81 | int read(void); |
mederic | 0:e015f99b8dfb | 82 | |
mederic | 0:e015f99b8dfb | 83 | /** Ask read |
mederic | 0:e015f99b8dfb | 84 | * @return 24bit data 2's complement |
mederic | 0:e015f99b8dfb | 85 | */ |
mederic | 0:e015f99b8dfb | 86 | operator int(); |
mederic | 0:e015f99b8dfb | 87 | |
mederic | 0:e015f99b8dfb | 88 | /** Read ADS1248 register |
mederic | 0:e015f99b8dfb | 89 | * @param reg is register address |
mederic | 0:e015f99b8dfb | 90 | * @return register value |
mederic | 0:e015f99b8dfb | 91 | */ |
mederic | 0:e015f99b8dfb | 92 | unsigned char readReg(unsigned char reg); |
mederic | 0:e015f99b8dfb | 93 | |
mederic | 0:e015f99b8dfb | 94 | /** Read ADS1248 registers |
mederic | 0:e015f99b8dfb | 95 | * @param reg is first register address |
mederic | 0:e015f99b8dfb | 96 | * @param buff pointer on buffer to write |
mederic | 0:e015f99b8dfb | 97 | * @param len lenght of data to read |
mederic | 0:e015f99b8dfb | 98 | */ |
mederic | 0:e015f99b8dfb | 99 | void readReg(unsigned char reg, unsigned char *buff, int len); |
mederic | 0:e015f99b8dfb | 100 | |
mederic | 0:e015f99b8dfb | 101 | /** Write ADS1248 register |
mederic | 0:e015f99b8dfb | 102 | * @param reg is register address |
mederic | 0:e015f99b8dfb | 103 | * @param val value to write |
mederic | 0:e015f99b8dfb | 104 | */ |
mederic | 0:e015f99b8dfb | 105 | void writeReg(unsigned char reg, unsigned char val); |
mederic | 0:e015f99b8dfb | 106 | |
mederic | 0:e015f99b8dfb | 107 | /** Write ADS1248 registers |
mederic | 0:e015f99b8dfb | 108 | * @param reg is first register address |
mederic | 0:e015f99b8dfb | 109 | * @param buff pointer on buffer to read |
mederic | 0:e015f99b8dfb | 110 | * @param len lenght of data to write |
mederic | 0:e015f99b8dfb | 111 | */ |
mederic | 0:e015f99b8dfb | 112 | void writeReg(unsigned char reg, const unsigned char *buff, int len); |
mederic | 0:e015f99b8dfb | 113 | |
mederic | 0:e015f99b8dfb | 114 | /** System Offset Calibration cmd of ADS1248 (ask waitReady) |
mederic | 0:e015f99b8dfb | 115 | */ |
mederic | 0:e015f99b8dfb | 116 | void systemOffsetCal(void); |
mederic | 0:e015f99b8dfb | 117 | |
mederic | 0:e015f99b8dfb | 118 | /** System Gain Calibration cmd of ADS1248 (ask waitReady) |
mederic | 0:e015f99b8dfb | 119 | */ |
mederic | 0:e015f99b8dfb | 120 | void systemGainCal(void); |
mederic | 0:e015f99b8dfb | 121 | |
mederic | 0:e015f99b8dfb | 122 | /** Self Offset Calibration cmd of ADS1248 (ask waitReady) |
mederic | 0:e015f99b8dfb | 123 | */ |
mederic | 0:e015f99b8dfb | 124 | void selfOffsetCal(void); |
mederic | 0:e015f99b8dfb | 125 | |
mederic | 0:e015f99b8dfb | 126 | |
mederic | 0:e015f99b8dfb | 127 | private: |
mederic | 0:e015f99b8dfb | 128 | SPI& _spi; |
mederic | 0:e015f99b8dfb | 129 | DigitalOut _cs; |
mederic | 0:e015f99b8dfb | 130 | DigitalIn _rdy; |
mederic | 0:e015f99b8dfb | 131 | DigitalOut _start; |
mederic | 0:e015f99b8dfb | 132 | }; |
mederic | 0:e015f99b8dfb | 133 | |
mederic | 0:e015f99b8dfb | 134 | #endif |