Analog Devices / ADT7410 16-Bit Digital I2C Temperature Sensor

Dependents:   Frequency_Counter_w_GPS_1PPS MQTToverCC3000 Frequency_Cntr_1PPS_F746ZG

Committer:
kenjiArai
Date:
Fri Nov 28 10:32:19 2014 +0000
Revision:
0:6ec4df1fa459
Child:
1:4a1eb0f32025
Analog Devices / ADT7410 16-Bit Digital I2C Temperature Sensor

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 0:6ec4df1fa459 10 * Revised: November 28th, 2014
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 #include "mbed.h"
kenjiArai 0:6ec4df1fa459 20 #include "ADT7410.h"
kenjiArai 0:6ec4df1fa459 21
kenjiArai 0:6ec4df1fa459 22 //#define DEBUG
kenjiArai 0:6ec4df1fa459 23
kenjiArai 0:6ec4df1fa459 24 #ifdef DEBUG
kenjiArai 0:6ec4df1fa459 25 Serial pcm(USBTX, USBRX);
kenjiArai 0:6ec4df1fa459 26 #endif
kenjiArai 0:6ec4df1fa459 27
kenjiArai 0:6ec4df1fa459 28 #ifdef DEBUG
kenjiArai 0:6ec4df1fa459 29 #define PRINTF(...) pcm.printf(__VA_ARGS__)
kenjiArai 0:6ec4df1fa459 30 #else
kenjiArai 0:6ec4df1fa459 31 #define PRINTF(...) {;}
kenjiArai 0:6ec4df1fa459 32 #endif
kenjiArai 0:6ec4df1fa459 33
kenjiArai 0:6ec4df1fa459 34 ////////////// REGISTER DEFINITION //////////////
kenjiArai 0:6ec4df1fa459 35 #define ADT7410_A_T_MSB 0x00
kenjiArai 0:6ec4df1fa459 36 #define ADT7410_A_T_LSB 0x01
kenjiArai 0:6ec4df1fa459 37 #define ADT7410_A_STATUS 0x02
kenjiArai 0:6ec4df1fa459 38 #define ADT7410_A_CONFIG 0x03
kenjiArai 0:6ec4df1fa459 39 #define ADT7410_A_T_H_MSB 0x04
kenjiArai 0:6ec4df1fa459 40 #define ADT7410_A_T_H_LSB 0x05
kenjiArai 0:6ec4df1fa459 41 #define ADT7410_A_T_L_MSB 0x06
kenjiArai 0:6ec4df1fa459 42 #define ADT7410_A_T_L_LSB 0x07
kenjiArai 0:6ec4df1fa459 43 #define ADT7410_A_T_C_MSB 0x08
kenjiArai 0:6ec4df1fa459 44 #define ADT7410_A_T_C_LSB 0x09
kenjiArai 0:6ec4df1fa459 45 #define ADT7410_A_T_HYS 0x0a
kenjiArai 0:6ec4df1fa459 46 #define ADT7410_A_ID 0x0b
kenjiArai 0:6ec4df1fa459 47 #define ADT7410_A_SW_RESET 0x2f
kenjiArai 0:6ec4df1fa459 48
kenjiArai 0:6ec4df1fa459 49 ADT7410::ADT7410 (PinName p_sda, PinName p_scl, uint8_t addr) : _i2c(p_sda, p_scl)
kenjiArai 0:6ec4df1fa459 50 {
kenjiArai 0:6ec4df1fa459 51 ADT7410_addr = (char)addr;
kenjiArai 0:6ec4df1fa459 52 init();
kenjiArai 0:6ec4df1fa459 53 }
kenjiArai 0:6ec4df1fa459 54
kenjiArai 0:6ec4df1fa459 55 ADT7410::ADT7410 (I2C& p_i2c, uint8_t addr) : _i2c(p_i2c)
kenjiArai 0:6ec4df1fa459 56 {
kenjiArai 0:6ec4df1fa459 57 ADT7410_addr = (char)addr;
kenjiArai 0:6ec4df1fa459 58 init();
kenjiArai 0:6ec4df1fa459 59 }
kenjiArai 0:6ec4df1fa459 60
kenjiArai 0:6ec4df1fa459 61 /////////////// Read All data /////////////////////////////
kenjiArai 0:6ec4df1fa459 62 void ADT7410::read_all()
kenjiArai 0:6ec4df1fa459 63 {
kenjiArai 0:6ec4df1fa459 64 dt[0] = ADT7410_A_T_MSB;
kenjiArai 0:6ec4df1fa459 65 _i2c.write((int)ADT7410_addr, (char *)dt, 1, false);
kenjiArai 0:6ec4df1fa459 66 _i2c.read((int)ADT7410_addr, (char *)dt, 12, true);
kenjiArai 0:6ec4df1fa459 67 }
kenjiArai 0:6ec4df1fa459 68
kenjiArai 0:6ec4df1fa459 69 /////////////// Read Temperature //////////////////////////
kenjiArai 0:6ec4df1fa459 70 float ADT7410::read_temp()
kenjiArai 0:6ec4df1fa459 71 {
kenjiArai 0:6ec4df1fa459 72 dt[0] = ADT7410_A_T_MSB;
kenjiArai 0:6ec4df1fa459 73 _i2c.write((int)ADT7410_addr, (char *)dt, 1, false);
kenjiArai 0:6ec4df1fa459 74 _i2c.read((int)ADT7410_addr, (char *)dt, 2, true);
kenjiArai 0:6ec4df1fa459 75 uint32_t d = (dt[0] << 8) + dt[1];
kenjiArai 0:6ec4df1fa459 76 PRINTF("d= 0x%04x , dt0= 0x%02x, dt1= 0x%02x\r\n", d, dt[0], dt[1]);
kenjiArai 0:6ec4df1fa459 77 return (float)d;
kenjiArai 0:6ec4df1fa459 78 }
kenjiArai 0:6ec4df1fa459 79
kenjiArai 0:6ec4df1fa459 80
kenjiArai 0:6ec4df1fa459 81 /////////////// Check Status //////////////////////////////
kenjiArai 0:6ec4df1fa459 82 uint8_t ADT7410::read_status()
kenjiArai 0:6ec4df1fa459 83 {
kenjiArai 0:6ec4df1fa459 84 read_all();
kenjiArai 0:6ec4df1fa459 85 PRINTF("status= 0x%02x\r\n", dt[2]);
kenjiArai 0:6ec4df1fa459 86 return dt[2];
kenjiArai 0:6ec4df1fa459 87 }
kenjiArai 0:6ec4df1fa459 88
kenjiArai 0:6ec4df1fa459 89 /////////////// Check Configration //////////////////////////
kenjiArai 0:6ec4df1fa459 90 uint8_t ADT7410::read_config()
kenjiArai 0:6ec4df1fa459 91 {
kenjiArai 0:6ec4df1fa459 92 read_all();
kenjiArai 0:6ec4df1fa459 93 PRINTF("config= 0x%02x\r\n", dt[3]);
kenjiArai 0:6ec4df1fa459 94 return dt[3];
kenjiArai 0:6ec4df1fa459 95 }
kenjiArai 0:6ec4df1fa459 96
kenjiArai 0:6ec4df1fa459 97 /////////////// Set Configration //////////////////////////
kenjiArai 0:6ec4df1fa459 98 uint8_t ADT7410::set_config(uint8_t cfg)
kenjiArai 0:6ec4df1fa459 99 {
kenjiArai 0:6ec4df1fa459 100 uint8_t dx[2];
kenjiArai 0:6ec4df1fa459 101
kenjiArai 0:6ec4df1fa459 102 dx[0] = ADT7410_A_CONFIG;
kenjiArai 0:6ec4df1fa459 103 dx[1] = cfg;
kenjiArai 0:6ec4df1fa459 104 _i2c.write((int)ADT7410_addr, (char *)dx, 2);
kenjiArai 0:6ec4df1fa459 105 return read_config();
kenjiArai 0:6ec4df1fa459 106 }
kenjiArai 0:6ec4df1fa459 107
kenjiArai 0:6ec4df1fa459 108 /////////////// Read ID ///////////////////////////////////
kenjiArai 0:6ec4df1fa459 109 uint8_t ADT7410::read_id()
kenjiArai 0:6ec4df1fa459 110 {
kenjiArai 0:6ec4df1fa459 111 read_all();
kenjiArai 0:6ec4df1fa459 112 PRINTF("ID reg= 0x%02x\r\n", dt[11]);
kenjiArai 0:6ec4df1fa459 113 return (dt[11 ]>> 3);
kenjiArai 0:6ec4df1fa459 114 }
kenjiArai 0:6ec4df1fa459 115
kenjiArai 0:6ec4df1fa459 116 /////////////// Read Revision /////////////////////////////
kenjiArai 0:6ec4df1fa459 117 uint8_t ADT7410::read_revision()
kenjiArai 0:6ec4df1fa459 118 {
kenjiArai 0:6ec4df1fa459 119 read_all();
kenjiArai 0:6ec4df1fa459 120 PRINTF("ID reg= 0x%02x\r\n", dt[11]);
kenjiArai 0:6ec4df1fa459 121 return (dt[11] & 0x7);
kenjiArai 0:6ec4df1fa459 122 }
kenjiArai 0:6ec4df1fa459 123
kenjiArai 0:6ec4df1fa459 124 /////////////// Initialize ////////////////////////////////
kenjiArai 0:6ec4df1fa459 125 void ADT7410::init()
kenjiArai 0:6ec4df1fa459 126 {
kenjiArai 0:6ec4df1fa459 127 uint8_t dx[2];
kenjiArai 0:6ec4df1fa459 128
kenjiArai 0:6ec4df1fa459 129 dx[0] = ADT7410_A_CONFIG;
kenjiArai 0:6ec4df1fa459 130 dx[1] = RESOLUTION_16BIT + OPERATION_MODE_1SPS;
kenjiArai 0:6ec4df1fa459 131 _i2c.write((int)ADT7410_addr, (char *)dx, 2);
kenjiArai 0:6ec4df1fa459 132 }