ADT7410 Temperature Sensor
The Analog Devices ADT7410 [1] is an I2C temperature sensor with 16-bit 0.0078°C temperature resolution and 0.5°C temperature tolerance. It can operate from 2.7 V to 5.5 V.
It's available on a breakout board from Adafruit [2]. or you could mount the chip yourself on an SOIC-8 breakout board:
It provides two address inputs which can be connected to GND or Vcc, allowing you to have four I2C addresses. The default I2C address, with both lines connected to GND, is #x48 or 72.
Reading the temperature
The following routine reads the temperature and returns it as an integer, in 1/16ths of a degree Celsius:
(defun adt7410-temp () (with-i2c (str #x48) (write-byte 0 str) (restart-i2c str 2) (let* ((hi (read-byte str)) (lo (read-byte str)) (tmp (logior (ash hi 5) (ash lo -3)))) (- (logand tmp #x0FFF) (logand tmp #x1000)))))
To return the temperature as an integer number of degrees, or a floating-point number on a 32-bit version of uLisp, do:
(/ (adt7410-temp) 16)
- ^ ADT7410 Datasheet on Analog devices.
- ^ ADT7410 High Accuracy I2C Temperature Sensor Breakout Board on Adafruit.