commit e837999a0d7f554cc16fa213a426fc8a3ea3bbcd
parent c76f1725b324afe97521f01477c5289f91bcb164
Author: Martin Kloeckner <mjkloeckner@gmail.com>
Date: Mon, 30 Mar 2026 21:24:35 -0300
Ciclo de trabajo proporcional al valor leído de temperatura
Diffstat:
4 files changed, 36 insertions(+), 7 deletions(-)
diff --git a/firmware/app/inc/app.h b/firmware/app/inc/app.h
@@ -19,7 +19,7 @@ extern uint32_t g_app_WCET_us;
extern volatile uint32_t g_app_tick_cnt;
typedef struct {
- uint16_t temp_set_point; // Desired temp
+ int16_t temp_set_point; // Desired temp
int16_t temp_sensor; // Actual temp
uint8_t temp_ctrl_pwm_dc; // Duty cycle of output [0, 100]
bool temp_ctrl_enabled;
diff --git a/firmware/app/src/task_menu.c b/firmware/app/src/task_menu.c
@@ -194,9 +194,19 @@ void task_menu_statechart(void *parameters)
g_display_update = false;
display_i2c_async_clear();
memset(menu_row_str, '\0', sizeof(menu_row_str));
- snprintf(menu_row_str, 20, "Idle %3s",
- p_shared_data->temp_ctrl_enabled ? "ON" : "");
- display_i2c_async_write_string(menu_row_str);
+
+ if (p_shared_data->temp_ctrl_enabled)
+ {
+ display_i2c_async_write_string("On");
+ display_i2c_async_set_cursor_pos(10, 0);
+ snprintf(menu_row_str, 20, "%5d%%", p_shared_data->temp_ctrl_pwm_dc);
+ display_i2c_async_write_string(menu_row_str);
+ }
+ else
+ {
+ snprintf(menu_row_str, 20, "Idle");
+ display_i2c_async_write_string(menu_row_str);
+ }
display_i2c_async_set_cursor_pos(4, 1);
memset(menu_row_str, '\0', sizeof(menu_row_str));
diff --git a/firmware/app/src/task_system.c b/firmware/app/src/task_system.c
@@ -242,18 +242,21 @@ void task_system_statechart(void *parameters)
p_task_system_dta->event_flag = false;
switch (p_task_system_dta->event)
{
+ case EV_SYS_BTN_B_ACTIVE:
+ break;
+
case EV_SYS_BTN_C_ACTIVE:
p_shared_data->temp_ctrl_enabled = !p_shared_data->temp_ctrl_enabled;
task_menu_interface_put_event(EV_MEN_DISPLAY_UPDATE);
break;
case EV_SYS_BTN_A_ACTIVE:
- case EV_SYS_BTN_B_ACTIVE:
case EV_SYS_BTN_D_ACTIVE:
p_task_system_dta->state = ST_SYS_CLOCK_SET;
task_menu_interface_put_event(EV_MEN_ST_CLOCK_SET);
task_leds_interface_put_event(EV_LED_XX_BLINK, ID_LED_A);
task_leds_interface_put_event(EV_LED_XX_BLINK, ID_LED_B);
break;
+
default: break;
}
}
diff --git a/firmware/app/src/task_temp_ctrl.c b/firmware/app/src/task_temp_ctrl.c
@@ -61,9 +61,25 @@ void task_temp_ctrl_update(void *parameters)
}
__asm("CPSIE i");
- if (p_shared_data->temp_ctrl_pwm_dc != TIM1->CCR1)
+ int16_t dtemp = (p_shared_data->temp_set_point - p_shared_data->temp_sensor);
+ if (dtemp > 0)
{
- TIM1->CCR1 = p_shared_data->temp_ctrl_pwm_dc;
+ p_shared_data->temp_ctrl_pwm_dc = dtemp;
+ }
+ else {
+ p_shared_data->temp_ctrl_pwm_dc = 0;
+ }
+
+ if (true == p_shared_data->temp_ctrl_enabled)
+ {
+ if (p_shared_data->temp_ctrl_pwm_dc != TIM1->CCR1)
+ {
+ TIM1->CCR1 = p_shared_data->temp_ctrl_pwm_dc;
+ }
+ }
+ else
+ {
+ TIM1->CCR1 = 0;
}
}
}