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

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?

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