Driver for the NXP PCT2075 digital temperature sensor and thermal watchdog
NXP PCT2075 temperature sensor driver for mbed
This library is a driver for the [NXP PCT2075](http://www.nxp.com/products/sensors/i2c-temperature-voltage-monitors/ic-bus-fm-plus-1-degree-c-accuracy-digital-temperature-sensor-and-thermal-watchdog:PCT2075). It only handles the I2C communication with the sensor, it does not handle the OS interrupt line. The [mbed InterruptIn](https://developer.mbed.org/handbook/InterruptIn) library can be used for this.
example usage
#include <mbed.h> #include <PCT2075.h> Serial s(USBTX, USBRX); // tx, rx InterruptIn TempPinInt(PC4); LowPowerTicker ticker; static volatile bool temp_int = false; static volatile bool tick_int = false; int main( void ) { TempPinInt.mode(PullUp); PCT2075::Configuration config = { PCT2075::OS_FAULT_QUE_1, PCT2075::OS_ACTIVE_LOW, PCT2075::OS_MODE_INTERRUPT, PCT2075::DEVICE_MODE_SHUTDOWN }; temp_sensor.set_configuration(config); temp_sensor.set_idle_time(PCT2075::TIDLE_MAX); temp_sensor.set_hyst_temperature(2000); temp_sensor.set_os_temperature(2500); TempPinInt.fall(&on_fall); ticker.attach(&tick, 2.0); while(true) { sleep(); // wait to be woken up by ticker or temp sensor if (tick_int) { s.printf("Tick\r\n"); config.device_mode = PCT2075::DEVICE_MODE_NORMAL; temp_sensor.set_configuration(config); tick_int = false; } if (temp_int) { config.device_mode = PCT2075::DEVICE_MODE_SHUTDOWN; temp_sensor.set_configuration(config); uint16_t t = temp_sensor.read_temperature(); s.printf("Temperature: %d\r\n", t); temp_int = false; } } }
Diff: README.md
- Revision:
- 0:396665cc3ea0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README.md Fri Sep 23 13:31:10 2016 +0000 @@ -0,0 +1,61 @@ +NXP PCT2075 temperature sensor driver for mbed +============================================== + +This library is a driver for the [NXP PCT2075](http://www.nxp.com/products/sensors/i2c-temperature-voltage-monitors/ic-bus-fm-plus-1-degree-c-accuracy-digital-temperature-sensor-and-thermal-watchdog:PCT2075). +It only handles the I2C communication with the sensor, it does not handle the OS +interupt line. The [mbed InterruptIn](https://developer.mbed.org/handbook/InterruptIn) library can be used for this. + +Example usage: + +``` +#include <mbed.h> +#include <PCT2075.h> + +Serial s(USBTX, USBRX); // tx, rx + +InterruptIn TempPinInt(PC4); +LowPowerTicker ticker; + +static volatile bool temp_int = false; +static volatile bool tick_int = false; + +int main( void ) +{ + TempPinInt.mode(PullUp); + + PCT2075::Configuration config = { + PCT2075::OS_FAULT_QUE_1, + PCT2075::OS_ACTIVE_LOW, + PCT2075::OS_MODE_INTERRUPT, + PCT2075::DEVICE_MODE_SHUTDOWN + }; + temp_sensor.set_configuration(config); + temp_sensor.set_idle_time(PCT2075::TIDLE_MAX); + + temp_sensor.set_hyst_temperature(2000); + temp_sensor.set_os_temperature(2500); + + TempPinInt.fall(&on_fall); + ticker.attach(&tick, 2.0); + + while(true) { + sleep(); // wait to be woken up by ticker or temp sensor + + if (tick_int) { + s.printf("Tick\r\n"); + config.device_mode = PCT2075::DEVICE_MODE_NORMAL; + temp_sensor.set_configuration(config); + tick_int = false; + } + + if (temp_int) { + config.device_mode = PCT2075::DEVICE_MODE_SHUTDOWN; + temp_sensor.set_configuration(config); + uint16_t t = temp_sensor.read_temperature(); + s.printf("Temperature: %d\r\n", t); + temp_int = false; + } + } +} + +```