library for MAX9611 /9612 Current-Sense Amplifiers
Diff: max9611.cpp
- Revision:
- 5:6fec24c37e2a
- Parent:
- 3:41839eb9229f
- Child:
- 6:32b5eb1df932
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/max9611.cpp Sat Nov 08 20:45:21 2014 +0000 @@ -0,0 +1,68 @@ +#include "max9611.h" + + + + +MAX9611::MAX9611(PinName sda, PinName scl, int i2cFrequencyHz, int address):i2c(sda,scl), i2cAddr(address) +{ + i2c.frequency(i2cFrequencyHz); + if(!initMax9611()) while(1){ //TODO handle error + } + mTemperature=0; +} + + + +//write data to the sensor +bool MAX9611::write(uint8_t regAddress, uint8_t* data,int dataLength) +{ + uint8_t tempBuf[dataLength+1]; + tempBuf[0]=regAddress; + memcpy(tempBuf,data,dataLength); + return i2c.write(i2cAddr,(char*)tempBuf,dataLength+1)==0; +} + +//read data from the sensor +bool MAX9611::read(uint8_t regAddress, uint8_t *data,int dataLength) +{ + i2c.write(i2cAddr,(char*)®Address,1,true); + return (i2c.read(i2cAddr,(char*)data,dataLength)==0); +} + +//configuration of MAX9611 +bool MAX9611::initMax9611(eCtrlReg1MUX mux, + eCtrlReg1SHDN shdn, + eCtrlReg1LR lr, + eCtrlReg1MODE mode, + eCtrlReg2DTIM watchdogDelay, + eCtrlReg2RTIM watchdogRetryDelay) +{ + uint8_t retVal=0; + uint8_t controlReg1=0; + uint8_t controlReg2=0; + + controlReg1=(mode<<5|lr<<4|shdn<<3|mux); + controlReg2=(watchdogDelay<<3|watchdogRetryDelay<<2); + retVal+= write(CONTROL_REGISTER_1_ADRR,&controlReg1,1); + retVal+= write(CONTROL_REGISTER_2_ADRR,&controlReg2,1); + if(retVal!=2) return false; + return true; +} + + +bool MAX9611::readTemp(void) +{ + uint8_t rawData[2]; + uint16_t rawTemp=0; + if(!read(TEMP_DATA_BYTE_MSB_ADRR, rawData,2)) return false; + rawTemp= get9BitData(rawData[0],rawData[1]); + if ( rawTemp & 0x100) { + mTemperature = (float) (rawTemp- 256)*0.48; + } + else { + mTemperature = (float)(rawTemp) *0.48; + } + return true; +} + +