Crate tmp1x2

source ·
Expand description

This is a platform agnostic Rust driver for the TMP102 and TMP112 high-accuracy, low-power, digital temperature sensors, based on the embedded-hal traits.

This driver allows you to:

  • Enable/disable the device.
  • Read the temperature.
  • Enable/disable the extended measurement mode.
  • Trigger a one-shot measurement.
  • Read whether the one-shot measurement result is ready.
  • Set the conversion rate.
  • Set the high/low temperature threshold.
  • Set the fault queue.
  • Set the alert polarity.
  • Set the thermostat mode.
  • Read whether a comparator mode alert is active.

The devices

This driver is compatible with both the TMP102 device as well as the TMP112 family of devices, including TMP112A, TMP112B and TMP112N.

TMP102

The TMP102 device is a digital temperature sensor ideal for NTC/PTC thermistor replacement where high accuracy is required. The device offers an accuracy of +/-0.5°C without requiring calibration or external component signal conditioning. Device temperature sensors are highly linear and do not require complex calculations or lookup tables to derive the temperature. The on-chip 12-bit ADC offers resolutions down to 0.0625°C.

The TMP112 family features SMBus(TM), two-wire and I2C interface compatibility, and allows up to four devices on one bus. The device also features an SMBus alert function. The device is specified to operate over supply voltages from 1.4 to 3.6 V with the maximum quiescent current of 10 μA over the full operating range.

The TMP102 device is ideal for extended temperature measurement in a variety of communication, computer, consumer, environmental, industrial, and instrumentation applications. The device is specified for operation over a temperature range of -40°C to 125°C.

TMP112

The TMP112 family of devices are digital temperature sensors designed for high-accuracy, low-power, NTC/PTC thermistor replacements where high accuracy is required. The TMP112A and TMP112B offers 0.5°C accuracy and are optimized to provide the best PSR performance for 3.3V and 1.8V operation respectively, while TMP112N offers 1°C accuracy. These temperature sensors are highly linear and do not require complex calculations or lookup tables to derive the temperature. The on-chip 12-bit ADC offers resolutions down to 0.0625°C.

The TMP112 family features SMBus, two-wire and I2C interface compatibility, and allows up to four devices on one bus. The device also features an SMBus alert function. The device is specified to operate over supply voltages from 1.4 to 3.6 V with the maximum quiescent current of 10 μA over the full operating range.

The TMP112 family is designed for extended temperature measurement in communication, computer, consumer, environmental, industrial, and instrumentation applications. The device is specified for operation over a temperature range of -40°C to +125°C.

Datasheets:

Usage examples (see also examples folder)

Read temperature

Import this crate and an embedded_hal implementation, then instantiate the device:

extern crate linux_embedded_hal as hal;
extern crate tmp1x2;

use hal::I2cdev;
use tmp1x2::{ Tmp1x2, SlaveAddr };

let dev = I2cdev::new("/dev/i2c-1").unwrap();
let address = SlaveAddr::default();
let mut sensor = Tmp1x2::new(dev, address);
let temperature = sensor.read_temperature().unwrap();
println!("Temperature: {}", temperature);

Provide an alternative address

extern crate linux_embedded_hal as hal;
extern crate tmp1x2;

use hal::I2cdev;
use tmp1x2::{ Tmp1x2, SlaveAddr };

let dev = I2cdev::new("/dev/i2c-1").unwrap();
let (a1, a0) = (false, true);
let address = SlaveAddr::Alternative(a1, a0);
let mut sensor = Tmp1x2::new(dev, address);

Enable / disable the sensor

extern crate linux_embedded_hal as hal;
extern crate tmp1x2;

use hal::I2cdev;
use tmp1x2::{ Tmp1x2, SlaveAddr };

let dev = I2cdev::new("/dev/i2c-1").unwrap();
let mut sensor = Tmp1x2::new(dev, SlaveAddr::default());
sensor.disable().unwrap(); // shutdown
sensor.enable().unwrap();

Enable the extended measurement mode

