69 lines
1.6 KiB
C++
69 lines
1.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)
|
|
|
|
#include "LM73.h"
|
|
|
|
LM73::LM73() {
|
|
devAddr = LM73_DEFAULT_ADDRESS;
|
|
devConfig.all = 0x40; // reset state
|
|
devCtrlStat.all = 0x08; // reset state
|
|
}
|
|
|
|
LM73::LM73(uint8_t address) {
|
|
devAddr = address;
|
|
devConfig.all = 0x40; // reset state
|
|
devCtrlStat.all = 0x08; // reset state
|
|
}
|
|
|
|
void LM73::initialize() {
|
|
// there's nothing to do, really
|
|
}
|
|
|
|
bool LM73::testConnection() {
|
|
uint16_t buf;
|
|
I2Cdev::readWord(devAddr, LM73_RA_ID, &buf);
|
|
return buf == 0x0190;
|
|
}
|
|
|
|
LM73ConfigReg LM73::getConfig() {
|
|
I2Cdev::readByte(devAddr, LM73_RA_CONFIG, buffer);
|
|
devConfig.all = buffer[0];
|
|
return devConfig;
|
|
}
|
|
|
|
LM73CtrlStatReg LM73::getCtrlStat() {
|
|
I2Cdev::readByte(devAddr, LM73_RA_CTRL_STAT, buffer);
|
|
devCtrlStat.all = buffer[0];
|
|
return devCtrlStat;
|
|
}
|
|
|
|
void LM73::setCtrlStat(LM73CtrlStatReg value) {
|
|
I2Cdev::writeByte(devAddr, LM73_RA_CTRL_STAT, value.all);
|
|
}
|
|
|
|
uint8_t LM73::getResolution() {
|
|
LM73::getCtrlStat();
|
|
return devCtrlStat.bit.RES + 11;
|
|
}
|
|
|
|
float LM73::getTemp() {
|
|
uint16_t buf;
|
|
int16_t temp;
|
|
I2Cdev::readWord(devAddr, LM73_RA_TEMP, &buf);
|
|
temp = buf;
|
|
temp = (temp>>2);
|
|
return 0.03125f * (float)temp;
|
|
}
|
|
|
|
void LM73::setResolution(uint8_t resolution) {
|
|
if(10 < resolution && resolution < 15) {
|
|
LM73::getCtrlStat();
|
|
devCtrlStat.bit.RES = resolution - 11;
|
|
LM73::setCtrlStat(devCtrlStat);
|
|
}
|
|
}
|
|
|