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 #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