ADT7310 temperature sensor driver

Dependents:   CN0396

ADT7310.cpp

Committer:
adisuciu
Date:
2016-11-07
Revision:
0:63996d24973b

File content as of revision 0:63996d24973b:

#include "ADT7310.h"


ADT7310::ADT7310(PinName CS, PinName MOSI, PinName MISO, PinName SCK) :/* miso(MISO),*/ adt7310(MOSI, MISO, SCK), cs(CS)
{
    cs = true;
    adt7310.format(8, SPI_MODE);
}

void ADT7310::reset()
{
    cs = false;
    adt7310.write(0xff);
    adt7310.write(0xff);
    adt7310.write(0xff);
    adt7310.write(0xff);
    cs = true;
}
uint8_t ADT7310::read_status()
{
    uint8_t spi_data[2] = {ADT7310_READ | (ADT7310_STATUS << 3), ADT7310_DUMMY};
    spi_read(spi_data, 2);
    return spi_data[1];
}

void ADT7310::start_single_conversion()
{
    uint8_t spi_data[2] = {ADT7310_READ | (ADT7310_CONFIG << 3), ADT7310_DUMMY};
    spi_read(spi_data, 2);
    spi_data[0] = ADT7310_WRITE | (ADT7310_CONFIG << 3);
    spi_data[1] = (spi_data[1] & (~(0x60))) |  (0x20); // Oneshot conversion
    spi_write(spi_data, 2);
}
void ADT7310::write_config(uint8_t data)
{
    uint8_t spi_data[2] = {ADT7310_WRITE | (ADT7310_CONFIG << 3), data};
    spi_write(spi_data, 2);
}

uint8_t ADT7310::read_config()
{
    uint8_t spi_data[2] = {ADT7310_READ | (ADT7310_CONFIG << 3), ADT7310_DUMMY};
    spi_read(spi_data, 2);
    return spi_data[1];
}
uint16_t ADT7310::read_temp()
{
    uint8_t spi_data[3] = {ADT7310_READ | (ADT7310_TEMP << 3), ADT7310_DUMMY, ADT7310_DUMMY };
    spi_read(spi_data, 3);
    return ((static_cast<uint16_t>(spi_data[1]) << 8) | spi_data[2]);
}
void ADT7310::write_temp_setpoint(uint8_t setpoint, uint16_t data)
{
    uint8_t spi_data[3] = {ADT7310_WRITE | (setpoint << 3), ((data & 0xff00) >> 8), data & 0xff };
    spi_write(spi_data, 3);
}

void ADT7310::spi_write(uint8_t *data, uint8_t size)
{
    cs = false;
    uint8_t i;
    for(i = 0; i < size; i++)
        adt7310.write(data[i]);
    cs = true;

}
void ADT7310::spi_read(uint8_t *data, uint8_t size)
{
    cs = false;
    uint8_t i;
    for(i = 0; i < size; i++)
        data[i] = adt7310.write(data[i]);

    cs = true;
}