library for MAX9611 /9612 Current-Sense Amplifiers
max9611.cpp
- Committer:
- igbt6
- Date:
- 2014-11-11
- Revision:
- 6:32b5eb1df932
- Parent:
- 5:6fec24c37e2a
- Child:
- 7:012f5b39405e
File content as of revision 6:32b5eb1df932:
#include "max9611.h" MAX9611::MAX9611(PinName sda, PinName scl, int i2cFrequencyHz, int address):mI2c(sda,scl), mI2cAddr(address) { mI2c.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[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) { mI2c.write(mI2cAddr,(char*)®Address,1,true); return (mI2c.read(mI2cAddr,(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]); //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; }