ADS1246/7/8 24bit ADC converter for Temperature Sensors class

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?

UserRevisionLine numberNew 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