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