ADS1246/7/8 24bit ADC converter for Temperature Sensors class
Embed:
(wiki syntax)
Show/hide line numbers
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
Generated on Sat Jul 16 2022 23:46:51 by 1.7.2