I2C 接続の温度センサ ADT7410 用のライブラリ. Library for temperature sensor ADT7410 connected using I2C interface.

Dependents:   Mbed2_ConnectTestAll Demo_ADT7410

Committer:
MikamiUitOpen
Date:
Mon Jun 15 09:18:19 2015 +0000
Revision:
2:c134a43c7875
Parent:
1:ad3046485a3e
Child:
4:3769397d3803
3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:b6dc7c54b451 1 //--------------------------------------------------------------
MikamiUitOpen 0:b6dc7c54b451 2 // Class for using ADT7410
MikamiUitOpen 2:c134a43c7875 3 // Default: 13-bit resolution
MikamiUitOpen 1:ad3046485a3e 4 // 2015/06/15, Copyright (c) 2015 MIKAMI, Naoki
MikamiUitOpen 0:b6dc7c54b451 5 //--------------------------------------------------------------
MikamiUitOpen 0:b6dc7c54b451 6
MikamiUitOpen 0:b6dc7c54b451 7 #include "ADT7410.hpp"
MikamiUitOpen 0:b6dc7c54b451 8
MikamiUitOpen 0:b6dc7c54b451 9 namespace Mikami
MikamiUitOpen 0:b6dc7c54b451 10 {
MikamiUitOpen 0:b6dc7c54b451 11 // Constructor
MikamiUitOpen 0:b6dc7c54b451 12 ADT7410::ADT7410(PinName sda, PinName scl, uint8_t addr)
MikamiUitOpen 0:b6dc7c54b451 13 : addr_(addr), i2c_(sda, scl)
MikamiUitOpen 0:b6dc7c54b451 14 {
MikamiUitOpen 0:b6dc7c54b451 15 Reset();
MikamiUitOpen 0:b6dc7c54b451 16 }
MikamiUitOpen 0:b6dc7c54b451 17
MikamiUitOpen 0:b6dc7c54b451 18 // Set configuration register
MikamiUitOpen 0:b6dc7c54b451 19 // See Figure 15 in data sheet of ADT7410
MikamiUitOpen 0:b6dc7c54b451 20 void ADT7410::SetConfig(char val)
MikamiUitOpen 0:b6dc7c54b451 21 {
MikamiUitOpen 0:b6dc7c54b451 22 char wReg[2] = { CONFIG_, val };
MikamiUitOpen 0:b6dc7c54b451 23 i2c_.write(addr_, wReg, 2);
MikamiUitOpen 0:b6dc7c54b451 24 }
MikamiUitOpen 0:b6dc7c54b451 25
MikamiUitOpen 0:b6dc7c54b451 26 // Get value in configuration register
MikamiUitOpen 0:b6dc7c54b451 27 // See Figure 17 in data sheet of ADT7410
MikamiUitOpen 0:b6dc7c54b451 28 uint8_t ADT7410::GetConfig()
MikamiUitOpen 0:b6dc7c54b451 29 {
MikamiUitOpen 0:b6dc7c54b451 30 WriteSingleByte(CONFIG_, true);
MikamiUitOpen 0:b6dc7c54b451 31
MikamiUitOpen 0:b6dc7c54b451 32 char rReg[1];
MikamiUitOpen 0:b6dc7c54b451 33 i2c_.read(addr_, rReg, 1);
MikamiUitOpen 0:b6dc7c54b451 34
MikamiUitOpen 0:b6dc7c54b451 35 return rReg[0];
MikamiUitOpen 0:b6dc7c54b451 36 }
MikamiUitOpen 0:b6dc7c54b451 37
MikamiUitOpen 1:ad3046485a3e 38 // Read temperature
MikamiUitOpen 0:b6dc7c54b451 39 // See Figure 18 in data sheet of ADT7410
MikamiUitOpen 1:ad3046485a3e 40 float ADT7410::Read()
MikamiUitOpen 0:b6dc7c54b451 41 {
MikamiUitOpen 0:b6dc7c54b451 42 WriteSingleByte(TEMPER_, true);
MikamiUitOpen 0:b6dc7c54b451 43
MikamiUitOpen 0:b6dc7c54b451 44 char rReg[2];
MikamiUitOpen 0:b6dc7c54b451 45 i2c_.read(addr_, rReg, 2);
MikamiUitOpen 0:b6dc7c54b451 46
MikamiUitOpen 1:ad3046485a3e 47 int16_t value = (rReg[0] << 8) | rReg[1];
MikamiUitOpen 2:c134a43c7875 48 if ( (GetConfig() & 0x80) == 0x00 )
MikamiUitOpen 2:c134a43c7875 49 value &= 0xfff8; // For 13-bit resolution
MikamiUitOpen 0:b6dc7c54b451 50
MikamiUitOpen 0:b6dc7c54b451 51 return value/128.0f;
MikamiUitOpen 0:b6dc7c54b451 52 }
MikamiUitOpen 0:b6dc7c54b451 53
MikamiUitOpen 0:b6dc7c54b451 54 // Reset
MikamiUitOpen 0:b6dc7c54b451 55 // See p.19 in data sheet Rev.A of ADT7410
MikamiUitOpen 0:b6dc7c54b451 56 void ADT7410::Reset()
MikamiUitOpen 0:b6dc7c54b451 57 {
MikamiUitOpen 0:b6dc7c54b451 58 WriteSingleByte(RESET_);
MikamiUitOpen 0:b6dc7c54b451 59 wait_ms(250);
MikamiUitOpen 2:c134a43c7875 60 SetConfig(0x00);
MikamiUitOpen 0:b6dc7c54b451 61 }
MikamiUitOpen 0:b6dc7c54b451 62 }