Analog Devices / ADT7410 16-Bit Digital I2C Temperature Sensor

Dependents:   Frequency_Counter_w_GPS_1PPS MQTToverCC3000 Frequency_Cntr_1PPS_F746ZG

Committer:
kenjiArai
Date:
Tue Jan 06 03:06:16 2015 +0000
Revision:
2:231bddd40e29
Parent:
1:4a1eb0f32025
Child:
4:523b5b34e0c9
Buf fix write_reg_byte(), delete Debug function PRINTF()

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