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 #ifndef MBED_ADT7410
kenjiArai 0:6ec4df1fa459 20 #define MBED_ADT7410
kenjiArai 0:6ec4df1fa459 21
kenjiArai 0:6ec4df1fa459 22 // ADT7410 Temperature Sensor
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 0:6ec4df1fa459 34 // ID
kenjiArai 0:6ec4df1fa459 35 #define I_AM_ADT7410 0x19
kenjiArai 0:6ec4df1fa459 36 #define GET_ID(x) ((x >> 3) & 0x1f)
kenjiArai 0:6ec4df1fa459 37 #define GET_REV(x) (x & 0x7)
kenjiArai 0:6ec4df1fa459 38
kenjiArai 0:6ec4df1fa459 39 // Configration
kenjiArai 0:6ec4df1fa459 40 #define OPERATION_MODE_CONT 0x00
kenjiArai 0:6ec4df1fa459 41 #define OPERATION_MODE_ONESHOT 0x20
kenjiArai 0:6ec4df1fa459 42 #define OPERATION_MODE_1SPS 0x40
kenjiArai 0:6ec4df1fa459 43 #define OPERATION_MODE_SHTDWN 0x60
kenjiArai 0:6ec4df1fa459 44 #define RESOLUTION_15BIT 0x00
kenjiArai 0:6ec4df1fa459 45 #define RESOLUTION_16BIT 0x80
kenjiArai 0:6ec4df1fa459 46
kenjiArai 0:6ec4df1fa459 47 /** ADT7410 class
kenjiArai 0:6ec4df1fa459 48 *
kenjiArai 0:6ec4df1fa459 49 * Analog Devices / ADT7410 16-Bit Digital I2C Temperature Sensor
kenjiArai 0:6ec4df1fa459 50 *
kenjiArai 0:6ec4df1fa459 51 * @code
kenjiArai 0:6ec4df1fa459 52 * #include "mbed.h"
kenjiArai 0:6ec4df1fa459 53 * #include "ADT7410.h"
kenjiArai 0:6ec4df1fa459 54 *
kenjiArai 0:6ec4df1fa459 55 * // I2C Communication
kenjiArai 0:6ec4df1fa459 56 * ADT7410 t(PinName p_sda, PinName p_scl, addr);
kenjiArai 0:6ec4df1fa459 57 * // If you connected I2C line not only this device but also other devices,
kenjiArai 0:6ec4df1fa459 58 * // you need to declare following method.
kenjiArai 0:6ec4df1fa459 59 * I2C i2c(PinName p_sda, PinName p_scl);
kenjiArai 0:6ec4df1fa459 60 * ADT7410 t(I2C& p_i2c, addr);
kenjiArai 0:6ec4df1fa459 61 *
kenjiArai 0:6ec4df1fa459 62 * int main() {
kenjiArai 0:6ec4df1fa459 63 * while(1){
kenjiArai 0:6ec4df1fa459 64 * printf("T=%5.2f degC\r\n", t.read_temp());
kenjiArai 0:6ec4df1fa459 65 * wait(1.0):
kenjiArai 0:6ec4df1fa459 66 * }
kenjiArai 0:6ec4df1fa459 67 * }
kenjiArai 0:6ec4df1fa459 68 * @endcode
kenjiArai 0:6ec4df1fa459 69 */
kenjiArai 0:6ec4df1fa459 70
kenjiArai 0:6ec4df1fa459 71 class ADT7410
kenjiArai 0:6ec4df1fa459 72 {
kenjiArai 0:6ec4df1fa459 73 public:
kenjiArai 0:6ec4df1fa459 74 /** Configure data pin
kenjiArai 0:6ec4df1fa459 75 * @param data SDA and SCL pins
kenjiArai 0:6ec4df1fa459 76 * @param ADT7410 address (H/W configuration of A1,A0)
kenjiArai 0:6ec4df1fa459 77 */
kenjiArai 0:6ec4df1fa459 78 ADT7410(PinName p_sda, PinName p_scl, uint8_t addr);
kenjiArai 0:6ec4df1fa459 79
kenjiArai 0:6ec4df1fa459 80 /** Configure data pin (with other devices on I2C line)
kenjiArai 0:6ec4df1fa459 81 * @param I2C previous definition
kenjiArai 0:6ec4df1fa459 82 * @param ADT7410 address (H/W configuration of A1,A0)
kenjiArai 0:6ec4df1fa459 83 */
kenjiArai 0:6ec4df1fa459 84 ADT7410(I2C& p_i2c, uint8_t addr);
kenjiArai 0:6ec4df1fa459 85
kenjiArai 0:6ec4df1fa459 86 /** Read temperature data
kenjiArai 0:6ec4df1fa459 87 * @param none
kenjiArai 0:6ec4df1fa459 88 * @return temperature
kenjiArai 0:6ec4df1fa459 89 */
kenjiArai 0:6ec4df1fa459 90 float read_temp(void);
kenjiArai 0:6ec4df1fa459 91
kenjiArai 0:6ec4df1fa459 92 /** Read status reg.
kenjiArai 0:6ec4df1fa459 93 * @param none
kenjiArai 0:6ec4df1fa459 94 * @return status register value
kenjiArai 0:6ec4df1fa459 95 */
kenjiArai 0:6ec4df1fa459 96 uint8_t read_status(void);
kenjiArai 0:6ec4df1fa459 97
kenjiArai 0:6ec4df1fa459 98 /** Read configration reg.
kenjiArai 0:6ec4df1fa459 99 * @param none
kenjiArai 0:6ec4df1fa459 100 * @return configrartion register value
kenjiArai 0:6ec4df1fa459 101 */
kenjiArai 0:6ec4df1fa459 102 uint8_t read_config(void);
kenjiArai 0:6ec4df1fa459 103
kenjiArai 0:6ec4df1fa459 104 /** Set configration reg.
kenjiArai 0:6ec4df1fa459 105 * @param
kenjiArai 0:6ec4df1fa459 106 * @return configrartion register value
kenjiArai 0:6ec4df1fa459 107 */
kenjiArai 0:6ec4df1fa459 108 uint8_t set_config(uint8_t cfg);
kenjiArai 0:6ec4df1fa459 109
kenjiArai 0:6ec4df1fa459 110 /** Read ADT7410 chip ID
kenjiArai 0:6ec4df1fa459 111 * @param none
kenjiArai 0:6ec4df1fa459 112 * @return ID number
kenjiArai 0:6ec4df1fa459 113 */
kenjiArai 0:6ec4df1fa459 114 uint8_t read_id(void);
kenjiArai 0:6ec4df1fa459 115
kenjiArai 0:6ec4df1fa459 116 /** Read ADT7410 chip revision
kenjiArai 0:6ec4df1fa459 117 * @param none
kenjiArai 0:6ec4df1fa459 118 * @return revision data
kenjiArai 0:6ec4df1fa459 119 */
kenjiArai 0:6ec4df1fa459 120 uint8_t read_revision(void);
kenjiArai 0:6ec4df1fa459 121
kenjiArai 0:6ec4df1fa459 122 protected:
kenjiArai 0:6ec4df1fa459 123 I2C _i2c;
kenjiArai 0:6ec4df1fa459 124
kenjiArai 0:6ec4df1fa459 125 void read_all();
kenjiArai 0:6ec4df1fa459 126 void init();
kenjiArai 0:6ec4df1fa459 127
kenjiArai 0:6ec4df1fa459 128 private:
kenjiArai 0:6ec4df1fa459 129 uint8_t dt[16];
kenjiArai 0:6ec4df1fa459 130 char ADT7410_addr;
kenjiArai 0:6ec4df1fa459 131 };
kenjiArai 0:6ec4df1fa459 132
kenjiArai 0:6ec4df1fa459 133 #endif // MBED_ADT7410