Lukasz Uszko / MAX9611
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers max9611.cpp Source File

max9611.cpp

00001 #include "max9611.h"
00002 
00003 
00004 
00005 
00006 MAX9611::MAX9611(PinName sda, PinName scl, int i2cFrequencyHz, int address):mI2c(sda,scl), mI2cAddr(address)
00007 {
00008     mI2c.frequency(i2cFrequencyHz);
00009     if(!initMax9611()); //while(1){ //TODO handle error}
00010     mTemperature=0;
00011     mCsaCurrentValueOffset=0x0a;  //NOTE! set this parameter on your own, it depends on your used sensor
00012 }
00013 
00014 
00015 
00016 //write data to the sensor
00017 bool MAX9611::write(uint8_t regAddress, uint8_t* data,int dataLength)
00018 {
00019     uint8_t tempBuf[dataLength+1];
00020     tempBuf[0]=regAddress;
00021     memcpy(&(tempBuf[1]),data,dataLength);
00022     return mI2c.write(mI2cAddr,(char*)tempBuf,dataLength+1)==0;
00023 
00024 }
00025 
00026 //read data from the sensor
00027 bool MAX9611::read(uint8_t regAddress, uint8_t *data,int dataLength)
00028 {
00029     mI2c.write(mI2cAddr,(char*)&regAddress,1,true);
00030     return (mI2c.read(mI2cAddr,(char*)data,dataLength)==0);
00031 }
00032 
00033 //configuration of MAX9611
00034 bool MAX9611::initMax9611(eCtrlReg1MUX mux,
00035                           eCtrlReg1SHDN shdn,
00036                           eCtrlReg1LR lr,
00037                           eCtrlReg1MODE mode,
00038                           eCtrlReg2DTIM watchdogDelay,
00039                           eCtrlReg2RTIM watchdogRetryDelay)
00040 {
00041     uint8_t retVal=0;
00042     uint8_t controlReg1=0;
00043     uint8_t controlReg2=0;
00044     controlReg1=(mode<<5|lr<<4|shdn<<3|mux);
00045     controlReg2=(watchdogDelay<<3|watchdogRetryDelay<<2);
00046     retVal+= write(CONTROL_REGISTER_1_ADRR,&controlReg1,1);
00047     retVal+= write(CONTROL_REGISTER_2_ADRR,&controlReg2,1);
00048     if(retVal!=2) return false;
00049     mMuxReg= mux;
00050     return true;
00051 }
00052 
00053 
00054 bool MAX9611::readTemp(void)
00055 {
00056     uint8_t rawData[2];
00057     uint16_t rawTemp=0;
00058     if(!read(TEMP_DATA_BYTE_MSB_ADRR, rawData,2)) return false;
00059     rawTemp= get9BitData(rawData[0],rawData[1]);
00060     //mRawInt =rawTemp;
00061     if ( rawTemp & 0x100) {
00062         mTemperature = (float) (rawTemp- 256)*0.48;
00063     } else {
00064         mTemperature = (float)(rawTemp) *0.48;
00065     }
00066 
00067     return true;
00068 }
00069 
00070 
00071 bool MAX9611::readCSAOutputValue(void)
00072 {
00073     uint8_t rawData[2];
00074     uint16_t rawCSAVal=0;
00075     if(!read(CSA_DATA_BYTE_MSB_ADRR, rawData,2)) return false;
00076     rawCSAVal= get12BitData(rawData[0],rawData[1]);
00077     //mRawInt = rawCSAVal; //debug
00078     if(rawCSAVal<=mCsaCurrentValueOffset)
00079         mCurrentSenseAmplifierOutput=0;
00080     else mCurrentSenseAmplifierOutput= (float)(rawCSAVal)*(getCSACurrentCoeffmA()); // to get result in [mA]
00081 
00082     return true;
00083 }
00084 
00085 // useful debug methods
00086 
00087 uint16_t MAX9611::readRawControl(void)
00088 {
00089     uint8_t rawData[2];
00090     uint16_t rawCtrl=0;
00091     read(CONTROL_REGISTER_1_ADRR, rawData,2) ;
00092     rawCtrl= (rawData[0]<<8)|rawData[1];
00093     return rawCtrl;
00094 }
00095 
00096 
00097 uint16_t MAX9611::readRawRsValue(void)
00098 {
00099     uint8_t rawData[2];
00100     uint16_t rawRsVal=0;
00101     read(RS_DATA_BYTE_MSB_ADRR, rawData,2) ;
00102     rawRsVal= get12BitData(rawData[0],rawData[1]);
00103     return rawRsVal;
00104 }
00105 
00106 
00107 uint16_t MAX9611::readRawCSAOutValue(void)
00108 {
00109     uint8_t rawData[2];
00110     uint16_t rawCSAOut=0;
00111     read(CSA_DATA_BYTE_MSB_ADRR, rawData,2) ;
00112     rawCSAOut= get12BitData(rawData[0],rawData[1]);
00113     return rawCSAOut;
00114 }
00115 
00116 
00117 uint16_t MAX9611::readRawOutValue(void)
00118 {
00119     uint8_t rawData[2];
00120     uint16_t rawOut=0;
00121     read(OUT_DATA_BYTE_MSB_ADRR, rawData,2) ;
00122     rawOut= get12BitData(rawData[0],rawData[1]);
00123     return rawOut;
00124 }