A feature complete driver for the LM75B temperature sensor from NXP.

Fork of LM75B by Neil Thiessen

Revision:
0:557a92280097
Child:
1:3da8df4319e8
--- /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