Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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*)®Address,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 }
Generated on Thu Jul 14 2022 13:17:08 by
1.7.2