A feature complete driver for the LM75B temperature sensor from NXP.
Fork of LM75B by
Diff: LM75B.h
- Revision:
- 0:557a92280097
- Child:
- 1:3da8df4319e8
diff -r 000000000000 -r 557a92280097 LM75B.h --- /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