From 4f29cf24f3db0456b12c89589f3ce0338a6c60cd Mon Sep 17 00:00:00 2001 From: Joey Castillo Date: Thu, 17 Feb 2022 14:44:40 -0500 Subject: movement: move thermistor to 'sensor' watch faces --- watch-library/shared/driver/thermistor_driver.c | 58 +++++++++++++++++++++++++ watch-library/shared/driver/thermistor_driver.h | 43 ++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 watch-library/shared/driver/thermistor_driver.c create mode 100644 watch-library/shared/driver/thermistor_driver.h (limited to 'watch-library/shared/driver') diff --git a/watch-library/shared/driver/thermistor_driver.c b/watch-library/shared/driver/thermistor_driver.c new file mode 100644 index 00000000..73bdef41 --- /dev/null +++ b/watch-library/shared/driver/thermistor_driver.c @@ -0,0 +1,58 @@ +/* + * MIT License + * + * Copyright (c) 2022 Joey Castillo + * + * 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 "thermistor_driver.h" +#include "watch.h" +#include "watch_utility.h" + +void thermistor_driver_enable(void) { + // Enable the ADC peripheral, which we'll use to read the thermistor value. + watch_enable_adc(); + // Enable analog circuitry on the sense pin, which is tied to the thermistor resistor divider. + watch_enable_analog_input(THERMISTOR_SENSE_PIN); + // Enable digital output on the enable pin, which is the power to the thermistor circuit. + watch_enable_digital_output(THERMISTOR_ENABLE_PIN); + // and make sure it's off. + watch_set_pin_level(THERMISTOR_ENABLE_PIN, !THERMISTOR_ENABLE_VALUE); +} + +void thermistor_driver_disable(void) { + // Disable the ADC peripheral. + watch_disable_adc(); + // Disable analog circuitry on the sense pin to save power. + watch_disable_analog_input(THERMISTOR_SENSE_PIN); + // Disable the enable pin's output circuitry. + watch_disable_digital_output(THERMISTOR_ENABLE_PIN); +} + +float thermistor_driver_get_temperature(void) { + // set the enable pin to the level that powers the thermistor circuit. + watch_set_pin_level(THERMISTOR_ENABLE_PIN, THERMISTOR_ENABLE_VALUE); + // get the sense pin level + uint16_t value = watch_get_analog_pin_level(THERMISTOR_SENSE_PIN); + // and then set the enable pin to the opposite value to power down the thermistor circuit. + watch_set_pin_level(THERMISTOR_ENABLE_PIN, !THERMISTOR_ENABLE_VALUE); + + return watch_utility_thermistor_temperature(value, THERMISTOR_HIGH_SIDE, THERMISTOR_B_COEFFICIENT, THERMISTOR_NOMINAL_TEMPERATURE, THERMISTOR_NOMINAL_RESISTANCE, THERMISTOR_SERIES_RESISTANCE); +} diff --git a/watch-library/shared/driver/thermistor_driver.h b/watch-library/shared/driver/thermistor_driver.h new file mode 100644 index 00000000..66bec6e9 --- /dev/null +++ b/watch-library/shared/driver/thermistor_driver.h @@ -0,0 +1,43 @@ +/* + * MIT License + * + * Copyright (c) 2022 Joey Castillo + * + * 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 THERMISTOR_DRIVER_H_ +#define THERMISTOR_DRIVER_H_ + +// TODO: Do these belong in movement_config.h? In settings we can set on the watch? In an EEPROM configuration area? +// Think on this. [joey 11/22] +#define THERMISTOR_SENSE_PIN (A2) +#define THERMISTOR_ENABLE_PIN (A0) +#define THERMISTOR_ENABLE_VALUE (false) +#define THERMISTOR_HIGH_SIDE (true) +#define THERMISTOR_B_COEFFICIENT (3380.0) +#define THERMISTOR_NOMINAL_TEMPERATURE (25.0) +#define THERMISTOR_NOMINAL_RESISTANCE (10000.0) +#define THERMISTOR_SERIES_RESISTANCE (10000.0) + +void thermistor_driver_enable(void); +void thermistor_driver_disable(void); +float thermistor_driver_get_temperature(void); + +#endif // THERMISTOR_DRIVER_H_ -- cgit v1.2.3