¿Qué tipo de periféricos de microcontrolador pueden ayudarme a implementar un tiempo de espera?

0

Estoy descubriendo el mundo del software embebedor con microcontroladores. Mi necesidad es verificar que una entrada de mi sistema se mantenga alta durante 2 segundos, por ejemplo.

Como no estoy muy familiarizado con los microcontroladores, me pregunto qué tipo de periféricos pueden ayudarme con esto. Con una lista de periféricos, pude verificar las especificaciones de mi microcontrolador (un Freescale MPC5553) qué periféricos podría usar para eso.

Dado que el Manual de referencia tiene 1208 páginas, no podré entender completamente todas las funciones de los periféricos. Así que probablemente me perderé algunas posibilidades.

En este momento, las ideas que tuve son:

  • Haga todo a mano con un GPIO que se verifica periódicamente
  • Use un temporizador cuya disminución se habilite con entrada externa (¡si eso es posible!) y eso provoca una interrupción en el tiempo de espera.
  • Conozca qué es la Unidad de procesamiento de tiempo mejorado (eTPU) de este microcontrolador específico.

Gracias por su ayuda.

    
pregunta Plouff

2 respuestas

1

Este microcontrolador en particular tiene un módulo de comparación / captura . Esto le permite determinar la duración de una señal dada desde los bordes ascendentes y descendentes.

    
respondido por el Martin Petrei
1

Esta es una respuesta muy general, pero creo que se aplica a su situación. Lo que estás describiendo es bastante similar a deshacer contactos, ¿verdad? Por supuesto, no mencionó si le importa la entrada que necesita permanecer BAJA durante 2 segundos también, pero llegaré a eso en un momento. Lo bueno de lidiar con los microcontroladores es que muchas de las tareas que usted describe se pueden manejar solo con software.

Permite asumir el caso simple de un entorno de un solo subproceso, lo que significa que todas tus tareas son llamadas en algún punto de un gran ciclo. Esto generalmente se denomina enfoque 'round robin ". Bueno, estoy seguro de que su controlador tiene un método para verificar un sistema de tiempo de milisegundos. Por lo tanto, dentro de una de sus tareas de" round robin ", llamémoslo checkInput (), debe configurar algunas variables "estáticas" (lo que significa que conservan su valor cuando la función regresa y se vuelve a llamar). Una de esas variables se puede llamar "lastState", y se puede establecer inicialmente en 0. También desea otra variable llamada "lastTime" , que por simplicidad también se puede establecer inicialmente en cero.

Entonces, cuando tu programa llama a checkContacts, quieres hacer algo como esto ...

  1. Lea el estado actual de la entrada GPIO y compárelo con "lastState". Si el estado actual es igual a "lastState", usted "devuelve" el valor de lastState de la función sin hacer nada.
  2. Suponiendo que el estado actual haya cambiado, a continuación, desea leer el temporizador de milisegundos del sistema en una variable temporal y restar el valor almacenado en lastTime. Usted dijo que quería dos segundos, por lo que si se encuentra que la diferencia es menor a 2000 (2000mS == 2 segundos), nuevamente devuelve 'lastState' y no hace nada.
  3. si de hecho la diferencia ha alcanzado o sobrepasado los 2000, entonces almacena el valor actual de la entrada GPIO en "lastState", Y almacena el valor actual del temporizador de milisegundos en LastTime. De nuevo, devuelva el valor de "lastState".

Así que ahora, checkInput () siempre devuelve el estado de entrada calificado por el tiempo. Solo querrás asegurarte de que se llame con la frecuencia suficiente para el nivel de precisión que consideres aceptable.

Hay varias cosas buenas acerca de este arreglo. Además de que no requiere hardware adicional, su temporizador de 2000 mS es fácil de modificar y puede ajustarlo para que funcione de manera diferente dependiendo de la transición. Por ejemplo, usted dijo que desea que la entrada solo registre "ALTO" cuando ha sido así durante 2 segundos, pero puede tener fácilmente un tiempo diferente para el caso inverso (tal vez no desee ninguna repetición a menos que la entrada haya sido baja durante 20 segundos!). Otra cosa buena es que el pin GPIO no siempre tiene que ser una entrada. Por ejemplo, tengo un sistema donde cada botón tiene un LED que indica que se presionó el último botón, y ese LED se alimenta con las mismas líneas GPIO que utilizo para detectar las presiones de los botones. Todo lo que tengo que hacer es configurar los pines GPIO como "entradas" cuando entro en mi función, reviso mis estados y luego restauro los GPIO para que sean salidas antes de que regrese. En pocas palabras, una solución de software únicamente le ofrecerá la máxima flexibilidad y el menor número de piezas.

    
respondido por el Randy

Lea otras preguntas en las etiquetas