ADS1100 I2C 16bit ADC driver
Embed:
(wiki syntax)
Show/hide line numbers
ADS1100.cpp
00001 #include "ADS1100.h" 00002 00003 #define ADS1100_DR_BIT 2 00004 #define ADS1100_SC_BIT 4 00005 #define ADS1100_ST_BIT 7 00006 #define ADS1100_BSY_BIT 7 00007 00008 ADS1100::ADS1100(I2C* i2c, char ad):_i2c(i2c){ 00009 _addr = I2C_ADDR | (ad<<1); 00010 config(false, 8, 1); 00011 } 00012 00013 float ADS1100::read(float vdd){ 00014 int max = -_minCode * _gain; 00015 return double(read_s16()) * vdd / double(max); 00016 } 00017 00018 short ADS1100::read_s16(void){ 00019 return readReg(&_config); 00020 } 00021 00022 short ADS1100::readReg(char* config){ 00023 char buf[3]; 00024 _i2c->read(_addr,buf,3); 00025 *config = buf[2]; 00026 return (buf[0]<<8) | (buf[1]&0xff); 00027 } 00028 00029 void ADS1100::config(bool single, char rate, char gain){ 00030 for(_config=0; _config<4; _config++){ 00031 if(1==(gain>>_config)){ 00032 break; 00033 } 00034 } 00035 switch (rate){ 00036 case 128: 00037 _config |= 0 << ADS1100_DR_BIT; 00038 _minCode = -2048; 00039 break; 00040 case 32: 00041 _config |= 1 << ADS1100_DR_BIT; 00042 _minCode = -8192; 00043 break; 00044 case 16: 00045 _config |= 2 << ADS1100_DR_BIT; 00046 _minCode = -16384; 00047 break; 00048 case 8: 00049 _config |= 3 << ADS1100_DR_BIT; 00050 _minCode = -32768; 00051 break; 00052 default: 00053 _config |= 3 << ADS1100_DR_BIT; 00054 _minCode = -32768; 00055 break; 00056 }; 00057 _config |= single << ADS1100_SC_BIT; 00058 _i2c->write(_addr, &_config, 1); 00059 _gain = gain; 00060 } 00061 00062 void ADS1100::startConvert(void){ 00063 _config |= 1<<ADS1100_BSY_BIT; 00064 _i2c->write(_addr, &_config, 1); 00065 } 00066 00067 bool ADS1100::busy(void){ 00068 readReg(&_config); 00069 return _config & (1<<ADS1100_BSY_BIT); 00070 }
Generated on Wed Jul 13 2022 14:22:43 by 1.7.2