diff options
author | Joey Castillo <joeycastillo@utexas.edu> | 2022-02-17 14:44:40 -0500 |
---|---|---|
committer | Joey Castillo <joeycastillo@utexas.edu> | 2022-02-17 14:47:47 -0500 |
commit | 4f29cf24f3db0456b12c89589f3ce0338a6c60cd (patch) | |
tree | 9e75ede60f78f49e833016a940a282fbf9480c6d /watch-library/shared/driver/thermistor_driver.c | |
parent | 0337d198ffe20062678a7900a7666f312c229475 (diff) | |
download | Sensor-Watch-4f29cf24f3db0456b12c89589f3ce0338a6c60cd.tar.gz Sensor-Watch-4f29cf24f3db0456b12c89589f3ce0338a6c60cd.tar.bz2 Sensor-Watch-4f29cf24f3db0456b12c89589f3ce0338a6c60cd.zip |
movement: move thermistor to 'sensor' watch faces
Diffstat (limited to 'watch-library/shared/driver/thermistor_driver.c')
-rw-r--r-- | watch-library/shared/driver/thermistor_driver.c | 58 |
1 files changed, 58 insertions, 0 deletions
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); +} |