ADS1015 library

Dependents:   s-rov-firmware

ads1015.cpp

Committer:
YJ_Kim
Date:
2017-01-26
Revision:
2:2407708483f4
Parent:
0:b3c2afab9578

File content as of revision 2:2407708483f4:

#include "ads1015.h"

ADS1015::ADS1015(uint8_t i2c_addr, I2C* i2c_object, uint16_t adc_gain):
    ADS1015_ADDR(i2c_addr << 1),
    i2c(i2c_object),
    m_gain(adc_gain)
{}

uint16_t ADS1015::read_single_channel(int ch){
    if(ch > 3)
        return 0;
        
    uint16_t config = ADS1015_CONFIG_COMP_QUE_NONE    | // disable comparator
                      ADS1015_CONFIG_COMP_LAT_NONE    | // nonlatching comparator
                      ADS1015_CONFIG_COMP_POL_ACTVLOW | // Alert/Rdy active low
                      ADS1015_CONFIG_COMP_MODE_TRAD           | // Traditional comparator
                      ADS1015_CONFIG_DR_1600SPS       | // Data rate : 1600sps
                      ADS1015_CONFIG_MODE_SINGLE      | // Single shot mode
                      m_gain;                           // Set gain
                      
    switch(ch){
        case 0 :
            config |= ADS1015_CONFIG_MUX_SINGLE_0;
            break;
        case 1 :
            config |= ADS1015_CONFIG_MUX_SINGLE_1;
            break;
        case 2 :
            config |= ADS1015_CONFIG_MUX_SINGLE_2;
            break;
        case 3 :
            config |= ADS1015_CONFIG_MUX_SINGLE_3;
            break;                      
    }
    
    config |= ADS1015_CONFIG_OS_START_CONV;
    
    write_16(ADS1015_REG_CONFIG, config);
    wait_ms(ADS1015_CONVERSIONDELAY);
    return read_16(ADS1015_REG_CONVERSION) >> 4;                          
}

void ADS1015::write_16(uint8_t reg, uint16_t msg){
    char cmd[3];
    cmd[0] = reg;
    cmd[1] = (char)(msg>>8);
    cmd[2] = (char)(msg & 0xff);

    i2c->write(ADS1015_ADDR, cmd, 3);
}

uint16_t ADS1015::read_16(uint8_t reg){
    char cmd[2];
    cmd[0] = reg;
    i2c->write(ADS1015_ADDR, cmd, 1);
    i2c->read(ADS1015_ADDR, cmd, 2);
    return (cmd[0] << 8 | cmd[1]);    
}