Another sensor or module to cross our path, this time we will look at the TMP175 digital temperature sensors
The TMP175 devices is a digital temperature sensors ideal for NTC and PTC thermistor replacement. The device offers a typical accuracy of ±1°C without requiring calibration or external component signal conditioning. IC temperature sensors are highly linear and do not require complex calculations or look-up tables to derive the temperature. The on-chip 12-bit ADC offers resolutions down to 0.0625°C.
The TMP175 feature SMBus, Two-Wire, and I2C interface compatibility. The TMP175 device allows up to 27 devices on one bus. . The TMP175 feature an SMBus Alert function.
The TMP175 are ideal for extended temperature measurement in a variety of communication, computer, consumer, environmental, industrial, and instrumentation applications.
Features
- TMP175: 27 Addresses
- Digital Output: SMBus™, Two-Wire™, and I2C
Interface Compatibility - Resolution: 9 to 12 Bits, User-Selectable
- Accuracy:
- ±1°C (Typical) from –40°C to 125°C
- ±2°C (Maximum) from –40°C to 125°C
- Low Quiescent Current: 50-µA, 0.1-µA Standby
- Wide Supply Range: 2.7 V to 5.5 V
- Small 8-Pin MSOP and 8-Pin SOIC Packages
Connection
Module Connection | Arduino Due Connection |
VCC | 3v3 |
GND | Gnd |
SDA | SDA |
SCL | SCL |
Code
[codesyntax lang=”cpp”]
#include <Wire.h> byte TempHi; // Variable hold data high byte byte TempLo; // Variable hold data low byte boolean P_N; // Bit flag for Positive and Negative unsigned int Decimal; // Variable hold decimal value void Cal_Temp(); /******************************************************************************* Setup *******************************************************************************/ void setup() { Serial.begin(9600); Wire.begin(); // join i2c bus (address optional for master) delay(1000); } /******************************************************************************* Main Loop *******************************************************************************/ void loop() { const int I2C_address = 0x37; // I2C write address delay(100); Wire.beginTransmission(I2C_address); Wire.write(1); // Setup configuration register Wire.write(0x60); // 12-bit Wire.endTransmission(); Wire.beginTransmission(I2C_address); Wire.write(0); // Setup Pointer Register to 0 Wire.endTransmission(); while (1) { delay(1000); // Read temperature value Wire.requestFrom(I2C_address, 2); while(Wire.available()) // Checkf for data from slave { TempHi = Wire.read(); // Read temperature high byte TempLo = Wire.read(); // Read temperature low byte } Cal_Temp (); // Display temperature Serial.print("The temperature is "); if (P_N == 0) Serial.print("-"); Serial.print(TempHi,DEC); Serial.print("."); Serial.print(Decimal,DEC); Serial.println(" degree C"); } } void Cal_Temp() { if (TempHi&0x80) // If bit7 of the TempHi is HIGH then the temperature is negative P_N = 0; else // Else the temperature is positive P_N = 1; TempHi = TempHi & 0x7F; // Remove sign TempLo = TempLo & 0xF0; // Filter out last nibble TempLo = TempLo >>4; // Shift right 4 times Decimal = TempLo; Decimal = Decimal * 625; // Each bit = 0.0625 degree C }
[/codesyntax]
Output
Open up the trusty serial monitor and you will see something like this all going well
The temperature is 18.6250 degree C
The temperature is 18.6250 degree C
The temperature is 18.6250 degree C
The temperature is 18.6250 degree C
The temperature is 19.1250 degree C
The temperature is 22.5000 degree C
The temperature is 24.1250 degree C
The temperature is 25.3125 degree C
The temperature is 26.3125 degree C