From 6d5c8d226f2e3749f024088a5b4991d6602d63e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andis=20Z=C4=ABle?= Date: Wed, 10 Apr 2024 15:45:17 +0300 Subject: [PATCH] Created OD common pwm class --- firmware/src/board/pwm.cpp | 40 ++++++++++++++++++++++++++++++++++++++ firmware/src/board/pwm.h | 31 +++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 firmware/src/board/pwm.cpp create mode 100644 firmware/src/board/pwm.h diff --git a/firmware/src/board/pwm.cpp b/firmware/src/board/pwm.cpp new file mode 100644 index 0000000..a557bac --- /dev/null +++ b/firmware/src/board/pwm.cpp @@ -0,0 +1,40 @@ +/**** Includes ****/ +#include "../utils/utils.h" +#include "mcu/mcu_hal.h" +#include "pwm.h" + +using namespace board; + +/**** Private definitions ****/ +/**** Private constants ****/ +/**** Private variables ****/ +/**** Private function declarations ****/ + +/**** Public function definitions ****/ +board::PWMout::PWMout(uint8_t pwm_ch) +{ + this->pwm_ch = pwm_ch; + this->write(0); +} + +board::PWMout::~PWMout(void) +{ + this->write(0); +} + +void board::PWMout::write(uint8_t duty) +{ + // Convert percent to 16b duty cycle + uint16_t dc = util::percent_to_16b(duty); + + // Set PWM + mcu::pwm_write(this->pwm_ch, dc); + this->last_duty = duty; +} + +uint8_t board::PWMout::get_set_duty(void) +{ + return this->last_duty; +} + +/**** Private function definitions ****/ diff --git a/firmware/src/board/pwm.h b/firmware/src/board/pwm.h new file mode 100644 index 0000000..af96a1b --- /dev/null +++ b/firmware/src/board/pwm.h @@ -0,0 +1,31 @@ +#ifndef PWM_H_ +#define PWM_H_ + +/**** Includes ****/ +#include + +namespace board { + +/**** Public definitions ****/ +class PWMout +{ + protected: + uint8_t pwm_ch; + uint8_t last_duty; + + public: + PWMout(uint8_t pwm_ch); + ~PWMout(void); + + void write(uint8_t duty); + uint8_t get_set_duty(void); +}; + +/**** Public function declarations ****/ + +#ifdef TESTING +#endif + +} //namespace + +#endif /* PWM_H_ */ \ No newline at end of file