ADT7310 temperature sensor driver

Dependents:   CN0396

Committer:
adisuciu
Date:
Mon Nov 07 15:46:14 2016 +0000
Revision:
0:63996d24973b
Initial revision

Who changed what in which revision?

UserRevisionLine numberNew contents of line
adisuciu 0:63996d24973b 1 #include "ADT7310.h"
adisuciu 0:63996d24973b 2
adisuciu 0:63996d24973b 3
adisuciu 0:63996d24973b 4 ADT7310::ADT7310(PinName CS, PinName MOSI, PinName MISO, PinName SCK) :/* miso(MISO),*/ adt7310(MOSI, MISO, SCK), cs(CS)
adisuciu 0:63996d24973b 5 {
adisuciu 0:63996d24973b 6 cs = true;
adisuciu 0:63996d24973b 7 adt7310.format(8, SPI_MODE);
adisuciu 0:63996d24973b 8 }
adisuciu 0:63996d24973b 9
adisuciu 0:63996d24973b 10 void ADT7310::reset()
adisuciu 0:63996d24973b 11 {
adisuciu 0:63996d24973b 12 cs = false;
adisuciu 0:63996d24973b 13 adt7310.write(0xff);
adisuciu 0:63996d24973b 14 adt7310.write(0xff);
adisuciu 0:63996d24973b 15 adt7310.write(0xff);
adisuciu 0:63996d24973b 16 adt7310.write(0xff);
adisuciu 0:63996d24973b 17 cs = true;
adisuciu 0:63996d24973b 18 }
adisuciu 0:63996d24973b 19 uint8_t ADT7310::read_status()
adisuciu 0:63996d24973b 20 {
adisuciu 0:63996d24973b 21 uint8_t spi_data[2] = {ADT7310_READ | (ADT7310_STATUS << 3), ADT7310_DUMMY};
adisuciu 0:63996d24973b 22 spi_read(spi_data, 2);
adisuciu 0:63996d24973b 23 return spi_data[1];
adisuciu 0:63996d24973b 24 }
adisuciu 0:63996d24973b 25
adisuciu 0:63996d24973b 26 void ADT7310::start_single_conversion()
adisuciu 0:63996d24973b 27 {
adisuciu 0:63996d24973b 28 uint8_t spi_data[2] = {ADT7310_READ | (ADT7310_CONFIG << 3), ADT7310_DUMMY};
adisuciu 0:63996d24973b 29 spi_read(spi_data, 2);
adisuciu 0:63996d24973b 30 spi_data[0] = ADT7310_WRITE | (ADT7310_CONFIG << 3);
adisuciu 0:63996d24973b 31 spi_data[1] = (spi_data[1] & (~(0x60))) | (0x20); // Oneshot conversion
adisuciu 0:63996d24973b 32 spi_write(spi_data, 2);
adisuciu 0:63996d24973b 33 }
adisuciu 0:63996d24973b 34 void ADT7310::write_config(uint8_t data)
adisuciu 0:63996d24973b 35 {
adisuciu 0:63996d24973b 36 uint8_t spi_data[2] = {ADT7310_WRITE | (ADT7310_CONFIG << 3), data};
adisuciu 0:63996d24973b 37 spi_write(spi_data, 2);
adisuciu 0:63996d24973b 38 }
adisuciu 0:63996d24973b 39
adisuciu 0:63996d24973b 40 uint8_t ADT7310::read_config()
adisuciu 0:63996d24973b 41 {
adisuciu 0:63996d24973b 42 uint8_t spi_data[2] = {ADT7310_READ | (ADT7310_CONFIG << 3), ADT7310_DUMMY};
adisuciu 0:63996d24973b 43 spi_read(spi_data, 2);
adisuciu 0:63996d24973b 44 return spi_data[1];
adisuciu 0:63996d24973b 45 }
adisuciu 0:63996d24973b 46 uint16_t ADT7310::read_temp()
adisuciu 0:63996d24973b 47 {
adisuciu 0:63996d24973b 48 uint8_t spi_data[3] = {ADT7310_READ | (ADT7310_TEMP << 3), ADT7310_DUMMY, ADT7310_DUMMY };
adisuciu 0:63996d24973b 49 spi_read(spi_data, 3);
adisuciu 0:63996d24973b 50 return ((static_cast<uint16_t>(spi_data[1]) << 8) | spi_data[2]);
adisuciu 0:63996d24973b 51 }
adisuciu 0:63996d24973b 52 void ADT7310::write_temp_setpoint(uint8_t setpoint, uint16_t data)
adisuciu 0:63996d24973b 53 {
adisuciu 0:63996d24973b 54 uint8_t spi_data[3] = {ADT7310_WRITE | (setpoint << 3), ((data & 0xff00) >> 8), data & 0xff };
adisuciu 0:63996d24973b 55 spi_write(spi_data, 3);
adisuciu 0:63996d24973b 56 }
adisuciu 0:63996d24973b 57
adisuciu 0:63996d24973b 58 void ADT7310::spi_write(uint8_t *data, uint8_t size)
adisuciu 0:63996d24973b 59 {
adisuciu 0:63996d24973b 60 cs = false;
adisuciu 0:63996d24973b 61 uint8_t i;
adisuciu 0:63996d24973b 62 for(i = 0; i < size; i++)
adisuciu 0:63996d24973b 63 adt7310.write(data[i]);
adisuciu 0:63996d24973b 64 cs = true;
adisuciu 0:63996d24973b 65
adisuciu 0:63996d24973b 66 }
adisuciu 0:63996d24973b 67 void ADT7310::spi_read(uint8_t *data, uint8_t size)
adisuciu 0:63996d24973b 68 {
adisuciu 0:63996d24973b 69 cs = false;
adisuciu 0:63996d24973b 70 uint8_t i;
adisuciu 0:63996d24973b 71 for(i = 0; i < size; i++)
adisuciu 0:63996d24973b 72 data[i] = adt7310.write(data[i]);
adisuciu 0:63996d24973b 73
adisuciu 0:63996d24973b 74 cs = true;
adisuciu 0:63996d24973b 75 }