2.1 Detección de patrones en un pulsador
El sistema de desarrollo FM4-176L-S6E2CC-ETH dispone de un único pulsador. En este laboratorio se implementará un módulo capaz de distinguir entre patrones de pulsación, diferenciando entre pulsaciones cortas y largas
Definiciones
Periodo de muestreo: 1 ms (el estado del pulsador se lee cada 1 ms).
t1: umbral de duración para distinguir corta/larga.
t2: mínimo intervalo entre pulsos consecutivos para considerarlos separados.
Tipos de pulsación
Pulsación corta: duración < t1.
Pulsación larga: duración ≥ t1.
Máquina de Estados Finitos (MEF)
La detección se implementa mediante una MEF que procesa la lectura del pulsador
cada 1 ms. La MEF cuenta muestras para medir la duración del pulso. t1 y t2
se ajustan en función del comportamiento físico del botón. La salida de la MEF
indica si se ha detectado una pulsación corta (salida=1),
larga (salida=2) o ninguna (salida=0).
Valores sugeridos
t1 = 400 ms (equivalente a 400 lecturas con muestreo 1 ms)
t2 = 100 ms (equivalente a 100 lecturas con muestreo 1 ms)
Función pulsaciones()
La detección de patrones la realiza la función pulsaciones(), con el
siguiente prototipo y comportamiento:
/**
* @brief Detector de pulsación
* @details Detecta los patrones pulsación larga y pulsación corta en el
* dato que se le pasa como argumento.
*
* @param pulsado estado de la pulsación:
* está pulsado → 1
* no está pulsado → 0
* @param reset reseteo de la MEF si /= 0
*
* @return 0 si no hay pulsacion.
* @return 1 pulsación corta.
* @return 2 pulsación larga.
*/
uint8_t pulsaciones (const uint8_t pulsado, const uint8_t reset);
Diseño y pruebas pulsaciones()
Preparación del entorno.
Descarga y descomprime el archivo de recursos
lab2en tu espacio de trabajo.Los archivos
pulsaciones.hypulsaciones.cestán ubicados en la carpetasrc.
Configuración del proyecto.
Abre el proyecto lab2.
Selecciona el target
Test_Pulsaciones. Este target utiliza un simulador para la depuración del código, esto permite desarrollar y validar el software sin necesidad de disponer del hardware físico.Este target se configura de forma distinta a como se hizo en el laboratorio anterior, no modifiques su configuración.
Tareas a realizar.
Escribe el código de la función que implementa la Máquina de Estados Finitos (MEF) en el archivo
pulsaciones.c.Asegúrate de que el código compila correctamente y no genera errores.
Revisa los casos de prueba definidos en la función
main(), ubicada en el archivotest_pulsaciones.c.Ejecuta el debugger y corrige cualquier error funcional hasta que la función
pulsaciones()cumpla con la especificación deseada.
Herramientas de análisis.
Inicializa el debugger y abre la herramienta Analyzer desde el menú . Analyzer mostrará la evolución temporal de las variables globales:
g_sw2: representa el estado del pulsador (SW2).g_pls: salida generada por la función pulsaciones().
Test y Resultados esperados.
El fichero
test/test_pulsaciones.cincluye los siguientes casos de prueba.Test 1: la salida se mantiene a 0 mientras no haya ninguna pulsación.
Test 2: una pulsación corta seguida de un intervalo mayor que t2.
Test 3: una pulsación larga seguida de un intervalo mayor que t2.
Test 4: una pulsación corta seguida de un espacio con ruido.
Test 5: una pulsación extra larga seguida de un espacio.
Asegúrate de que todos los casos se ejecutan correctamente y producen los resultados esperados. La función
report_error()detiene la ejecución en caso que el valor obtenido no coincida con el esperado: