ADS1246/7/8 24bit ADC converter for Temperature Sensors class
ADS1248.cpp
- Committer:
- mederic
- Date:
- 2016-01-19
- Revision:
- 1:d62be7487e9d
- Parent:
- 0:e015f99b8dfb
File content as of revision 1:d62be7487e9d:
#include "ADS1248.h" #define ADS1248_HOLD_TIME_US 2 //***********************************/************************************ // 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(ADS1248_HOLD_TIME_US); _cs = 1; wait_us(ADS1248_HOLD_TIME_US); waitReady(); } void ADS1248::sync(void){ _start = 1; _cs = 0; _spi.write(SYNC); _spi.write(SYNC); wait_us(ADS1248_HOLD_TIME_US); _cs = 1; wait_us(ADS1248_HOLD_TIME_US); } void ADS1248::reset(void){ _start = 1; _cs = 0; _spi.write(RESET); wait_us(ADS1248_HOLD_TIME_US); _cs = 1; wait_us(ADS1248_HOLD_TIME_US); 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(ADS1248_HOLD_TIME_US); _cs = 1; wait_us(ADS1248_HOLD_TIME_US); 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(ADS1248_HOLD_TIME_US); _cs = 1; wait_us(ADS1248_HOLD_TIME_US); } 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(ADS1248_HOLD_TIME_US); _cs = 1; wait_us(ADS1248_HOLD_TIME_US); } 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(ADS1248_HOLD_TIME_US); _cs = 1; wait_us(ADS1248_HOLD_TIME_US); waitReady(); } void ADS1248::systemGainCal(void){ _start = 1; _cs = 0; _spi.write(SYSGCAL); wait_us(ADS1248_HOLD_TIME_US); _cs = 1; wait_us(ADS1248_HOLD_TIME_US); waitReady(); } void ADS1248::selfOffsetCal(void){ _start = 1; _cs = 0; _spi.write(SELFOCAL); wait_us(ADS1248_HOLD_TIME_US); _cs = 1; waitReady(); }