LED parpadeante en MSP430 con tres condiciones [cerrado]

0

Estaba diseñando un circuito que debe satisfacer las condiciones.

El LED2 (verde) debe parpadear a 2Hz con un ciclo de trabajo del 50%

    
pregunta parole

2 respuestas

2

He realizado proyectos que requieren la discriminación de pulsaciones de botón largas y cortas. Es un problema de clasificación, y en general no es del todo trivial para detectar de forma inequívoca. Esto es, en particular, cierto en presencia de requisitos de rebote (como están presentes con prácticamente todos los botones).

Mi recomendación sería dedicar una interrupción del temporizador para muestrear el botón a intervalos regulares (por ejemplo, 50 ms) y almacenar estas muestras en un búfer circular (de aproximadamente 25 muestras, que representan 1250 ms de datos). Luego, en su ciclo principal, analice el contenido de ese búfer para determinar si contiene una pulsación larga, una pulsación corta o ninguna, y responda en consecuencia. También puede aplicar la lógica que desee para filtrar esos datos, por ejemplo. Para aplicar un software de rebote. Si detecta un evento, probablemente debería borrar el búfer, o tal vez esperar a que la condición del evento se borre del búfer antes de emitir otro evento.

No voy a escribir el código para ti, pero ese es un enfoque que realmente he usado.

Si tiene que hacerlo únicamente en hardware, mi respuesta obviamente no es aplicable. Así es como lo haría por la flexibilidad.

    
respondido por el vicatcu
0

Dos cosas que debes saber antes de responder esta pregunta.

  1. La interrupción externa puede ser sensible al borde o al nivel. Lea la hoja de datos de su controlador.

  2. El temporizador 0 se puede operar en modo cerrado, lo que significa que tan pronto como aparezca la señal en el pin externo de interrupción, el temporizador 0 comenzará a funcionar (TR0 debe ser igual a 1)

Por lo tanto, puede diseñar una interfaz de interfaz de tal manera que cuando presiona la tecla, la señal baja (lo que dará una señal de flanco descendente) y se podrá interconectar en el pin de interrupción externa y detectarse. Tan pronto como se detecte una señal de baja señal (se detecta una pulsación de tecla), el temporizador 0 comenzará a funcionar. Y en la ISR de interrupción externa, puede verificar cuándo la señal es alta cuando se suelta la tecla.

Void ext_ISR ()

{

while (key_press == 0); // espera hasta que la señal sea baja

TR0 = 0; detén el tiempo

// lea el registro del temporizador y conviértalo en el tiempo para el cual el temporizador estaba encendido, es decir, se presionó la tecla

}

Puede reducir la eliminación de llaves usando un condensador grande conectado a través de la llave.

    
respondido por el nkg2743

Lea otras preguntas en las etiquetas