Analog Devices / ADT7410 16-Bit Digital I2C Temperature Sensor

Dependents:   Frequency_Counter_w_GPS_1PPS MQTToverCC3000 Frequency_Cntr_1PPS_F746ZG

Committer:
kenjiArai
Date:
Wed Aug 23 09:19:57 2017 +0000
Revision:
4:523b5b34e0c9
Parent:
3:912cd5ac1cce
countermeasure for  NonCopyable

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:6ec4df1fa459 1 /*
kenjiArai 0:6ec4df1fa459 2 * mbed library program
kenjiArai 0:6ec4df1fa459 3 * Analog Devices / ADT7410 16-Bit Digital I2C Temperature Sensor
kenjiArai 0:6ec4df1fa459 4 * http://www.analog.com/en/mems-sensors/digital-temperature-sensors/adt7410/products/product.html
kenjiArai 0:6ec4df1fa459 5 *
kenjiArai 4:523b5b34e0c9 6 * Copyright (c) 2014,'15,'17 Kenji Arai / JH1PJL
kenjiArai 0:6ec4df1fa459 7 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:6ec4df1fa459 8 * http://mbed.org/users/kenjiArai/
kenjiArai 4:523b5b34e0c9 9 * Created: November 26th, 2014
kenjiArai 4:523b5b34e0c9 10 * Revised: FAugust 23rd, 2017
kenjiArai 0:6ec4df1fa459 11 */
kenjiArai 0:6ec4df1fa459 12
kenjiArai 0:6ec4df1fa459 13 #include "mbed.h"
kenjiArai 0:6ec4df1fa459 14 #include "ADT7410.h"
kenjiArai 0:6ec4df1fa459 15
kenjiArai 4:523b5b34e0c9 16 ADT7410::ADT7410 (PinName p_sda, PinName p_scl, uint8_t addr)
kenjiArai 4:523b5b34e0c9 17 : _i2c_p(new I2C(p_sda, p_scl)), _i2c(*_i2c_p)
kenjiArai 0:6ec4df1fa459 18 {
kenjiArai 0:6ec4df1fa459 19 ADT7410_addr = (char)addr;
kenjiArai 0:6ec4df1fa459 20 init();
kenjiArai 0:6ec4df1fa459 21 }
kenjiArai 0:6ec4df1fa459 22
kenjiArai 4:523b5b34e0c9 23 ADT7410::ADT7410 (I2C& p_i2c, uint8_t addr)
kenjiArai 4:523b5b34e0c9 24 : _i2c(p_i2c)
kenjiArai 0:6ec4df1fa459 25 {
kenjiArai 0:6ec4df1fa459 26 ADT7410_addr = (char)addr;
kenjiArai 0:6ec4df1fa459 27 init();
kenjiArai 0:6ec4df1fa459 28 }
kenjiArai 0:6ec4df1fa459 29
kenjiArai 0:6ec4df1fa459 30 /////////////// Read All data /////////////////////////////
kenjiArai 0:6ec4df1fa459 31 void ADT7410::read_all()
kenjiArai 0:6ec4df1fa459 32 {
kenjiArai 0:6ec4df1fa459 33 dt[0] = ADT7410_A_T_MSB;
kenjiArai 2:231bddd40e29 34 _i2c.write((int)ADT7410_addr, (char *)dt, 1, true);
kenjiArai 2:231bddd40e29 35 _i2c.read((int)ADT7410_addr, (char *)dt, 4, false);
kenjiArai 0:6ec4df1fa459 36 }
kenjiArai 0:6ec4df1fa459 37
kenjiArai 0:6ec4df1fa459 38 /////////////// Read Temperature //////////////////////////
kenjiArai 0:6ec4df1fa459 39 float ADT7410::read_temp()
kenjiArai 0:6ec4df1fa459 40 {
kenjiArai 1:4a1eb0f32025 41 uint16_t data;
kenjiArai 1:4a1eb0f32025 42
kenjiArai 1:4a1eb0f32025 43 read_all();
kenjiArai 1:4a1eb0f32025 44 if (dt[3] & 0x80){ // 16bit
kenjiArai 2:231bddd40e29 45 data = (dt[0] << 8) + dt[1];
kenjiArai 1:4a1eb0f32025 46 } else { // 13bit
kenjiArai 1:4a1eb0f32025 47 data = (dt[0] << 8) + (dt[1] & 0xf8);
kenjiArai 1:4a1eb0f32025 48 }
kenjiArai 1:4a1eb0f32025 49 if (dt[0] & 0x80){ // -
kenjiArai 2:231bddd40e29 50 return (float)(data - 65536) / 128;
kenjiArai 1:4a1eb0f32025 51 } else { // +
kenjiArai 1:4a1eb0f32025 52 return (float)data / 128;
kenjiArai 1:4a1eb0f32025 53 }
kenjiArai 0:6ec4df1fa459 54 }
kenjiArai 0:6ec4df1fa459 55
kenjiArai 0:6ec4df1fa459 56 /////////////// Check Status //////////////////////////////
kenjiArai 0:6ec4df1fa459 57 uint8_t ADT7410::read_status()
kenjiArai 0:6ec4df1fa459 58 {
kenjiArai 1:4a1eb0f32025 59 int8_t dt = read_reg_byte(ADT7410_A_STATUS);
kenjiArai 1:4a1eb0f32025 60 return dt;
kenjiArai 0:6ec4df1fa459 61 }
kenjiArai 0:6ec4df1fa459 62
kenjiArai 0:6ec4df1fa459 63 /////////////// Check Configration //////////////////////////
kenjiArai 0:6ec4df1fa459 64 uint8_t ADT7410::read_config()
kenjiArai 0:6ec4df1fa459 65 {
kenjiArai 1:4a1eb0f32025 66 int8_t dt = read_reg_byte(ADT7410_A_CONFIG);
kenjiArai 1:4a1eb0f32025 67 return dt;
kenjiArai 0:6ec4df1fa459 68 }
kenjiArai 0:6ec4df1fa459 69
kenjiArai 0:6ec4df1fa459 70 /////////////// Set Configration //////////////////////////
kenjiArai 0:6ec4df1fa459 71 uint8_t ADT7410::set_config(uint8_t cfg)
kenjiArai 0:6ec4df1fa459 72 {
kenjiArai 1:4a1eb0f32025 73 return write_reg_byte(ADT7410_A_CONFIG, cfg);
kenjiArai 1:4a1eb0f32025 74 }
kenjiArai 1:4a1eb0f32025 75
kenjiArai 1:4a1eb0f32025 76 /////////////// Read ID & REV //////////////////////////
kenjiArai 1:4a1eb0f32025 77 void ADT7410::read_id_rev()
kenjiArai 1:4a1eb0f32025 78 {
kenjiArai 1:4a1eb0f32025 79 uint8_t dt;
kenjiArai 0:6ec4df1fa459 80
kenjiArai 1:4a1eb0f32025 81 dt = read_reg_byte(ADT7410_A_ID);
kenjiArai 1:4a1eb0f32025 82 id_number = GET_ID(dt);
kenjiArai 1:4a1eb0f32025 83 rev_number = GET_REV(dt);
kenjiArai 1:4a1eb0f32025 84 }
kenjiArai 1:4a1eb0f32025 85
kenjiArai 1:4a1eb0f32025 86 uint8_t ADT7410::read_ID()
kenjiArai 1:4a1eb0f32025 87 {
kenjiArai 1:4a1eb0f32025 88 return id_number;
kenjiArai 1:4a1eb0f32025 89 }
kenjiArai 1:4a1eb0f32025 90
kenjiArai 1:4a1eb0f32025 91 uint8_t ADT7410::read_REV()
kenjiArai 1:4a1eb0f32025 92 {
kenjiArai 1:4a1eb0f32025 93 return rev_number;
kenjiArai 0:6ec4df1fa459 94 }
kenjiArai 0:6ec4df1fa459 95
kenjiArai 1:4a1eb0f32025 96 uint8_t ADT7410::who_am_i()
kenjiArai 0:6ec4df1fa459 97 {
kenjiArai 1:4a1eb0f32025 98 if (id_number == I_AM_ADT7410){
kenjiArai 1:4a1eb0f32025 99 return 1;
kenjiArai 1:4a1eb0f32025 100 } else {
kenjiArai 1:4a1eb0f32025 101 return 0;
kenjiArai 1:4a1eb0f32025 102 }
kenjiArai 0:6ec4df1fa459 103 }
kenjiArai 0:6ec4df1fa459 104
kenjiArai 1:4a1eb0f32025 105 /////////////// Read/Write specific register //////////////
kenjiArai 1:4a1eb0f32025 106 uint8_t ADT7410::read_reg_byte(uint8_t reg)
kenjiArai 0:6ec4df1fa459 107 {
kenjiArai 1:4a1eb0f32025 108 uint8_t dx[2];
kenjiArai 1:4a1eb0f32025 109
kenjiArai 1:4a1eb0f32025 110 dx[0] = reg;
kenjiArai 1:4a1eb0f32025 111 _i2c.write((int)ADT7410_addr, (char *)dx, 1, true);
kenjiArai 2:231bddd40e29 112 _i2c.read((int)ADT7410_addr, (char *)dx, 1, false);
kenjiArai 1:4a1eb0f32025 113 return dx[0];
kenjiArai 1:4a1eb0f32025 114 }
kenjiArai 1:4a1eb0f32025 115
kenjiArai 1:4a1eb0f32025 116 uint8_t ADT7410::write_reg_byte(uint8_t reg, uint8_t dt)
kenjiArai 1:4a1eb0f32025 117 {
kenjiArai 1:4a1eb0f32025 118 uint8_t dx[2];
kenjiArai 1:4a1eb0f32025 119
kenjiArai 1:4a1eb0f32025 120 dx[0] = reg;
kenjiArai 3:912cd5ac1cce 121 dx[1] = dt;
kenjiArai 2:231bddd40e29 122 _i2c.write((int)ADT7410_addr, (char *)dx, 2, false);
kenjiArai 1:4a1eb0f32025 123 return dx[1];
kenjiArai 0:6ec4df1fa459 124 }
kenjiArai 0:6ec4df1fa459 125
kenjiArai 0:6ec4df1fa459 126 /////////////// Initialize ////////////////////////////////
kenjiArai 0:6ec4df1fa459 127 void ADT7410::init()
kenjiArai 0:6ec4df1fa459 128 {
kenjiArai 0:6ec4df1fa459 129 uint8_t dx[2];
kenjiArai 0:6ec4df1fa459 130
kenjiArai 0:6ec4df1fa459 131 dx[0] = ADT7410_A_CONFIG;
kenjiArai 2:231bddd40e29 132 dx[1] = RESOLUTION_16BIT + OPERATION_MODE_CONT;
kenjiArai 2:231bddd40e29 133 _i2c.write((int)ADT7410_addr, (char *)dx, 2, false);
kenjiArai 1:4a1eb0f32025 134 read_id_rev();
kenjiArai 0:6ec4df1fa459 135 }
kenjiArai 4:523b5b34e0c9 136