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.

fig29

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).

fig29

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()
  1. Preparación del entorno.

    • Descarga y descomprime el archivo de recursos lab2 en tu espacio de trabajo.

    • Los archivos pulsaciones.h y pulsaciones.c están ubicados en la carpeta src.

  2. 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.

  3. 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 archivo test_pulsaciones.c.

    • Ejecuta el debugger y corrige cualquier error funcional hasta que la función pulsaciones() cumpla con la especificación deseada.

  4. Herramientas de análisis.

    • Inicializa el debugger y abre la herramienta Analyzer desde el menú View → Analysis Windows → Logic Analyzer. 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().

  5. Test y Resultados esperados.

    El fichero test/test_pulsaciones.c incluye 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:

    fig29