ADS1100 I2C 16bit ADC driver
ADS1100.cpp
- Committer:
- mederic
- Date:
- 2018-07-23
- Revision:
- 0:5198300978ab
File content as of revision 0:5198300978ab:
#include "ADS1100.h" #define ADS1100_DR_BIT 2 #define ADS1100_SC_BIT 4 #define ADS1100_ST_BIT 7 #define ADS1100_BSY_BIT 7 ADS1100::ADS1100(I2C* i2c, char ad):_i2c(i2c){ _addr = I2C_ADDR | (ad<<1); config(false, 8, 1); } float ADS1100::read(float vdd){ int max = -_minCode * _gain; return double(read_s16()) * vdd / double(max); } short ADS1100::read_s16(void){ return readReg(&_config); } short ADS1100::readReg(char* config){ char buf[3]; _i2c->read(_addr,buf,3); *config = buf[2]; return (buf[0]<<8) | (buf[1]&0xff); } void ADS1100::config(bool single, char rate, char gain){ for(_config=0; _config<4; _config++){ if(1==(gain>>_config)){ break; } } switch (rate){ case 128: _config |= 0 << ADS1100_DR_BIT; _minCode = -2048; break; case 32: _config |= 1 << ADS1100_DR_BIT; _minCode = -8192; break; case 16: _config |= 2 << ADS1100_DR_BIT; _minCode = -16384; break; case 8: _config |= 3 << ADS1100_DR_BIT; _minCode = -32768; break; default: _config |= 3 << ADS1100_DR_BIT; _minCode = -32768; break; }; _config |= single << ADS1100_SC_BIT; _i2c->write(_addr, &_config, 1); _gain = gain; } void ADS1100::startConvert(void){ _config |= 1<<ADS1100_BSY_BIT; _i2c->write(_addr, &_config, 1); } bool ADS1100::busy(void){ readReg(&_config); return _config & (1<<ADS1100_BSY_BIT); }