ADS1100 I2C 16bit ADC driver

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ADS1100.cpp Source File

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 }