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:
2:231bddd40e29
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 0:6ec4df1fa459 9 * Created: November 26th, 2014
kenjiArai 4:523b5b34e0c9 10 * Revised: August 23rd, 2017
kenjiArai 0:6ec4df1fa459 11 */
kenjiArai 0:6ec4df1fa459 12
kenjiArai 0:6ec4df1fa459 13 #ifndef MBED_ADT7410
kenjiArai 0:6ec4df1fa459 14 #define MBED_ADT7410
kenjiArai 0:6ec4df1fa459 15
kenjiArai 1:4a1eb0f32025 16 ////////////// ADDRESS //////////////////////////
kenjiArai 0:6ec4df1fa459 17 // 7bit address = 0b01100000(0x48) -> 8bit = 0b11000000(0x90) -> 0x91(Read) or 0x90(Write)
kenjiArai 0:6ec4df1fa459 18 // ADDR_01 = (A1=0=J4)+(A0=1=J3), ADDR_1N = (A1=1)+(A0=No Connection =0)
kenjiArai 0:6ec4df1fa459 19 // -> Please make sure your H/W configuration
kenjiArai 0:6ec4df1fa459 20 #define ADT7410ADDR_00 0x90
kenjiArai 0:6ec4df1fa459 21 #define ADT7410ADDR_NN 0x90
kenjiArai 0:6ec4df1fa459 22 #define ADT7410ADDR_N1 0x92
kenjiArai 0:6ec4df1fa459 23 #define ADT7410ADDR_01 0x92
kenjiArai 0:6ec4df1fa459 24 #define ADT7410ADDR_1N 0x96
kenjiArai 0:6ec4df1fa459 25 #define ADT7410ADDR_10 0x96
kenjiArai 0:6ec4df1fa459 26 #define ADT7410ADDR_11 0x98
kenjiArai 0:6ec4df1fa459 27
kenjiArai 1:4a1eb0f32025 28 ////////////// REGISTER DEFINITION //////////////
kenjiArai 1:4a1eb0f32025 29 #define ADT7410_A_T_MSB 0x00
kenjiArai 1:4a1eb0f32025 30 #define ADT7410_A_T_LSB 0x01
kenjiArai 1:4a1eb0f32025 31 #define ADT7410_A_STATUS 0x02
kenjiArai 1:4a1eb0f32025 32 #define ADT7410_A_CONFIG 0x03
kenjiArai 1:4a1eb0f32025 33 #define ADT7410_A_T_H_MSB 0x04
kenjiArai 1:4a1eb0f32025 34 #define ADT7410_A_T_H_LSB 0x05
kenjiArai 1:4a1eb0f32025 35 #define ADT7410_A_T_L_MSB 0x06
kenjiArai 1:4a1eb0f32025 36 #define ADT7410_A_T_L_LSB 0x07
kenjiArai 1:4a1eb0f32025 37 #define ADT7410_A_T_C_MSB 0x08
kenjiArai 1:4a1eb0f32025 38 #define ADT7410_A_T_C_LSB 0x09
kenjiArai 1:4a1eb0f32025 39 #define ADT7410_A_T_HYS 0x0a
kenjiArai 1:4a1eb0f32025 40 #define ADT7410_A_ID 0x0b
kenjiArai 1:4a1eb0f32025 41 #define ADT7410_A_SW_RESET 0x2f
kenjiArai 1:4a1eb0f32025 42
kenjiArai 1:4a1eb0f32025 43 ////////////// ID ///////////////////////////////
kenjiArai 0:6ec4df1fa459 44 #define I_AM_ADT7410 0x19
kenjiArai 0:6ec4df1fa459 45 #define GET_ID(x) ((x >> 3) & 0x1f)
kenjiArai 0:6ec4df1fa459 46 #define GET_REV(x) (x & 0x7)
kenjiArai 0:6ec4df1fa459 47
kenjiArai 1:4a1eb0f32025 48 ////////////// Configration /////////////////////
kenjiArai 0:6ec4df1fa459 49 #define OPERATION_MODE_CONT 0x00
kenjiArai 0:6ec4df1fa459 50 #define OPERATION_MODE_ONESHOT 0x20
kenjiArai 0:6ec4df1fa459 51 #define OPERATION_MODE_1SPS 0x40
kenjiArai 0:6ec4df1fa459 52 #define OPERATION_MODE_SHTDWN 0x60
kenjiArai 1:4a1eb0f32025 53 #define RESOLUTION_13BIT 0x00
kenjiArai 0:6ec4df1fa459 54 #define RESOLUTION_16BIT 0x80
kenjiArai 0:6ec4df1fa459 55
kenjiArai 0:6ec4df1fa459 56 /** ADT7410 class
kenjiArai 0:6ec4df1fa459 57 *
kenjiArai 0:6ec4df1fa459 58 * Analog Devices / ADT7410 16-Bit Digital I2C Temperature Sensor
kenjiArai 0:6ec4df1fa459 59 *
kenjiArai 0:6ec4df1fa459 60 * @code
kenjiArai 0:6ec4df1fa459 61 * #include "mbed.h"
kenjiArai 0:6ec4df1fa459 62 * #include "ADT7410.h"
kenjiArai 0:6ec4df1fa459 63 *
kenjiArai 0:6ec4df1fa459 64 * // I2C Communication
kenjiArai 0:6ec4df1fa459 65 * ADT7410 t(PinName p_sda, PinName p_scl, addr);
kenjiArai 0:6ec4df1fa459 66 * // If you connected I2C line not only this device but also other devices,
kenjiArai 0:6ec4df1fa459 67 * // you need to declare following method.
kenjiArai 0:6ec4df1fa459 68 * I2C i2c(PinName p_sda, PinName p_scl);
kenjiArai 2:231bddd40e29 69 * ADT7410 t(I2C& p_i2c, addr); // default: 16bit resolution & continuous conv.
kenjiArai 0:6ec4df1fa459 70 *
kenjiArai 0:6ec4df1fa459 71 * int main() {
kenjiArai 2:231bddd40e29 72 * t.set_config(OPERATION_MODE_1SPS + RESOLUTION_13BIT); // you can change the config.
kenjiArai 0:6ec4df1fa459 73 * while(1){
kenjiArai 1:4a1eb0f32025 74 * printf("T=%+6.3f degC\r\n", t.read_temp());
kenjiArai 0:6ec4df1fa459 75 * wait(1.0):
kenjiArai 0:6ec4df1fa459 76 * }
kenjiArai 0:6ec4df1fa459 77 * }
kenjiArai 0:6ec4df1fa459 78 * @endcode
kenjiArai 0:6ec4df1fa459 79 */
kenjiArai 0:6ec4df1fa459 80
kenjiArai 0:6ec4df1fa459 81 class ADT7410
kenjiArai 0:6ec4df1fa459 82 {
kenjiArai 0:6ec4df1fa459 83 public:
kenjiArai 0:6ec4df1fa459 84 /** Configure data pin
kenjiArai 0:6ec4df1fa459 85 * @param data SDA and SCL pins
kenjiArai 0:6ec4df1fa459 86 * @param ADT7410 address (H/W configuration of A1,A0)
kenjiArai 0:6ec4df1fa459 87 */
kenjiArai 0:6ec4df1fa459 88 ADT7410(PinName p_sda, PinName p_scl, uint8_t addr);
kenjiArai 0:6ec4df1fa459 89
kenjiArai 0:6ec4df1fa459 90 /** Configure data pin (with other devices on I2C line)
kenjiArai 0:6ec4df1fa459 91 * @param I2C previous definition
kenjiArai 0:6ec4df1fa459 92 * @param ADT7410 address (H/W configuration of A1,A0)
kenjiArai 0:6ec4df1fa459 93 */
kenjiArai 0:6ec4df1fa459 94 ADT7410(I2C& p_i2c, uint8_t addr);
kenjiArai 0:6ec4df1fa459 95
kenjiArai 0:6ec4df1fa459 96 /** Read temperature data
kenjiArai 0:6ec4df1fa459 97 * @param none
kenjiArai 0:6ec4df1fa459 98 * @return temperature
kenjiArai 0:6ec4df1fa459 99 */
kenjiArai 0:6ec4df1fa459 100 float read_temp(void);
kenjiArai 0:6ec4df1fa459 101
kenjiArai 0:6ec4df1fa459 102 /** Read status reg.
kenjiArai 0:6ec4df1fa459 103 * @param none
kenjiArai 0:6ec4df1fa459 104 * @return status register value
kenjiArai 0:6ec4df1fa459 105 */
kenjiArai 0:6ec4df1fa459 106 uint8_t read_status(void);
kenjiArai 0:6ec4df1fa459 107
kenjiArai 0:6ec4df1fa459 108 /** Read configration reg.
kenjiArai 0:6ec4df1fa459 109 * @param none
kenjiArai 0:6ec4df1fa459 110 * @return configrartion register value
kenjiArai 0:6ec4df1fa459 111 */
kenjiArai 0:6ec4df1fa459 112 uint8_t read_config(void);
kenjiArai 0:6ec4df1fa459 113
kenjiArai 0:6ec4df1fa459 114 /** Set configration reg.
kenjiArai 0:6ec4df1fa459 115 * @param
kenjiArai 0:6ec4df1fa459 116 * @return configrartion register value
kenjiArai 0:6ec4df1fa459 117 */
kenjiArai 0:6ec4df1fa459 118 uint8_t set_config(uint8_t cfg);
kenjiArai 0:6ec4df1fa459 119
kenjiArai 1:4a1eb0f32025 120 /** Read ID
kenjiArai 0:6ec4df1fa459 121 * @param none
kenjiArai 1:4a1eb0f32025 122 * @return ID
kenjiArai 0:6ec4df1fa459 123 */
kenjiArai 1:4a1eb0f32025 124 uint8_t read_ID();
kenjiArai 1:4a1eb0f32025 125
kenjiArai 1:4a1eb0f32025 126 /** Read Revision
kenjiArai 1:4a1eb0f32025 127 * @param none
kenjiArai 1:4a1eb0f32025 128 * @return Revision
kenjiArai 1:4a1eb0f32025 129 */
kenjiArai 1:4a1eb0f32025 130 uint8_t read_REV();
kenjiArai 0:6ec4df1fa459 131
kenjiArai 1:4a1eb0f32025 132 /** Read one byte from specific register
kenjiArai 1:4a1eb0f32025 133 * @param register address
kenjiArai 1:4a1eb0f32025 134 * @return register data
kenjiArai 1:4a1eb0f32025 135 */
kenjiArai 1:4a1eb0f32025 136 uint8_t read_reg_byte(uint8_t reg);
kenjiArai 1:4a1eb0f32025 137
kenjiArai 1:4a1eb0f32025 138 /** Write one byte into specific register
kenjiArai 1:4a1eb0f32025 139 * @param register address, data
kenjiArai 1:4a1eb0f32025 140 * @return register saved data
kenjiArai 1:4a1eb0f32025 141 */
kenjiArai 1:4a1eb0f32025 142 uint8_t write_reg_byte(uint8_t reg, uint8_t dt);
kenjiArai 1:4a1eb0f32025 143
kenjiArai 1:4a1eb0f32025 144 /** check ID
kenjiArai 0:6ec4df1fa459 145 * @param none
kenjiArai 1:4a1eb0f32025 146 * @return ADT7410 = 1, others 0
kenjiArai 0:6ec4df1fa459 147 */
kenjiArai 1:4a1eb0f32025 148 uint8_t who_am_i();
kenjiArai 2:231bddd40e29 149
kenjiArai 0:6ec4df1fa459 150 protected:
kenjiArai 4:523b5b34e0c9 151 I2C *_i2c_p;
kenjiArai 4:523b5b34e0c9 152 I2C &_i2c;
kenjiArai 0:6ec4df1fa459 153
kenjiArai 0:6ec4df1fa459 154 void read_all();
kenjiArai 1:4a1eb0f32025 155 void read_id_rev();
kenjiArai 0:6ec4df1fa459 156 void init();
kenjiArai 0:6ec4df1fa459 157
kenjiArai 0:6ec4df1fa459 158 private:
kenjiArai 1:4a1eb0f32025 159 uint8_t dt[4];
kenjiArai 0:6ec4df1fa459 160 char ADT7410_addr;
kenjiArai 1:4a1eb0f32025 161 uint8_t id_number;
kenjiArai 1:4a1eb0f32025 162 uint8_t rev_number;
kenjiArai 0:6ec4df1fa459 163 };
kenjiArai 0:6ec4df1fa459 164
kenjiArai 0:6ec4df1fa459 165 #endif // MBED_ADT7410
kenjiArai 4:523b5b34e0c9 166