tdse-tf_3-02

Controlador PID para derretidor de miel con control local via botones y remoto via WiFi
Index Commits Files Refs Submodules README
commit 7a05ba63cff5fa8de6cb2b75ecae7f91825b1013
parent 463622cdfb3064bdce3802f192cddb97db76d93f
Author: Martin Kloeckner <mjkloeckner@gmail.com>
Date:   Thu,  4 Jun 2026 14:44:02 -0300

Actualizar sección firmware del sistema

Diffstat:
MMEMORIA.md | 75+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 73 insertions(+), 2 deletions(-)
diff --git a/MEMORIA.md b/MEMORIA.md
@@ -61,6 +61,19 @@ pruebas realizadas.
     - [3.1.6 Luces indicadoras](#316-luces-indicadoras)
     - [3.1.7 Buzzer](#317-buzzer)
     - [3.1.8 Botones](#318-botones)
+  - [3.2 Firmware del sistema](#32-firmware-del-sistema)
+    - [3.2.1 Ejecutor cíclico](#321-ejecutor-cíclico)
+    - [3.2.2 Tarea System](#322-tarea-system)
+    - [3.2.3 Tarea Buttons](#323-tarea-buttons)
+    - [3.2.4 Tarea Buzzer](#324-tarea-buzzer)
+    - [3.2.5 Tarea LEDs](#325-tarea-leds)
+    - [3.2.6 Tarea Menu](#326-tarea-menu)
+    - [3.2.7 Tarea Temp Ctrl (PID)](#327-tarea-temp-ctrl-pid)
+    - [3.2.8 Tarea Temp Sensor (DS18B20)](#328-tarea-temp-sensor-ds18b20)
+    - [3.2.9 Tarea Remote](#329-tarea-remote)
+    - [3.2.10 Medición de WCET](#3210-medición-de-wcet)
+
+
 
 # 1. Introducción general
 
@@ -605,10 +618,68 @@ const task_cfg_t task_cfg_list[] = {
 };
 ```
 
+Las tareas se comunican entre sí mediante dos mecanismos:
+
+- Eventos: A través de colas circulares con interfaz dedicada.
+- Datos compartidos: A través de la estructura global `shared_data`, que
+  contiene el set point, temperatura actual, duty cycle y puntero al timer.
+
+### 3.2.2 Tarea System
+
+`task_system` es la tarea central que gestiona la lógica de aplicación y la
+máquina de estados principal. Implementa los siguientes estados:
+
+- `ST_SYS_IDLE`: Estado de reposo, muestra temperatura en display.
+- `ST_SYS_CLOCK_SET`: Configuración de hora del RTC.
+- `ST_SYS_TEMP_SET`: Ajuste de temperatura deseada.
+- `ST_SYS_TIMER_SET_STATUS`: Habilitación/deshabilitación del timer.
+- `ST_SYS_TIMER_SET_START`: Configuración de hora de inicio.
+- `ST_SYS_TIMER_SET_END`: Configuración de hora de fin.
+
+Además, gestiona:
+
+- Persistencia en flash: Utiliza una página completa (1024 bytes) en la
+  dirección `0x0801FC00` como emulación EEPROM. Los valores se escriben en
+  direcciones contiguas para reducir el desgaste, borrando la página solo cuando
+  está llena (512 escrituras).
+- Temporizador programable: Cada segundo compara la hora actual del RTC con los
+  límites configurados. Si `end_hour > start_hour` (mismo día) o `end_hour <
+  start_hour` (cruce de medianoche), activa o desactiva el calefactor
+  automáticamente.
+
+### 3.2.3 Tarea Buttons
+
+Implementa una máquina de estados de antirebote para cada uno de los cuatro botones:
+
+- `ST_BTN_XX_UP`, `ST_BTN_XX_FALLING` (50 ms), `ST_BTN_XX_DOWN`
+- `ST_BTN_XX_DOWN`, `ST_BTN_XX_RISING` (50 ms), `ST_BTN_XX_UP`
+
+Al detectar una pulsación válida (flanco descendente confirmado), envía un
+evento a `task_system` y activa el buzzer (beep corto).
+
+### 3.2.4 Tarea Buzzer
+
+Controla el buzzer piezoeléctrico mediante PWM (TIM3_CH1, 1 kHz). Recibe eventos
+para generar beeps cortos (35 ms, pulsación de botón) o largos (500 ms,
+activación/desactivación del calefactor o timer). Implementa los estados
+`ST_BUZ_XX_OFF` y `ST_BUZ_XX_ON` con auto-apagado por timeout.
+
+### 3.2.5 Tarea LEDs
+
+Controla dos LEDs (LD2, LD3) con los siguientes modos:
+
+- `ST_LED_XX_OFF`: LED apagado.
+- `ST_LED_XX_ON`: LED encendido fijo.
+- `ST_LED_XX_BLINK_ON` / `ST_LED_XX_BLINK_OFF`: Parpadeo cada 500 ms.
+- `ST_LED_XX_PULSE`: Encendido por 250 ms y apagado automático.
+
+Los LEDs parpadean cuando el calefactor está activo, indicando visualmente el
+estado de operación.
+
 ### 3.2.6 Tarea Menu
 
-Gestiona la actualización del display LCD 16x2 según el estado actual del
-sistema. Cada estado define su propio contenido de display. En modo idle se
+Esta tarea gestiona la actualización del display LCD 16x2 según el estado actual
+del sistema. Cada estado define su propio contenido de display. En modo idle se
 muestra:
 
 - Línea 1: Estado del calefactor ("On" + duty cycle % o "Idle").