ADS1246/7/8 24bit ADC converter for Temperature Sensors class
ADS1248.cpp@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 | #include "ADS1248.h" |
mederic | 0:e015f99b8dfb | 2 | |
mederic | 1:d62be7487e9d | 3 | #define ADS1248_HOLD_TIME_US 2 |
mederic | 1:d62be7487e9d | 4 | |
mederic | 0:e015f99b8dfb | 5 | //***********************************/************************************ |
mederic | 0:e015f99b8dfb | 6 | // Constructors // |
mederic | 0:e015f99b8dfb | 7 | //***********************************/************************************ |
mederic | 0:e015f99b8dfb | 8 | ADS1248::ADS1248(SPI& spi, PinName cs, PinName rdy, PinName start):_spi(spi),_cs(cs),_rdy(rdy),_start(start){ |
mederic | 0:e015f99b8dfb | 9 | |
mederic | 0:e015f99b8dfb | 10 | _cs = 0; |
mederic | 0:e015f99b8dfb | 11 | _start = 1; |
mederic | 0:e015f99b8dfb | 12 | _spi.format(8,1); |
mederic | 0:e015f99b8dfb | 13 | wait(0.016); |
mederic | 0:e015f99b8dfb | 14 | _cs = 1; |
mederic | 0:e015f99b8dfb | 15 | } |
mederic | 0:e015f99b8dfb | 16 | |
mederic | 0:e015f99b8dfb | 17 | //***********************************/************************************ |
mederic | 0:e015f99b8dfb | 18 | // Public Methods // |
mederic | 0:e015f99b8dfb | 19 | //***********************************/************************************ |
mederic | 0:e015f99b8dfb | 20 | void ADS1248::start(bool en){ |
mederic | 0:e015f99b8dfb | 21 | _start = en; |
mederic | 0:e015f99b8dfb | 22 | } |
mederic | 0:e015f99b8dfb | 23 | |
mederic | 0:e015f99b8dfb | 24 | void ADS1248::waitReady(void){ |
mederic | 0:e015f99b8dfb | 25 | while(!_rdy); |
mederic | 0:e015f99b8dfb | 26 | while(_rdy); |
mederic | 0:e015f99b8dfb | 27 | } |
mederic | 0:e015f99b8dfb | 28 | |
mederic | 0:e015f99b8dfb | 29 | void ADS1248::sleep(bool en){ |
mederic | 0:e015f99b8dfb | 30 | _start = 1; |
mederic | 0:e015f99b8dfb | 31 | _cs = 0; |
mederic | 0:e015f99b8dfb | 32 | _spi.write(en<<1); |
mederic | 1:d62be7487e9d | 33 | wait_us(ADS1248_HOLD_TIME_US); |
mederic | 0:e015f99b8dfb | 34 | _cs = 1; |
mederic | 1:d62be7487e9d | 35 | wait_us(ADS1248_HOLD_TIME_US); |
mederic | 0:e015f99b8dfb | 36 | waitReady(); |
mederic | 0:e015f99b8dfb | 37 | } |
mederic | 0:e015f99b8dfb | 38 | |
mederic | 0:e015f99b8dfb | 39 | void ADS1248::sync(void){ |
mederic | 0:e015f99b8dfb | 40 | _start = 1; |
mederic | 0:e015f99b8dfb | 41 | _cs = 0; |
mederic | 0:e015f99b8dfb | 42 | _spi.write(SYNC); |
mederic | 0:e015f99b8dfb | 43 | _spi.write(SYNC); |
mederic | 1:d62be7487e9d | 44 | wait_us(ADS1248_HOLD_TIME_US); |
mederic | 1:d62be7487e9d | 45 | _cs = 1; |
mederic | 1:d62be7487e9d | 46 | wait_us(ADS1248_HOLD_TIME_US); |
mederic | 0:e015f99b8dfb | 47 | } |
mederic | 0:e015f99b8dfb | 48 | |
mederic | 0:e015f99b8dfb | 49 | void ADS1248::reset(void){ |
mederic | 0:e015f99b8dfb | 50 | _start = 1; |
mederic | 0:e015f99b8dfb | 51 | _cs = 0; |
mederic | 0:e015f99b8dfb | 52 | _spi.write(RESET); |
mederic | 1:d62be7487e9d | 53 | wait_us(ADS1248_HOLD_TIME_US); |
mederic | 1:d62be7487e9d | 54 | _cs = 1; |
mederic | 1:d62be7487e9d | 55 | wait_us(ADS1248_HOLD_TIME_US); |
mederic | 0:e015f99b8dfb | 56 | wait_us(600); |
mederic | 0:e015f99b8dfb | 57 | } |
mederic | 0:e015f99b8dfb | 58 | |
mederic | 0:e015f99b8dfb | 59 | |
mederic | 0:e015f99b8dfb | 60 | int ADS1248::read(void){ |
mederic | 0:e015f99b8dfb | 61 | int data; |
mederic | 0:e015f99b8dfb | 62 | _start = 1; |
mederic | 0:e015f99b8dfb | 63 | waitReady(); |
mederic | 0:e015f99b8dfb | 64 | _cs = 0; |
mederic | 0:e015f99b8dfb | 65 | _spi.write(RDATA); |
mederic | 0:e015f99b8dfb | 66 | data = ((_spi.write(0)<<24)&0xFF000000); |
mederic | 0:e015f99b8dfb | 67 | data |=((_spi.write(0)<<16)&0x00FF0000); |
mederic | 0:e015f99b8dfb | 68 | data |=((_spi.write(0)<< 8)&0x0000FF00); |
mederic | 0:e015f99b8dfb | 69 | data >>= 8; |
mederic | 0:e015f99b8dfb | 70 | data &= 0xfffffff8; |
mederic | 1:d62be7487e9d | 71 | wait_us(ADS1248_HOLD_TIME_US); |
mederic | 0:e015f99b8dfb | 72 | _cs = 1; |
mederic | 1:d62be7487e9d | 73 | wait_us(ADS1248_HOLD_TIME_US); |
mederic | 0:e015f99b8dfb | 74 | return data; |
mederic | 0:e015f99b8dfb | 75 | } |
mederic | 0:e015f99b8dfb | 76 | |
mederic | 0:e015f99b8dfb | 77 | ADS1248::operator int(){ |
mederic | 0:e015f99b8dfb | 78 | return read(); |
mederic | 0:e015f99b8dfb | 79 | } |
mederic | 0:e015f99b8dfb | 80 | |
mederic | 0:e015f99b8dfb | 81 | |
mederic | 0:e015f99b8dfb | 82 | void ADS1248::readReg(unsigned char reg, unsigned char *buff, int len){ |
mederic | 0:e015f99b8dfb | 83 | _start = 1; |
mederic | 0:e015f99b8dfb | 84 | _cs = 0; |
mederic | 0:e015f99b8dfb | 85 | _spi.write(RREG|(reg&0x0F)); |
mederic | 0:e015f99b8dfb | 86 | _spi.write(len-1); |
mederic | 0:e015f99b8dfb | 87 | while(len--){ |
mederic | 0:e015f99b8dfb | 88 | *(buff++) = _spi.write(0); |
mederic | 1:d62be7487e9d | 89 | } |
mederic | 1:d62be7487e9d | 90 | wait_us(ADS1248_HOLD_TIME_US); |
mederic | 0:e015f99b8dfb | 91 | _cs = 1; |
mederic | 1:d62be7487e9d | 92 | wait_us(ADS1248_HOLD_TIME_US); |
mederic | 0:e015f99b8dfb | 93 | } |
mederic | 0:e015f99b8dfb | 94 | |
mederic | 0:e015f99b8dfb | 95 | unsigned char ADS1248::readReg(unsigned char reg){ |
mederic | 0:e015f99b8dfb | 96 | unsigned char ret; |
mederic | 0:e015f99b8dfb | 97 | readReg(reg,&ret,1); |
mederic | 0:e015f99b8dfb | 98 | return ret; |
mederic | 0:e015f99b8dfb | 99 | } |
mederic | 0:e015f99b8dfb | 100 | |
mederic | 0:e015f99b8dfb | 101 | void ADS1248::writeReg(unsigned char reg, const unsigned char *buff, int len){ |
mederic | 0:e015f99b8dfb | 102 | _start = 1; |
mederic | 0:e015f99b8dfb | 103 | _cs = 0; |
mederic | 0:e015f99b8dfb | 104 | _spi.write(WREG|(reg&0x0F)); |
mederic | 0:e015f99b8dfb | 105 | _spi.write(len-1); |
mederic | 0:e015f99b8dfb | 106 | while(len--){ |
mederic | 0:e015f99b8dfb | 107 | _spi.write(*(buff++)); |
mederic | 1:d62be7487e9d | 108 | } |
mederic | 1:d62be7487e9d | 109 | wait_us(ADS1248_HOLD_TIME_US); |
mederic | 0:e015f99b8dfb | 110 | _cs = 1; |
mederic | 1:d62be7487e9d | 111 | wait_us(ADS1248_HOLD_TIME_US); |
mederic | 0:e015f99b8dfb | 112 | } |
mederic | 0:e015f99b8dfb | 113 | |
mederic | 0:e015f99b8dfb | 114 | void ADS1248::writeReg(unsigned char reg, unsigned char val){ |
mederic | 0:e015f99b8dfb | 115 | writeReg(reg,&val,1); |
mederic | 0:e015f99b8dfb | 116 | } |
mederic | 0:e015f99b8dfb | 117 | |
mederic | 0:e015f99b8dfb | 118 | void ADS1248::systemOffsetCal(void){ |
mederic | 0:e015f99b8dfb | 119 | _start = 1; |
mederic | 0:e015f99b8dfb | 120 | _cs = 0; |
mederic | 0:e015f99b8dfb | 121 | _spi.write(SYSOCAL); |
mederic | 1:d62be7487e9d | 122 | wait_us(ADS1248_HOLD_TIME_US); |
mederic | 0:e015f99b8dfb | 123 | _cs = 1; |
mederic | 1:d62be7487e9d | 124 | wait_us(ADS1248_HOLD_TIME_US); |
mederic | 0:e015f99b8dfb | 125 | waitReady(); |
mederic | 0:e015f99b8dfb | 126 | } |
mederic | 0:e015f99b8dfb | 127 | |
mederic | 0:e015f99b8dfb | 128 | void ADS1248::systemGainCal(void){ |
mederic | 0:e015f99b8dfb | 129 | _start = 1; |
mederic | 0:e015f99b8dfb | 130 | _cs = 0; |
mederic | 0:e015f99b8dfb | 131 | _spi.write(SYSGCAL); |
mederic | 1:d62be7487e9d | 132 | wait_us(ADS1248_HOLD_TIME_US); |
mederic | 0:e015f99b8dfb | 133 | _cs = 1; |
mederic | 1:d62be7487e9d | 134 | wait_us(ADS1248_HOLD_TIME_US); |
mederic | 0:e015f99b8dfb | 135 | waitReady(); |
mederic | 0:e015f99b8dfb | 136 | } |
mederic | 0:e015f99b8dfb | 137 | |
mederic | 0:e015f99b8dfb | 138 | void ADS1248::selfOffsetCal(void){ |
mederic | 0:e015f99b8dfb | 139 | _start = 1; |
mederic | 0:e015f99b8dfb | 140 | _cs = 0; |
mederic | 0:e015f99b8dfb | 141 | _spi.write(SELFOCAL); |
mederic | 1:d62be7487e9d | 142 | wait_us(ADS1248_HOLD_TIME_US); |
mederic | 0:e015f99b8dfb | 143 | _cs = 1; |
mederic | 0:e015f99b8dfb | 144 | waitReady(); |
mederic | 0:e015f99b8dfb | 145 | } |
mederic | 0:e015f99b8dfb | 146 |