extern crate linux_embedded_hal as hal;
extern crate tmp1x2;

use hal::I2cdev;
use tmp1x2::{ Tmp1x2, SlaveAddr };

let dev = I2cdev::new("/dev/i2c-1").unwrap();
let mut sensor = Tmp1x2::new(dev, SlaveAddr::default());
sensor.enable_extended_mode().unwrap();

Trigger a one-shot measurement while in shutdown

extern crate linux_embedded_hal as hal;
extern crate tmp1x2;

use hal::I2cdev;
use tmp1x2::{ Tmp1x2, SlaveAddr };

let dev = I2cdev::new("/dev/i2c-1").unwrap();
let mut sensor = Tmp1x2::new(dev, SlaveAddr::default());
sensor.disable().unwrap(); // shutdown
sensor.trigger_one_shot_measurement().unwrap();
while(!sensor.is_one_shot_measurement_result_ready().unwrap()) {
    // insert some delay here
}
let temperature = sensor.read_temperature().unwrap();

Set the conversion rate to 1Hz

extern crate linux_embedded_hal as hal;
extern crate tmp1x2;

use hal::I2cdev;
use tmp1x2::{ Tmp1x2, SlaveAddr, ConversionRate };

let dev = I2cdev::new("/dev/i2c-1").unwrap();
let mut sensor = Tmp1x2::new(dev, SlaveAddr::default());
sensor.set_conversion_rate(ConversionRate::_1Hz).unwrap();

Set the high and low temperature thresholds

extern crate linux_embedded_hal as hal;
extern crate tmp1x2;

use hal::I2cdev;
use tmp1x2::{ Tmp1x2, SlaveAddr, ConversionRate };

let dev = I2cdev::new("/dev/i2c-1").unwrap();
let mut sensor = Tmp1x2::new(dev, SlaveAddr::default());
sensor.set_low_temperature_threshold(-15.0).unwrap();
sensor.set_high_temperature_threshold(60.0).unwrap();

Set the fault queue

This sets the number of consecutive faults that will trigger an alert.

extern crate linux_embedded_hal as hal;
extern crate tmp1x2;

use hal::I2cdev;
use tmp1x2::{ Tmp1x2, SlaveAddr, FaultQueue };

let dev = I2cdev::new("/dev/i2c-1").unwrap();
let mut sensor = Tmp1x2::new(dev, SlaveAddr::default());
sensor.set_fault_queue(FaultQueue::_4).unwrap();

Set the alert polarity

extern crate linux_embedded_hal as hal;
extern crate tmp1x2;

use hal::I2cdev;
use tmp1x2::{ Tmp1x2, SlaveAddr, AlertPolarity };

let dev = I2cdev::new("/dev/i2c-1").unwrap();
let mut sensor = Tmp1x2::new(dev, SlaveAddr::default());
sensor.set_alert_polarity(AlertPolarity::ActiveHigh).unwrap();

Set the thermostat mode

extern crate linux_embedded_hal as hal;
extern crate tmp1x2;

use hal::I2cdev;
use tmp1x2::{ Tmp1x2, SlaveAddr, ThermostatMode };

let dev = I2cdev::new("/dev/i2c-1").unwrap();
let mut sensor = Tmp1x2::new(dev, SlaveAddr::default());
sensor.set_thermostat_mode(ThermostatMode::Interrupt).unwrap();

Check whether an alert is active as defined by the comparator mode

Note that this ignores the thermostat mode setting and always refers to the status as defined by the comparator mode.

extern crate linux_embedded_hal as hal;
extern crate tmp1x2;

use hal::I2cdev;
use tmp1x2::{ Tmp1x2, SlaveAddr };

let dev = I2cdev::new("/dev/i2c-1").unwrap();
let mut sensor = Tmp1x2::new(dev, SlaveAddr::default());
let alert = sensor.is_comparator_mode_alert_active().unwrap();

Structs

TMP1X2 device driver.

Enums

Alert polarity
Conversion rate for continuous conversion mode
All possible errors in this crate
Fault queue
Possible slave addresses
Thermostat mode