library for MAX9611 /9612 Current-Sense Amplifiers
Diff: max9611.cpp
- Revision:
- 6:32b5eb1df932
- Parent:
- 5:6fec24c37e2a
- Child:
- 7:012f5b39405e
--- a/max9611.cpp Sat Nov 08 20:45:21 2014 +0000 +++ b/max9611.cpp Tue Nov 11 02:25:05 2014 +0000 @@ -3,11 +3,11 @@ -MAX9611::MAX9611(PinName sda, PinName scl, int i2cFrequencyHz, int address):i2c(sda,scl), i2cAddr(address) +MAX9611::MAX9611(PinName sda, PinName scl, int i2cFrequencyHz, int address):mI2c(sda,scl), mI2cAddr(address) { - i2c.frequency(i2cFrequencyHz); - if(!initMax9611()) while(1){ //TODO handle error - } + mI2c.frequency(i2cFrequencyHz); + if(!initMax9611()); //while(1){ //TODO handle error + //} mTemperature=0; } @@ -18,15 +18,16 @@ { uint8_t tempBuf[dataLength+1]; tempBuf[0]=regAddress; - memcpy(tempBuf,data,dataLength); - return i2c.write(i2cAddr,(char*)tempBuf,dataLength+1)==0; + memcpy(&(tempBuf[1]),data,dataLength); + return mI2c.write(mI2cAddr,(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); + mI2c.write(mI2cAddr,(char*)®Address,1,true); + return (mI2c.read(mI2cAddr,(char*)data,dataLength)==0); } //configuration of MAX9611 @@ -56,13 +57,59 @@ uint16_t rawTemp=0; if(!read(TEMP_DATA_BYTE_MSB_ADRR, rawData,2)) return false; rawTemp= get9BitData(rawData[0],rawData[1]); + //mRawInt =rawTemp; if ( rawTemp & 0x100) { mTemperature = (float) (rawTemp- 256)*0.48; } else { mTemperature = (float)(rawTemp) *0.48; } + + return true; +} + + +bool MAX9611::readCSAOutputValue(void) +{ + uint8_t rawData[2]; + uint16_t rawCSAVal=0; + if(!read(CSA_DATA_BYTE_MSB_ADRR, rawData,2)) return false; + rawCSAVal= get12BitData(rawData[0],rawData[1]); + mRawInt = rawCSAVal; + if(rawCSAVal<=csaCurrentValueOffset) + mCurrentSenseAmplifierOutput=0;// (float)(rawCSAVal-csaCurrentValueOffset)*(0.269); + else mCurrentSenseAmplifierOutput= (float)(rawCSAVal)*(0.269); + return true; } + +uint16_t MAX9611::readControl(void) +{ + uint8_t rawData[2]; + uint16_t rawTemp=0; + read(CONTROL_REGISTER_1_ADRR, rawData,2) ; + rawTemp= (rawData[0]<<8)|rawData[1]; + return rawTemp; +} + + +uint16_t MAX9611::readRsValue(void) +{ + uint8_t rawData[2]; + uint16_t rawTemp=0; + read(RS_DATA_BYTE_MSB_ADRR, rawData,2) ; + rawTemp= get12BitData(rawData[0],rawData[1]); + return rawTemp; +} + + +uint16_t MAX9611::readOutValue(void) +{ + uint8_t rawData[2]; + uint16_t rawTemp=0; + read(OUT_DATA_BYTE_MSB_ADRR, rawData,2) ; + rawTemp= get12BitData(rawData[0],rawData[1]); + return rawTemp; +}