ADS1246/7/8 24bit ADC converter for Temperature Sensors class
Diff: ADS1248.cpp
- Revision:
- 0:e015f99b8dfb
- Child:
- 1:d62be7487e9d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ADS1248.cpp Wed Sep 17 08:20:38 2014 +0000 @@ -0,0 +1,137 @@ +#include "ADS1248.h" + +//***********************************/************************************ +// Constructors // +//***********************************/************************************ +ADS1248::ADS1248(SPI& spi, PinName cs, PinName rdy, PinName start):_spi(spi),_cs(cs),_rdy(rdy),_start(start){ + + _cs = 0; + _start = 1; + _spi.format(8,1); + wait(0.016); + _cs = 1; +} + +//***********************************/************************************ +// Public Methods // +//***********************************/************************************ +void ADS1248::start(bool en){ + _start = en; +} + +void ADS1248::waitReady(void){ + while(!_rdy); + while(_rdy); +} + +void ADS1248::sleep(bool en){ + _start = 1; + _cs = 0; + _spi.write(en<<1); + wait_us(1); + _cs = 1; + waitReady(); +} + +void ADS1248::sync(void){ + _start = 1; + _cs = 0; + _spi.write(SYNC); + _spi.write(SYNC); + wait_us(1); + _cs = 1; +} + +void ADS1248::reset(void){ + _start = 1; + _cs = 0; + _spi.write(RESET); + wait_us(1); + _cs = 1; + wait_us(600); +} + + +int ADS1248::read(void){ + int data; + _start = 1; + waitReady(); + _cs = 0; + _spi.write(RDATA); + data = ((_spi.write(0)<<24)&0xFF000000); + data |=((_spi.write(0)<<16)&0x00FF0000); + data |=((_spi.write(0)<< 8)&0x0000FF00); + data >>= 8; + data &= 0xfffffff8; + wait_us(1); + _cs = 1; + wait_us(1); + return data; +} + +ADS1248::operator int(){ + return read(); +} + + +void ADS1248::readReg(unsigned char reg, unsigned char *buff, int len){ + _start = 1; + _cs = 0; + _spi.write(RREG|(reg&0x0F)); + _spi.write(len-1); + while(len--){ + *(buff++) = _spi.write(0); + }wait_us(1); + _cs = 1; + wait_us(1); +} + +unsigned char ADS1248::readReg(unsigned char reg){ + unsigned char ret; + readReg(reg,&ret,1); + return ret; +} + +void ADS1248::writeReg(unsigned char reg, const unsigned char *buff, int len){ + _start = 1; + _cs = 0; + _spi.write(WREG|(reg&0x0F)); + _spi.write(len-1); + while(len--){ + _spi.write(*(buff++)); + }wait_us(1); + _cs = 1; + wait_us(1); +} + +void ADS1248::writeReg(unsigned char reg, unsigned char val){ + writeReg(reg,&val,1); +} + +void ADS1248::systemOffsetCal(void){ + _start = 1; + _cs = 0; + _spi.write(SYSOCAL); + wait_us(1); + _cs = 1; + waitReady(); +} + +void ADS1248::systemGainCal(void){ + _start = 1; + _cs = 0; + _spi.write(SYSGCAL); + wait_us(1); + _cs = 1; + waitReady(); +} + +void ADS1248::selfOffsetCal(void){ + _start = 1; + _cs = 0; + _spi.write(SELFOCAL); + wait_us(1); + _cs = 1; + waitReady(); +} +