diff --git a/boards/feather-nrf52840/Makefile.dep b/boards/feather-nrf52840/Makefile.dep index 8e0754d06dba..8bd26bc979d5 100644 --- a/boards/feather-nrf52840/Makefile.dep +++ b/boards/feather-nrf52840/Makefile.dep @@ -1,5 +1,6 @@ ifneq (,$(filter saul_default,$(USEMODULE))) USEMODULE += saul_gpio + USEMODULE += saul_bat_voltage USEMODULE += ws281x endif diff --git a/boards/feather-nrf52840/Makefile.features b/boards/feather-nrf52840/Makefile.features index 1f4969f6d974..2c7233be62b4 100644 --- a/boards/feather-nrf52840/Makefile.features +++ b/boards/feather-nrf52840/Makefile.features @@ -1,6 +1,7 @@ CPU_MODEL = nrf52840xxaa # Put defined MCU peripherals here (in alphabetical order) +FEATURES_PROVIDED += board_bat_voltage FEATURES_PROVIDED += periph_i2c FEATURES_PROVIDED += periph_spi FEATURES_PROVIDED += periph_uart diff --git a/boards/feather-nrf52840/bat_voltage.c b/boards/feather-nrf52840/bat_voltage.c new file mode 100644 index 000000000000..8a0e3440ba23 --- /dev/null +++ b/boards/feather-nrf52840/bat_voltage.c @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2024 TU Dresden + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup boards_feather-nrf52840 + * @ingroup saul_bat_voltage + * @{ + * @file + * @brief Implementation of battery voltage convert function + * + * @author Martine S. Lenders + * + * @} + */ + +#ifdef MODULE_SAUL_BAT_VOLTAGE +#include "saul/bat_voltage.h" + +int16_t saul_bat_voltage_convert(int32_t adc_sample) +{ + /* See + * https://learn.adafruit.com/introducing-the-adafruit-nrf52840-feather/power-management-2 + * + * but the reference voltage is actually 3.3V (determined empirically)... + * we return in millivolt so we set the reference voltage to 3300 + * instead of 3.3 */ + return (int16_t)((adc_sample * 2L * 3300L) / 1024L); +} + +#endif /* MODULE_SAUL_BAT_VOLTAGE */ diff --git a/boards/feather-nrf52840/include/bat_voltage_params.h b/boards/feather-nrf52840/include/bat_voltage_params.h new file mode 100644 index 000000000000..3f4532e2d48d --- /dev/null +++ b/boards/feather-nrf52840/include/bat_voltage_params.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2024 TU Dresden + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup boards_feather-nrf52840 + * @{ + * + * @file + * @brief Configuration of SAUL mapped battery voltage information + * + * @author Martine S. Lenders + */ + +#ifndef BAT_VOLTAGE_PARAMS_H +#define BAT_VOLTAGE_PARAMS_H + +#include "saul/bat_voltage.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Conversion function to convert ADC sample to battery voltage + * + * @param[in] adc_sample The raw ADC sample. + * + * @return Voltage value for phydat. + */ +int16_t saul_bat_voltage_convert(int32_t adc_sample); + +/** + * @brief Battery voltage configuration + */ +static const saul_bat_voltage_params_t saul_bat_voltage_params[] = +{ + { + .name = "BAT", + .phydat_scale = -3, + .line = ADC_LINE(5), + .res = ADC_RES_10BIT, + .convert = saul_bat_voltage_convert, + }, +}; + +#ifdef __cplusplus +} +#endif + +#endif /* BAT_VOLTAGE_PARAMS_H */ +/** @} */