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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ADS1248.cpp Source File

ADS1248.cpp

00001 #include "ADS1248.h"
00002 
00003 #define ADS1248_HOLD_TIME_US        2
00004 
00005 //***********************************/************************************
00006 //                         Constructors                                 //
00007 //***********************************/************************************
00008 ADS1248::ADS1248(SPI& spi, PinName cs, PinName rdy, PinName start):_spi(spi),_cs(cs),_rdy(rdy),_start(start){
00009       
00010     _cs = 0;
00011     _start = 1; 
00012     _spi.format(8,1);
00013     wait(0.016);
00014     _cs = 1;
00015 }
00016 
00017 //***********************************/************************************
00018 //                             Public Methods                           //
00019 //***********************************/************************************ 
00020 void ADS1248::start(bool en){
00021     _start = en;
00022 }
00023 
00024 void ADS1248::waitReady(void){
00025     while(!_rdy);
00026     while(_rdy);
00027 }
00028 
00029 void ADS1248::sleep(bool en){
00030     _start = 1;
00031     _cs = 0;
00032     _spi.write(en<<1);
00033     wait_us(ADS1248_HOLD_TIME_US);
00034     _cs = 1;
00035     wait_us(ADS1248_HOLD_TIME_US);
00036     waitReady();
00037 }
00038 
00039 void ADS1248::sync(void){
00040     _start = 1;  
00041     _cs = 0;
00042     _spi.write(SYNC);
00043     _spi.write(SYNC);
00044     wait_us(ADS1248_HOLD_TIME_US);
00045     _cs = 1;
00046     wait_us(ADS1248_HOLD_TIME_US);   
00047 }
00048 
00049 void ADS1248::reset(void){
00050     _start = 1;  
00051     _cs = 0;
00052     _spi.write(RESET);
00053     wait_us(ADS1248_HOLD_TIME_US);
00054     _cs = 1;
00055     wait_us(ADS1248_HOLD_TIME_US); 
00056     wait_us(600);    
00057 }
00058 
00059 
00060 int ADS1248::read(void){
00061     int data;    
00062     _start = 1;
00063     waitReady();
00064     _cs = 0;
00065     _spi.write(RDATA);
00066     data = ((_spi.write(0)<<24)&0xFF000000);
00067     data |=((_spi.write(0)<<16)&0x00FF0000);
00068     data |=((_spi.write(0)<< 8)&0x0000FF00);
00069     data >>= 8;
00070     data &= 0xfffffff8;
00071     wait_us(ADS1248_HOLD_TIME_US);
00072     _cs = 1;
00073     wait_us(ADS1248_HOLD_TIME_US);
00074     return data;
00075 }
00076 
00077 ADS1248::operator int(){
00078     return read();
00079 }
00080 
00081 
00082 void ADS1248::readReg(unsigned char reg, unsigned char *buff, int len){
00083     _start = 1;
00084     _cs = 0;
00085     _spi.write(RREG|(reg&0x0F));
00086     _spi.write(len-1);
00087     while(len--){
00088         *(buff++) = _spi.write(0);
00089     }
00090     wait_us(ADS1248_HOLD_TIME_US);
00091     _cs = 1;
00092     wait_us(ADS1248_HOLD_TIME_US);
00093 }
00094 
00095 unsigned char ADS1248::readReg(unsigned char reg){
00096     unsigned char ret;
00097     readReg(reg,&ret,1);
00098     return ret;
00099 }
00100 
00101 void ADS1248::writeReg(unsigned char reg, const unsigned char *buff, int len){
00102     _start = 1;
00103     _cs = 0;
00104     _spi.write(WREG|(reg&0x0F));
00105     _spi.write(len-1);
00106     while(len--){
00107         _spi.write(*(buff++));
00108     }
00109     wait_us(ADS1248_HOLD_TIME_US);
00110     _cs = 1;
00111     wait_us(ADS1248_HOLD_TIME_US);
00112 }
00113 
00114 void ADS1248::writeReg(unsigned char reg, unsigned char val){
00115     writeReg(reg,&val,1);
00116 }
00117 
00118 void ADS1248::systemOffsetCal(void){
00119     _start = 1;
00120     _cs = 0;
00121     _spi.write(SYSOCAL);
00122     wait_us(ADS1248_HOLD_TIME_US);
00123     _cs = 1;
00124     wait_us(ADS1248_HOLD_TIME_US);
00125     waitReady();
00126 }
00127 
00128 void ADS1248::systemGainCal(void){
00129     _start = 1;
00130     _cs = 0;
00131     _spi.write(SYSGCAL);
00132     wait_us(ADS1248_HOLD_TIME_US);
00133     _cs = 1;
00134     wait_us(ADS1248_HOLD_TIME_US);
00135     waitReady();  
00136 }
00137 
00138 void ADS1248::selfOffsetCal(void){
00139     _start = 1;
00140     _cs = 0;
00141     _spi.write(SELFOCAL);
00142     wait_us(ADS1248_HOLD_TIME_US);
00143     _cs = 1;
00144     waitReady();
00145 }
00146