2018-02-18 14:02:33 +05:30

82 lines
2.6 KiB
C++

// LM73 I2C class
// Based on Texas Instruments datasheet http://www.ti.com/lit/ds/symlink/lm73.pdf
// Note that this is a bare-bones driver and does not support all of the features
// of the LM73. I only added what I needed.
// 12/03/2012 Abe Erdos (abe@erdosmiller.com)
#ifndef _LM73_H_
#define _LM73_H_
#include "I2Cdev.h"
// LM73-0
#define LM73_0_ADDRESS_ADDR_FLT 0x48 // address pin is floating
#define LM73_0_ADDRESS_ADDR_GND 0x49 // address pin low (GND)
#define LM73_0_ADDRESS_ADDR_VDD 0x4A // address pin high (VDD)
#define LM73_1_ADDRESS_ADDR_FLT 0x4C // address pin if floating
#define LM73_1_ADDRESS_ADDR_GND 0x4D // address pin low (GND)
#define LM73_1_ADDRESS_ADDR_VDD 0x4E // address pin high (VDD)
#define LM73_DEFAULT_ADDRESS LM73_0_ADDRESS_ADDR_FLT
#define LM73_RA_TEMP 0x00
#define LM73_RA_CONFIG 0x01
#define LM73_RA_HI_THRESH 0x02
#define LM73_RA_LO_THRESH 0x03
#define LM73_RA_CTRL_STAT 0x04
#define LM73_RA_ID 0x07
typedef struct {
unsigned :2; // reserved
unsigned ONE_SHOT:1; // one shot (write 1 to start a conversion when PD == 1)
unsigned ALRT_RST:1; // alert reset (write 1 to reset, always reads 0)
unsigned ALRT_POL:1; // alert polarity (1 == active high, 0 == active low0
unsigned nALRT_EN:1; // alert enable (0 == alert enabled)
unsigned :1; // reserved
unsigned PD:1; // power down bit (0 == enabled)
} LM73ConfigBits;
typedef union {
LM73ConfigBits bit;
uint8_t all;
} LM73ConfigReg;
typedef struct {
unsigned DAV:1; // data available flag
unsigned TLOW:1; // temperature low flag
unsigned THI:1; // temperature high flag
unsigned ALRT_STAT:1; // alert pin status
unsigned :1; // reserved
unsigned RES:2; // resolution (00 == 11 bit res, 11 == 14 bit res)
unsigned TO_DIS:1; // SMB timeout disable
} LM73CtrlStatBits;
typedef union {
LM73CtrlStatBits bit;
uint8_t all;
} LM73CtrlStatReg;
class LM73 {
public:
LM73();
LM73(uint8_t address);
void initialize();
bool testConnection();
LM73ConfigReg getConfig();
void setConfig(LM73ConfigReg value);
LM73CtrlStatReg getCtrlStat();
void setCtrlStat(LM73CtrlStatReg value);
uint8_t getResolution(); // returns resolution in bits (including sign bit)
void setResolution(uint8_t resolution); // enter resolution in bits (including sign bit)
float getTemp(); // return temperature in C
private:
uint8_t devAddr;
uint8_t buffer[1];
LM73ConfigReg devConfig;
LM73CtrlStatReg devCtrlStat;
};
#endif