Revision 0:8ba1cde7adb6, committed 2017-08-16
- Comitter:
- laserdad
- Date:
- Wed Aug 16 17:33:09 2017 +0000
- Commit message:
- no changes
Changed in this revision
diff -r 000000000000 -r 8ba1cde7adb6 MAX31725.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/MAX31725.cpp Wed Aug 16 17:33:09 2017 +0000
@@ -0,0 +1,97 @@
+#include "MAX31725.h"
+#include "mbed.h"
+
+
+extern Serial pc;
+extern I2C i2c;
+
+
+void MAX31725::writeRegister(uint8_t addr, uint8_t reg, uint8_t val)
+{
+ /*writes 1 byte to a single register*/
+ char writeData[2];
+ writeData[0] = reg ;
+ writeData[1] = val;
+ i2c.write(addr,writeData, 2);
+}
+
+void MAX31725::writeBlock(uint8_t addr, uint8_t startReg, uint8_t *data, uint8_t numBytes)
+{
+ /*writes data from an array beginning at the startReg*/
+ char writeData[numBytes+1];
+ writeData[0]=startReg;
+ for(int n=1; n<numBytes; n++)
+ {
+ writeData[n]=data[n-1];
+ }
+ i2c.write(addr,writeData,numBytes+1);
+}
+
+void MAX31725::readRegisters(uint8_t addr, uint8_t startReg, char *regData, int numBytes)
+{
+ char writeData = startReg;
+ i2c.write(addr,&writeData,1,true); //true is for repeated start
+ i2c.read(addr,regData,numBytes);
+}
+
+uint16_t MAX31725::LSB_MSB_2uint16(char *data)
+{
+/*returns an unsinged 16 bit integer from a 2 data bytes, where the second byte is the MSB*/
+ return ((uint16_t)data[1] << 8) + (uint16_t)data[0];
+}
+
+uint16_t MAX31725::MSB_LSB_2uint16(char *data)
+{
+/*returns an unsinged 16 bit integer from a 2 data bytes, where the second byte is the MSB*/
+ return ((uint16_t)data[0] << 8) + (uint16_t)data[1];
+}
+
+void MAX31725::regDump(uint8_t Addr, uint8_t startByte, uint8_t endByte)
+{
+ /*print the values of up to 20 registers*/
+ char regData[20];
+ int numBytes;
+ if (endByte>=startByte)
+ {
+ numBytes = (endByte-startByte+1) < 20 ? (endByte-startByte+1) : 20;
+ }
+ else
+ {
+ numBytes=1;
+ }
+
+ regData[0] = startByte;
+ i2c.write(Addr,regData,1,true);
+ i2c.read(Addr, regData, numBytes);
+ for(int n=0; n<numBytes; n++)
+ {
+ pc.printf("%X, %X \r\n", startByte+n, regData[n]);
+ }
+}
+
+
+bool MAX31725::bitRead(uint16_t data, uint8_t bitNum)
+{
+ uint16_t mask = 1<<bitNum;
+ uint16_t masked_bit = data & mask;
+ return masked_bit >> bitNum;
+}
+
+float MAX31725::getTemp(void)
+{
+ char tempData[2];
+ uint16_t tempBits;
+ const float LSB =0.00390625;
+
+ // read temperature
+ readRegisters(MAX31725_ADDR,0x00,tempData,2);
+ tempBits = MSB_LSB_2uint16(tempData);
+ if(bitRead(tempBits,15) == 1 )
+ {
+ return( (32768-tempBits)*LSB ); //negative temp
+ }
+ else
+ {
+ return ( tempBits*LSB ); //positive temp
+ }
+}
diff -r 000000000000 -r 8ba1cde7adb6 MAX31725.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/MAX31725.h Wed Aug 16 17:33:09 2017 +0000
@@ -0,0 +1,23 @@
+#ifndef __MAX31725_H__
+#define __MAX31725_H__
+
+#include "mbed.h"
+
+#define MAX31725_ADDR 0x92 //this is the 8-bit address
+#define MAX31725_CONVERSION_TIME_MS 44
+
+class MAX31725
+{
+ public:
+ void writeRegister(uint8_t, uint8_t, uint8_t);
+ void writeBlock(uint8_t, uint8_t, uint8_t *, uint8_t);
+ void readRegisters(uint8_t, uint8_t, char *, int);
+ uint16_t LSB_MSB_2uint16(char *);
+ uint16_t MSB_LSB_2uint16(char *);
+ void regDump(uint8_t, uint8_t, uint8_t);
+ bool bitRead(uint16_t, uint8_t);
+ float getTemp(void);
+};
+
+
+#endif
\ No newline at end of file