From dd34a3903a6eeaa8fbd89daf15a5015741e16597 Mon Sep 17 00:00:00 2001 From: Alexandre Abadie Date: Wed, 5 Nov 2025 22:56:04 +0100 Subject: [PATCH 1/3] drv: add library for reading the battery level --- drv/battery.h | 40 ++++++++++++++++++++++++++++++++++++++++ drv/battery/battery.c | 19 +++++++++++++++++++ drv/drv.emProject | 9 +++++++++ 3 files changed, 68 insertions(+) create mode 100644 drv/battery.h create mode 100644 drv/battery/battery.c diff --git a/drv/battery.h b/drv/battery.h new file mode 100644 index 0000000..4b4ad7f --- /dev/null +++ b/drv/battery.h @@ -0,0 +1,40 @@ +#ifndef __BATTERY_H +#define __BATTERY_H + +/** + * @defgroup drv_battery Battery level measurement functions + * @ingroup drv + * @brief Functions for measuring battery level + * + * @{ + * @file + * @author Alexandre Abadie + * @copyright Inria, 2025 + * @} + */ + +#include + +// For reading the battery level +#if defined(BOARD_DOTBOT_V3) +#define DB_BATTERY_LEVEL_PIN (DB_SAADC_INPUT_AIN1) +#else +#define DB_BATTERY_LEVEL_PIN (DB_SAADC_INPUT_VDD) +#endif + +/// Maximum battery level in millivolts +#define DB_BATTERY_LEVEL_MAX_MV (3000) + +/** + * @brief Initialize the battery level measurement module + */ +void db_battery_level_init(void); + +/** + * @brief Read the battery level in millivolts + * + * @return Battery level in millivolts + */ +uint16_t db_battery_level_read(void); + +#endif // __BATTERY_H diff --git a/drv/battery/battery.c b/drv/battery/battery.c new file mode 100644 index 0000000..ac1f03f --- /dev/null +++ b/drv/battery/battery.c @@ -0,0 +1,19 @@ +#include + +#include "battery.h" + +#include "saadc.h" + +void db_battery_level_init(void) { + db_saadc_init(DB_SAADC_RESOLUTION_12BIT); +} + +uint16_t db_battery_level_read(void) { + uint16_t value_12b = 0; + db_saadc_read(DB_BATTERY_LEVEL_PIN, &value_12b); + uint16_t voltage_mv = (uint16_t)(((float)value_12b / 4095) * 3600); + if (voltage_mv > DB_BATTERY_LEVEL_MAX_MV) { + voltage_mv = DB_BATTERY_LEVEL_MAX_MV; + } + return voltage_mv; +} diff --git a/drv/drv.emProject b/drv/drv.emProject index d6eb9c1..6522eb9 100644 --- a/drv/drv.emProject +++ b/drv/drv.emProject @@ -14,6 +14,15 @@ + + + + + Date: Wed, 5 Nov 2025 22:56:35 +0100 Subject: [PATCH 2/3] projects: add sample application for battery level --- projects/01drv_battery/README.md | 1 + projects/01drv_battery/main.c | 24 ++++++++++++++++++++++++ projects/projects-bsp-drv.emProject | 24 ++++++++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 projects/01drv_battery/README.md create mode 100644 projects/01drv_battery/main.c diff --git a/projects/01drv_battery/README.md b/projects/01drv_battery/README.md new file mode 100644 index 0000000..c82e83a --- /dev/null +++ b/projects/01drv_battery/README.md @@ -0,0 +1 @@ +# Reads the battery level diff --git a/projects/01drv_battery/main.c b/projects/01drv_battery/main.c new file mode 100644 index 0000000..212afce --- /dev/null +++ b/projects/01drv_battery/main.c @@ -0,0 +1,24 @@ +/** + * @file + * @ingroup samples_drv + * @author Alexandre Abadie + * @brief Simple application used to read and print the battery level + * + * @copyright Inria, 2025 + * + */ +#include +#include +#include "timer.h" +#include "battery.h" + +int main(void) { + db_timer_init(0); + db_battery_level_init(); + + while (1) { + uint16_t battery_level = db_battery_level_read(); + printf("Battery level: %d mV\n", battery_level); + db_timer_delay_ms(0, 1000); + } +} diff --git a/projects/projects-bsp-drv.emProject b/projects/projects-bsp-drv.emProject index 683b5a6..0601176 100644 --- a/projects/projects-bsp-drv.emProject +++ b/projects/projects-bsp-drv.emProject @@ -470,6 +470,30 @@ + + + + + + + + + + + + + + + + + + + + Date: Wed, 5 Nov 2025 22:56:57 +0100 Subject: [PATCH 3/3] doc/sphinx: adapt doc with battery library and sample application --- doc/sphinx/drv.md | 1 + doc/sphinx/examples.md | 1 + 2 files changed, 2 insertions(+) diff --git a/doc/sphinx/drv.md b/doc/sphinx/drv.md index 9b72bf7..96bb493 100644 --- a/doc/sphinx/drv.md +++ b/doc/sphinx/drv.md @@ -10,6 +10,7 @@ Libraries :caption: Contents _api/drv_as5048b +_api/drv_battery _api/drv_hdlc _api/drv_imu _api/drv_ism330 diff --git a/doc/sphinx/examples.md b/doc/sphinx/examples.md index eceb737..ff02fa1 100644 --- a/doc/sphinx/examples.md +++ b/doc/sphinx/examples.md @@ -46,6 +46,7 @@ Libraries examples :maxdepth: 1 _examples/01drv_as5048b +_examples/01drv_battery _examples/01drv_imu _examples/01drv_ism330 _examples/01drv_lis2mdl