Library for the DS1721, 2-Wire Digital Thermometer and Thermostat from Dallas Semiconductor (Maxim Integrated)

Fork of DS1721 by Cameron Haegle

DS1721.h

Committer:
chaegle
Date:
2013-05-02
Revision:
1:4fd830a97574
Child:
2:22dbeccb82be

File content as of revision 1:4fd830a97574:

/***********************************************************************************
 * @file        DS1721.h
 * 
 * @version     1.00
 * @date        04/29/2013
 * 
 * @author      Cameron Haegle
 * @company     Digi International
 * @copyright   
 * 
 **********************************************************************************/

#ifndef DS1721_H
#define DS1721_H

#include "mbed.h"

// default DS1721 I2C address
#define DS1721_ADDR             0x48

// DS1721 commands
#define CMD_START_CONVT         0x51
#define CMD_STOP_CONVT          0x22
#define CMD_READ_TEMP           0xAA
#define CMD_ACCESS_CFG          0xAC
#define CMD_ACCESS_TH           0xA1
#define CMD_ACCESS_TL           0xA2

// thermometer config register values
#define CONV_FOREVER            0x00
#define CONV_ONE_SHOT           0x01
#define POLARITY_ACTIVE_LOW     0x00
#define POLARITY_ACTIVE_HIGH    0x02
#define RES_9_BIT               0x00    // 0000
#define RES_10_BIT              0x04    // 0100
#define RES_11_BIT              0x08    // 1000
#define RES_12_BIT              0x0C    // 1100

// DS1721 operating modes (HEAT = active low, Cool = active high)
#define MODE_HEAT               POLARITY_ACTIVE_LOW
#define MODE_COOL               POLARITY_ACTIVE_HIGH


/**
 * !Library for the DS1721 temperature sensor.
 * The DS1721 is an I2C digital temperature sensor, with a range of -55C to +125C and a 0.125C resolution.
 * 
 * @code
 * #include "mbed.h"
 * #include "DS1721.h"
 * 
 * #define DS1721_I2C_ADDRESS (0x48<<1)
 * 
 * int main(void) {
 * 
 * DS1721 thermo(PTC9, PTC8, DS1721_I2C_ADDRESS);
 * 
 * // initialize the temperature sensor
 * thermo.startConversion();
 * thermo.setLowSetpoint(25);
 * thermo.setHighSetpoint(27);
 * thermo.setPolarity(POLARITY_ACTIVE_HIGH);
 * 
 *     while (true) {       
 *         printf("Temp: %d\r\n", thermo.getTemp());
 *     }
 * } 
 * @endcode
 **/
class DS1721
{
public:
  /** 
   * DS1721 constructor
   *
   * @param sda SDA pin
   * @param sdl SCL pin
   * @param addr addr of the I2C peripheral
   **/
  DS1721(PinName sda, PinName scl, int addr);
  
  /** 
   * DS1721 constructor
   * 
   * @param sda SDA pin
   * @param sdl SCL pin
   * @param addr addr of the I2C peripheral
   * @param resolution readout resolution of the theremometer (9, 10, 11, 12 bit)
   * @param polarity the state on which the thermostat output is enabled
   * @param mode the temperature conversion mode (single shot or continuous)
   **/
  DS1721(PinName sda, PinName scl, int addr,int resolution, int polarity, int mode);
  
  /*!
   * DS1721 destructor
   */ 
  ~DS1721();
  
  /**
   * Reads the temperature from the DS1721 and converts it to a useable value.
   *
   * @returns the current temperature, as in integer
   **/
  int getTemp(void);

  /**
   * Sets the temperature polarity (POL) bit of the sensor. This bit determines 
   * upon which set point the theremostat output is active.
   *
   * @param int the new polarity value
   * @returns the result of the function (0 - Failure, 1 - Success) 
   **/  
  int setPolarity(int polarity);

  /**
   * Gets the temperature polarity (POL) bit of the sensor. This bit determines 
   * upon which set point the theremostat output is active.
   *
   * @returns the value of the POL bit (0 - active low, 1 - active high)
   **/    
  int getPolarity(void);

  /**
   * Initiates a temperature conversion. If the DS1721 is configured for single shot mode 
   * this function must be called prior to reading the temperature (re: getTemp())
   *
   * @returns the result of the function (0 - Failure, 1 - Success) 
   **/    
  int startConversion(void);

  /**
   * Stops a temperature conversion. 
   *
   * @returns the result of the function (0 - Failure, 1 - Success) 
   **/   
  int stopConversion(void);

  /**
   * Sets the configuration register of the DS1721. 
   *
   * @param int the new configuration value (resolution | polarity | mode)
   * @returns the result of the function (0 - Failure, 1 - Success) 
   **/    
  int setConfig(int config);
  
  /**
   * Retrieves the configuration register of the DS1721.
   *
   * @returns 
   **/    
  int getConfig(int* config);

  /**
   * Retrieves the configured low temperature set point value.
   *
   * @returns the current low temperature set point value (degrees C)
   **/    
  int getLowSetpoint(void);

  /**
   * Sets the low temperature set point value.
   *
   * @param int the new low set point temperature (degrees C)
   * @returns the result of the function (0 - Failure, 1 - Success) 
   **/    
  int setLowSetpoint(int newSp);

  /**
   * Retrieves the configured high temperature set point value.
   *
   * @returns the current high temperature set point value (degrees C)
   **/    
  int getHighSetpoint(void);

  /**
   * Sets the high temperature set point value.
   *
   * @param int the new high temperature set point value (degrees C)
   * @returns the result of the function (0 - Failure, 1 - Success) 
   **/    
  int setHighSetpoint(int newSp);
  
private:
  I2C m_i2c;
  int m_addr;
  int _resolution;
  int _polarity;
  int _mode;
  int _tl;
  int _num_read;
  int _th;
};

#endif