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.
Dependents: app-board-TempAlarm LM75B IoTWorkshopSensors EduRobot ... more
Revision 0:557a92280097, committed 2013-07-31
- Comitter:
- neilt6
- Date:
- Wed Jul 31 22:04:57 2013 +0000
- Child:
- 1:3da8df4319e8
- Commit message:
- Initial commit
Changed in this revision
| LM75B.cpp | Show annotated file Show diff for this revision Revisions of this file |
| LM75B.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LM75B.cpp Wed Jul 31 22:04:57 2013 +0000
@@ -0,0 +1,273 @@
+/* mbed LM75B Library
+ * Copyright (c) 2013 neilt6
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "LM75B.h"
+#include "mbed.h"
+
+LM75B::LM75B(PinName sda, PinName scl, int addr) : _i2c(sda, scl)
+{
+ //Set the internal device address
+ _addr = addr;
+}
+
+LM75B_Power_t LM75B::getPowerMode(void)
+{
+ //Read the 8-bit register value
+ char value = _read8(LM75B_REG_CONF);
+
+ //Return the status of the SHUTDOWN bit
+ if (value & (1 << 0))
+ return LM75B_Power_Shutdown;
+ else
+ return LM75B_Power_Normal;
+}
+
+void LM75B::setPowerMode(LM75B_Power_t mode)
+{
+ //Read the current 8-bit register value
+ char value = _read8(LM75B_REG_CONF);
+
+ //Set or clear the SHUTDOWN bit
+ if (mode == LM75B_Power_Shutdown)
+ value |= (1 << 0);
+ else
+ value &= ~(1 << 0);
+
+ //Write the value back out
+ _write8(LM75B_REG_CONF, value);
+}
+
+LM75B_OS_Mode_t LM75B::getOSMode(void)
+{
+ //Read the 8-bit register value
+ char value = _read8(LM75B_REG_CONF);
+
+ //Return the status of the OS_COMP_INT bit
+ if (value & (1 << 1))
+ return LM75B_OS_Interrupt;
+ else
+ return LM75B_OS_Comparator;
+}
+
+void LM75B::setOSMode(LM75B_OS_Mode_t mode)
+{
+ //Read the current 8-bit register value
+ char value = _read8(LM75B_REG_CONF);
+
+ //Set or clear the OS_COMP_INT bit
+ if (mode == LM75B_OS_Interrupt)
+ value |= (1 << 1);
+ else
+ value &= ~(1 << 1);
+
+ //Write the value back out
+ _write8(LM75B_REG_CONF, value);
+}
+
+LM75B_OS_Polarity_t LM75B::getOSPolarity(void)
+{
+ //Read the 8-bit register value
+ char value = _read8(LM75B_REG_CONF);
+
+ //Return the status of the OS_POL bit
+ if (value & (1 << 2))
+ return LM75B_OS_ActiveHigh;
+ else
+ return LM75B_OS_ActiveLow;
+}
+
+void LM75B::setOSPolarity(LM75B_OS_Polarity_t polarity)
+{
+ //Read the current 8-bit register value
+ char value = _read8(LM75B_REG_CONF);
+
+ //Set or clear the OS_POL bit
+ if (polarity == LM75B_OS_ActiveHigh)
+ value |= (1 << 2);
+ else
+ value &= ~(1 << 2);
+
+ //Write the value back out
+ _write8(LM75B_REG_CONF, value);
+}
+
+LM75B_OS_FaultQueue_t LM75B::getOSFaultQueue(void)
+{
+ //Read the 8-bit register value
+ char value = _read8(LM75B_REG_CONF);
+
+ //Return the status of the OS_F_QUE bits
+ if ((value & (1 << 3)) && (value & (1 << 4)))
+ return LM75B_OS_FaultQueue_6;
+ else if (!(value & (1 << 3)) && (value & (1 << 4)))
+ return LM75B_OS_FaultQueue_4;
+ else if ((value & (1 << 3)) && !(value & (1 << 4)))
+ return LM75B_OS_FaultQueue_2;
+ else
+ return LM75B_OS_FaultQueue_1;
+}
+
+void LM75B::setOSFaultQueue(LM75B_OS_FaultQueue_t queue)
+{
+ //Read the current 8-bit register value
+ char value = _read8(LM75B_REG_CONF);
+
+ //Clear the old OS_F_QUE bits
+ value &= ~(3 << 3);
+
+ //Set the new OS_F_QUE bits
+ if (queue == LM75B_OS_FaultQueue_2)
+ value |= (1 << 3);
+ else if (queue == LM75B_OS_FaultQueue_4)
+ value |= (2 << 3);
+ else if (queue == LM75B_OS_FaultQueue_6)
+ value |= (3 << 3);
+
+ //Write the value back out
+ _write8(LM75B_REG_CONF, value);
+}
+
+float LM75B::getAlertTemp(void)
+{
+ //Use the 9-bit helper to read the TOS register
+ return _readTempHelper(LM75B_REG_TOS);
+}
+
+void LM75B::setAlertTemp(float temp)
+{
+ //Use the 9-bit helper to write to the TOS register
+ return _writeTempHelper(LM75B_REG_TOS, temp);
+}
+
+float LM75B::getAlertHyst(void)
+{
+ //Use the 9-bit helper to read the THYST register
+ return _readTempHelper(LM75B_REG_THYST);
+}
+
+void LM75B::setAlertHyst(float temp)
+{
+ //Use the 9-bit helper to write to the THYST register
+ return _writeTempHelper(LM75B_REG_THYST, temp);
+}
+
+float LM75B::getTemp(void)
+{
+ //Signed return value
+ short value;
+
+ //Read the 11-bit raw temperature value
+ value = _read16(LM75B_REG_TEMP) >> 5;
+
+ //Sign extend negative numbers
+ if (value & (1 << 10))
+ value |= 0xFC00;
+
+ //Return the temperature in °C
+ return value * 0.125;
+}
+
+char LM75B::_read8(char reg)
+{
+ //Select the register
+ _i2c.write(_addr, ®, 1);
+
+ //Read the 8-bit register
+ _i2c.read(_addr, ®, 1);
+
+ //Return the byte
+ return reg;
+}
+
+void LM75B::_write8(char reg, char data)
+{
+ //Create a temporary buffer
+ char buff[2];
+
+ //Load the register address and 8-bit data
+ buff[0] = reg;
+ buff[1] = data;
+
+ //Write the data
+ _i2c.write(_addr, buff, 2);
+}
+
+unsigned short LM75B::_read16(char reg)
+{
+ //Create a temporary buffer
+ char buff[2];
+
+ //Select the register
+ _i2c.write(_addr, ®, 1);
+
+ //Read the 16-bit register
+ _i2c.read(_addr, buff, 2);
+
+ //Return the combined 16-bit value
+ return (buff[0] << 8) | buff[1];
+}
+
+void LM75B::_write16(char reg, unsigned short data)
+{
+ //Create a temporary buffer
+ char buff[3];
+
+ //Load the register address and 16-bit data
+ buff[0] = reg;
+ buff[1] = data >> 8;
+ buff[2] = data;
+
+ //Write the data
+ _i2c.write(_addr, buff, 3);
+}
+
+float LM75B::_readTempHelper(char reg)
+{
+ //Signed return value
+ short value;
+
+ //Read the 9-bit raw temperature value
+ value = _read16(reg) >> 7;
+
+ //Sign extend negative numbers
+ if (value & (1 << 8))
+ value |= 0xFF00;
+
+ //Return the temperature in °C
+ return value * 0.5;
+}
+
+void LM75B::_writeTempHelper(char reg, float temp)
+{
+ //Range limit temp
+ if (temp < -55.0)
+ temp = -55.0;
+ else if (temp > 125.0)
+ temp = 125.0;
+
+ //Extract and shift the signed integer
+ short value = temp * 2;
+ value <<= 7;
+
+ //Send the new value
+ _write16(reg, value);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LM75B.h Wed Jul 31 22:04:57 2013 +0000
@@ -0,0 +1,195 @@
+/* mbed LM75B Library
+ * Copyright (c) 2013 neilt6
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef LM75B_H
+#define LM75B_H
+
+#include "mbed.h"
+
+//i2c address definitions
+#define LM75B_A0 (0x48 << 1)
+#define LM75B_A1 (0x49 << 1)
+#define LM75B_A2 (0x4A << 1)
+#define LM75B_A3 (0x4B << 1)
+#define LM75B_A4 (0x4C << 1)
+#define LM75B_A5 (0x4D << 1)
+#define LM75B_A6 (0x4E << 1)
+#define LM75B_A7 (0x4F << 1)
+
+//i2c register definitions
+#define LM75B_REG_TEMP 0x00
+#define LM75B_REG_CONF 0x01
+#define LM75B_REG_THYST 0x02
+#define LM75B_REG_TOS 0x03
+
+//Power mode enumeration
+typedef enum {
+ LM75B_Power_Normal,
+ LM75B_Power_Shutdown
+} LM75B_Power_t;
+
+//OS mode enumeration
+typedef enum {
+ LM75B_OS_Comparator,
+ LM75B_OS_Interrupt
+} LM75B_OS_Mode_t;
+
+//OS polarity enumeration
+typedef enum {
+ LM75B_OS_ActiveLow,
+ LM75B_OS_ActiveHigh
+} LM75B_OS_Polarity_t;
+
+//OS fault queue enumeration
+typedef enum {
+ LM75B_OS_FaultQueue_1,
+ LM75B_OS_FaultQueue_2,
+ LM75B_OS_FaultQueue_4,
+ LM75B_OS_FaultQueue_6
+} LM75B_OS_FaultQueue_t;
+
+/** LM75B class.
+ * Used for controlling an LM75B temperature sensor connected via I2C.
+ *
+ * Example:
+ * @code
+ * #include "mbed.h"
+ * #include "LM75B.h"
+ *
+ * Serial pc(USBTX, USBRX);
+ * LM75B sensor(p28, p27, LM75B_A0);
+ *
+ * int main() {
+ * while (1) {
+ * //Read the temperature
+ * float temp = sensor.getTemp();
+ *
+ * //Print the temperature
+ * pc.printf("Temp = %.3f\n", temp);
+ *
+ * //Sleep for 0.5 seconds
+ * wait(0.5);
+ * }
+ * }
+ * @endcode
+ */
+class LM75B
+{
+public:
+ /** Create an LM75B object connected to the specified I2C pins with the specified I2C slave address
+ *
+ * @param sda I2C data pin
+ * @param scl I2C clock pin
+ * @param addr I2C slave address
+ */
+ LM75B(PinName sda, PinName scl, int addr);
+
+ /** Get the current power mode of the LM75B
+ *
+ * @returns The current power mode as an LM75B_OS_Mode_t enum.
+ */
+ LM75B_Power_t getPowerMode(void);
+
+ /** Set the power mode of the LM75B
+ *
+ * @param mode The new power mode as an LM75B_OS_Mode_t enum.
+ */
+ void setPowerMode(LM75B_Power_t mode);
+
+ /** Get the current OS pin mode of the LM75B
+ *
+ * @returns The current OS pin mode as an LM75B_OS_Mode_t enum.
+ */
+ LM75B_OS_Mode_t getOSMode(void);
+
+ /** Set the OS pin mode of the LM75B
+ *
+ * @param mode The new OS pin mode as an LM75B_OS_Mode_t enum.
+ */
+ void setOSMode(LM75B_OS_Mode_t mode);
+
+ /** Get the current OS pin polarity of the LM75B
+ *
+ * @returns The current OS pin polarity as an LM75B_OS_Polarity_t enum.
+ */
+ LM75B_OS_Polarity_t getOSPolarity(void);
+
+ /** Set the OS pin polarity of the LM75B
+ *
+ * @param polarity The new OS pin polarity as an LM75B_OS_Polarity_t enum.
+ */
+ void setOSPolarity(LM75B_OS_Polarity_t polarity);
+
+ /** Get the current OS pin fault queue length of the LM75B
+ *
+ * @returns The current OS pin fault queue length as an LM75B_OS_FaultQueue_t enum.
+ */
+ LM75B_OS_FaultQueue_t getOSFaultQueue(void);
+
+ /** Set the OS pin fault queue length of the LM75B
+ *
+ * @param queue The new OS pin fault queue length as an LM75B_OS_FaultQueue_t enum.
+ */
+ void setOSFaultQueue(LM75B_OS_FaultQueue_t queue);
+
+ /** Get the current alert temperature threshold of the LM75B
+ *
+ * @returns The current alert temperature threshold as a float.
+ */
+ float getAlertTemp(void);
+
+ /** Set the alert temperature threshold of the LM75B
+ *
+ * @param temp The new alert temperature threshold as a float.
+ */
+ void setAlertTemp(float temp);
+
+ /** Get the current alert temperature hysteresis threshold of the LM75B
+ *
+ * @returns The current alert temperature hysteresis threshold as a float.
+ */
+ float getAlertHyst(void);
+
+ /** Set the alert temperature hysteresis threshold of the LM75B
+ *
+ * @param temp The new alert temperature hysteresis threshold as a float.
+ */
+ void setAlertHyst(float temp);
+
+ /** Get the current temperature measurement of the LM75B
+ *
+ * @returns The current temperature measurement as a float.
+ */
+ float getTemp(void);
+
+private:
+ I2C _i2c;
+ int _addr;
+ char _read8(char reg);
+ void _write8(char reg, char data);
+ unsigned short _read16(char reg);
+ void _write16(char reg, unsigned short data);
+ float _readTempHelper(char reg);
+ void _writeTempHelper(char reg, float temp);
+};
+
+#endif
\ No newline at end of file
LM75B Temperature Sensor
LPC General Purpose Shield OM13082