temperature library
Fork of LM75B by
Diff: LM75B.h
- Revision:
- 2:cc474eead249
- Parent:
- 0:1be38995591b
--- a/LM75B.h Fri Oct 26 21:40:51 2012 +0000 +++ b/LM75B.h Wed Feb 24 15:50:09 2016 +0000 @@ -1,19 +1,17 @@ -/* Copyright (c) 2012 cstyles, MIT License +/* LM75B Driver Library + * Copyright (c) 2013 Neil Thiessen * - * 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: + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. + * http://www.apache.org/licenses/LICENSE-2.0 * - * 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. + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ #ifndef LM75B_H @@ -21,44 +19,206 @@ #include "mbed.h" -// LM75B IIC address -#define LM75B_ADDR 0x90 - -// LM75B registers -#define LM75B_Conf 0x01 -#define LM75B_Temp 0x00 -#define LM75B_Tos 0x03 -#define LM75B_Thyst 0x02 - -//!Library for the LM75B temperature sensor. -/*! -The LM75B is an I2C digital temperature sensor, with a range of -55C to +125C and a 0.125C resolution. -*/ +/** LM75B class. + * Used for controlling an LM75B temperature sensor connected via I2C. + * + * Example: + * @code + * #include "mbed.h" + * #include "LM75B.h" + * + * //Create an LM75B object at the default address (ADDRESS_0) + * LM75B sensor(p28, p27); + * + * int main() + * { + * //Try to open the LM75B + * if (sensor.open()) { + * printf("Device detected!\n"); + * + * while (1) { + * //Print the current temperature + * printf("Temp = %.3f\n", (float)sensor); + * + * //Sleep for 0.5 seconds + * wait(0.5); + * } + * } else { + * error("Device not detected!\n"); + * } + * } + * @endcode + */ class LM75B { public: - //!Creates an instance of the class. - /*! - Connect module at I2C address addr using I2C port pins sda and scl. - LM75B - */ - LM75B(PinName sda, PinName scl); - - /*! - Destroys instance. - */ - ~LM75B(); - - //!Reads the current temperature. - /*! - Reads the temperature register of the LM75B and converts it to a useable value. - */ - float read(); - + /** Represents the different I2C address possibilities for the LM75B + */ + enum Address { + ADDRESS_0 = (0x48 << 1), /**< A[2:0] pins = 000 */ + ADDRESS_1 = (0x49 << 1), /**< A[2:0] pins = 001 */ + ADDRESS_2 = (0x4A << 1), /**< A[2:0] pins = 010 */ + ADDRESS_3 = (0x4B << 1), /**< A[2:0] pins = 011 */ + ADDRESS_4 = (0x4C << 1), /**< A[2:0] pins = 100 */ + ADDRESS_5 = (0x4D << 1), /**< A[2:0] pins = 101 */ + ADDRESS_6 = (0x4E << 1), /**< A[2:0] pins = 110 */ + ADDRESS_7 = (0x4F << 1) /**< A[2:0] pins = 111 */ + }; + + /** Represents the power mode of the LM75B + */ + enum PowerMode { + POWER_NORMAL, /**< Chip is enabled and samples every 100ms */ + POWER_SHUTDOWN /**< Chip is in low-power shutdown mode */ + }; + + /** Represents OS pin mode of the LM75B + */ + enum OSMode { + OS_COMPARATOR, /**< OS is asserted when the temperature reaches the alert threshold, and de-asserted when the temperature drops below the alert hysteresis threshold */ + OS_INTERRUPT /**< OS is asserted when the temperature reaches the alert threshold, or drops below the alert hysteresis threshold, and only de-asserted when a register has been read */ + }; + + /** Represents OS pin polarity of the LM75B + */ + enum OSPolarity { + OS_ACTIVE_LOW, /**< OS is a logic low when asserted, and a logic high when de-asserted */ + OS_ACTIVE_HIGH /**< OS is a logic high when asserted, and a logic low when de-asserted */ + }; + + /** Represents OS pin fault queue length of the LM75B + */ + enum OSFaultQueue { + OS_FAULT_QUEUE_1, /**< OS is asserted after 1 fault */ + OS_FAULT_QUEUE_2, /**< OS is asserted after 2 consecutive faults */ + OS_FAULT_QUEUE_4, /**< OS is asserted after 4 consecutive faults */ + OS_FAULT_QUEUE_6 /**< OS is asserted after 6 consecutive faults */ + }; + + /** Create an LM75B object connected to the specified I2C pins with the specified I2C slave address + * + * @param sda The I2C data pin. + * @param scl The I2C clock pin. + * @param addr The I2C slave address (defaults to ADDRESS_0). + */ + LM75B(PinName sda, PinName scl, Address addr = ADDRESS_0); + + /** Probe for the LM75B and reset it to default configuration if present + * + * @returns + * 'true' if the device exists on the bus, + * 'false' if the device doesn't exist on the bus. + */ + bool open(void); + + /** Get the current power mode of the LM75B + * + * @returns The current power mode as a PowerMode enum. + */ + LM75B::PowerMode powerMode(void); + + /** Set the power mode of the LM75B + * + * @param mode The new power mode as a PowerMode enum. + */ + void powerMode(PowerMode mode); + + /** Get the current OS pin mode of the LM75B + * + * @returns The current OS pin mode as an OSMode enum. + */ + LM75B::OSMode osMode(void); + + /** Set the OS pin mode of the LM75B + * + * @param mode The new OS pin mode as an OSMode enum. + */ + void osMode(OSMode mode); + + /** Get the current OS pin polarity of the LM75B + * + * @returns The current OS pin polarity as an OSPolarity enum. + */ + LM75B::OSPolarity osPolarity(void); + + /** Set the OS pin polarity of the LM75B + * + * @param polarity The new OS pin polarity as an OSPolarity enum. + */ + void osPolarity(OSPolarity polarity); + + /** Get the current OS pin fault queue length of the LM75B + * + * @returns The current OS pin fault queue length as an OSFaultQueue enum. + */ + LM75B::OSFaultQueue osFaultQueue(void); + + /** Set the OS pin fault queue length of the LM75B + * + * @param queue The new OS pin fault queue length as an OSFaultQueue enum. + */ + void osFaultQueue(OSFaultQueue queue); + + /** Get the current alert temperature threshold of the LM75B + * + * @returns The current alert temperature threshold in °C. + */ + float alertTemp(void); + + /** Set the alert temperature threshold of the LM75B + * + * @param temp The new alert temperature threshold in °C. + */ + void alertTemp(float temp); + + /** Get the current alert temperature hysteresis threshold of the LM75B + * + * @returns The current alert temperature hysteresis threshold in °C. + */ + float alertHyst(void); + + /** Set the alert temperature hysteresis threshold of the LM75B + * + * @param temp The new alert temperature hysteresis threshold in °C. + */ + void alertHyst(float temp); + + /** Get the current temperature measurement of the LM75B + * + * @returns The current temperature measurement in °C. + */ + float temp(void); + +#ifdef MBED_OPERATORS + /** A shorthand for temp() + * + * @returns The current temperature measurement in °C. + */ + operator float() { + return temp(); + } +#endif + private: - - I2C i2c; + //I2C register addresses + enum Register { + REG_TEMP = 0x00, + REG_CONF = 0x01, + REG_THYST = 0x02, + REG_TOS = 0x03 + }; + //Member variables + I2C m_I2C; + int m_Addr; + + //Internal functions + char read8(char reg); + void write8(char reg, char data); + unsigned short read16(char reg); + void write16(char reg, unsigned short data); + float readAlertTempHelper(char reg); + void writeAlertTempHelper(char reg, float temp); }; -#endif \ No newline at end of file +#endif