A collection of Analog Devices drivers for the mbed platform
For additional information check out the mbed page of the Analog Devices wiki: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
libraries/ADT7310/ADT7310.cpp@33:c3ec596a29c2, 2016-11-07 (annotated)
- Committer:
- Adrian Suciu
- Date:
- Mon Nov 07 16:27:12 2016 +0200
- Revision:
- 33:c3ec596a29c2
Added CN0391, CN0396 and CN0397 shields
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Adrian Suciu |
33:c3ec596a29c2 | 1 | #include "ADT7310.h" |
| Adrian Suciu |
33:c3ec596a29c2 | 2 | |
| Adrian Suciu |
33:c3ec596a29c2 | 3 | |
| Adrian Suciu |
33:c3ec596a29c2 | 4 | ADT7310::ADT7310(PinName CS, PinName MOSI, PinName MISO, PinName SCK) :/* miso(MISO),*/ adt7310(MOSI, MISO, SCK), cs(CS) |
| Adrian Suciu |
33:c3ec596a29c2 | 5 | { |
| Adrian Suciu |
33:c3ec596a29c2 | 6 | cs = true; |
| Adrian Suciu |
33:c3ec596a29c2 | 7 | adt7310.format(8, SPI_MODE); |
| Adrian Suciu |
33:c3ec596a29c2 | 8 | } |
| Adrian Suciu |
33:c3ec596a29c2 | 9 | |
| Adrian Suciu |
33:c3ec596a29c2 | 10 | void ADT7310::reset() |
| Adrian Suciu |
33:c3ec596a29c2 | 11 | { |
| Adrian Suciu |
33:c3ec596a29c2 | 12 | cs = false; |
| Adrian Suciu |
33:c3ec596a29c2 | 13 | adt7310.write(0xff); |
| Adrian Suciu |
33:c3ec596a29c2 | 14 | adt7310.write(0xff); |
| Adrian Suciu |
33:c3ec596a29c2 | 15 | adt7310.write(0xff); |
| Adrian Suciu |
33:c3ec596a29c2 | 16 | adt7310.write(0xff); |
| Adrian Suciu |
33:c3ec596a29c2 | 17 | cs = true; |
| Adrian Suciu |
33:c3ec596a29c2 | 18 | } |
| Adrian Suciu |
33:c3ec596a29c2 | 19 | uint8_t ADT7310::read_status() |
| Adrian Suciu |
33:c3ec596a29c2 | 20 | { |
| Adrian Suciu |
33:c3ec596a29c2 | 21 | uint8_t spi_data[2] = {ADT7310_READ | (ADT7310_STATUS << 3), ADT7310_DUMMY}; |
| Adrian Suciu |
33:c3ec596a29c2 | 22 | spi_read(spi_data, 2); |
| Adrian Suciu |
33:c3ec596a29c2 | 23 | return spi_data[1]; |
| Adrian Suciu |
33:c3ec596a29c2 | 24 | } |
| Adrian Suciu |
33:c3ec596a29c2 | 25 | |
| Adrian Suciu |
33:c3ec596a29c2 | 26 | void ADT7310::start_single_conversion() |
| Adrian Suciu |
33:c3ec596a29c2 | 27 | { |
| Adrian Suciu |
33:c3ec596a29c2 | 28 | uint8_t spi_data[2] = {ADT7310_READ | (ADT7310_CONFIG << 3), ADT7310_DUMMY}; |
| Adrian Suciu |
33:c3ec596a29c2 | 29 | spi_read(spi_data, 2); |
| Adrian Suciu |
33:c3ec596a29c2 | 30 | spi_data[0] = ADT7310_WRITE | (ADT7310_CONFIG << 3); |
| Adrian Suciu |
33:c3ec596a29c2 | 31 | spi_data[1] = (spi_data[1] & (~(0x60))) | (0x20); // Oneshot conversion |
| Adrian Suciu |
33:c3ec596a29c2 | 32 | spi_write(spi_data, 2); |
| Adrian Suciu |
33:c3ec596a29c2 | 33 | } |
| Adrian Suciu |
33:c3ec596a29c2 | 34 | void ADT7310::write_config(uint8_t data) |
| Adrian Suciu |
33:c3ec596a29c2 | 35 | { |
| Adrian Suciu |
33:c3ec596a29c2 | 36 | uint8_t spi_data[2] = {ADT7310_WRITE | (ADT7310_CONFIG << 3), data}; |
| Adrian Suciu |
33:c3ec596a29c2 | 37 | spi_write(spi_data, 2); |
| Adrian Suciu |
33:c3ec596a29c2 | 38 | } |
| Adrian Suciu |
33:c3ec596a29c2 | 39 | |
| Adrian Suciu |
33:c3ec596a29c2 | 40 | uint8_t ADT7310::read_config() |
| Adrian Suciu |
33:c3ec596a29c2 | 41 | { |
| Adrian Suciu |
33:c3ec596a29c2 | 42 | uint8_t spi_data[2] = {ADT7310_READ | (ADT7310_CONFIG << 3), ADT7310_DUMMY}; |
| Adrian Suciu |
33:c3ec596a29c2 | 43 | spi_read(spi_data, 2); |
| Adrian Suciu |
33:c3ec596a29c2 | 44 | return spi_data[1]; |
| Adrian Suciu |
33:c3ec596a29c2 | 45 | } |
| Adrian Suciu |
33:c3ec596a29c2 | 46 | uint16_t ADT7310::read_temp() |
| Adrian Suciu |
33:c3ec596a29c2 | 47 | { |
| Adrian Suciu |
33:c3ec596a29c2 | 48 | uint8_t spi_data[3] = {ADT7310_READ | (ADT7310_TEMP << 3), ADT7310_DUMMY, ADT7310_DUMMY }; |
| Adrian Suciu |
33:c3ec596a29c2 | 49 | spi_read(spi_data, 3); |
| Adrian Suciu |
33:c3ec596a29c2 | 50 | return ((static_cast<uint16_t>(spi_data[1]) << 8) | spi_data[2]); |
| Adrian Suciu |
33:c3ec596a29c2 | 51 | } |
| Adrian Suciu |
33:c3ec596a29c2 | 52 | void ADT7310::write_temp_setpoint(uint8_t setpoint, uint16_t data) |
| Adrian Suciu |
33:c3ec596a29c2 | 53 | { |
| Adrian Suciu |
33:c3ec596a29c2 | 54 | uint8_t spi_data[3] = {ADT7310_WRITE | (setpoint << 3), ((data & 0xff00) >> 8), data & 0xff }; |
| Adrian Suciu |
33:c3ec596a29c2 | 55 | spi_write(spi_data, 3); |
| Adrian Suciu |
33:c3ec596a29c2 | 56 | } |
| Adrian Suciu |
33:c3ec596a29c2 | 57 | |
| Adrian Suciu |
33:c3ec596a29c2 | 58 | void ADT7310::spi_write(uint8_t *data, uint8_t size) |
| Adrian Suciu |
33:c3ec596a29c2 | 59 | { |
| Adrian Suciu |
33:c3ec596a29c2 | 60 | cs = false; |
| Adrian Suciu |
33:c3ec596a29c2 | 61 | uint8_t i; |
| Adrian Suciu |
33:c3ec596a29c2 | 62 | for(i = 0; i < size; i++) |
| Adrian Suciu |
33:c3ec596a29c2 | 63 | adt7310.write(data[i]); |
| Adrian Suciu |
33:c3ec596a29c2 | 64 | cs = true; |
| Adrian Suciu |
33:c3ec596a29c2 | 65 | |
| Adrian Suciu |
33:c3ec596a29c2 | 66 | } |
| Adrian Suciu |
33:c3ec596a29c2 | 67 | void ADT7310::spi_read(uint8_t *data, uint8_t size) |
| Adrian Suciu |
33:c3ec596a29c2 | 68 | { |
| Adrian Suciu |
33:c3ec596a29c2 | 69 | cs = false; |
| Adrian Suciu |
33:c3ec596a29c2 | 70 | uint8_t i; |
| Adrian Suciu |
33:c3ec596a29c2 | 71 | for(i = 0; i < size; i++) |
| Adrian Suciu |
33:c3ec596a29c2 | 72 | data[i] = adt7310.write(data[i]); |
| Adrian Suciu |
33:c3ec596a29c2 | 73 | |
| Adrian Suciu |
33:c3ec596a29c2 | 74 | cs = true; |
| Adrian Suciu |
33:c3ec596a29c2 | 75 | } |
CN0357 - Toxic gas measurement
CN0216 - Weight Scale