¿Debutando ignorando datos?

7

Todas las rutinas de rebote de software que he visto implican esperar hasta cierto número de lecturas secuenciales de un retorno de señal 0 o 1. Eso tiene sentido, por supuesto. Pero significa que hay un compromiso inevitable entre la robustez y la latencia. Cuantas más lecturas solicite para aceptar un cambio de nivel, mayor será el tiempo de respuesta.

Parece que una alternativa simple sería simplemente ignorar las lecturas de entrada durante un cierto período de tiempo después de un borde. Si el conmutador ha estado leyendo 0, y luego una única encuesta devuelve un 1, entonces interprete esto como un 1 lógico para la duración del período de rebote esperado. Igualmente cuando se realiza la transición de 1 a 0.

Obviamente, esto todavía limitaría la tasa de entrada máxima. Pero también llevaría la latencia de un solo botón a cero, incluso para tiempos de rebote extremadamente largos.

¿Hay problemas con este enfoque? Parece un enfoque obvio para el lanzamiento de software, por lo que me sorprende que no se use.

    
pregunta Sneftel

3 respuestas

4

Ofrecería un Condicional Sí .

Su enfoque sugerido asume señales agradables y limpias. Si detectara algún ruido en el rastreo, correría el riesgo de actuar sobre información errónea.
Por ejemplo: si hubiera un pico de voltaje en la señal cuando encuestó la entrada, leería un 1 en su programa. En su propuesta, supondría que se presionó el interruptor (cuando realmente no lo había hecho) hasta que vuelva a sondear la entrada después de su "intervalo de rebote". En qué punto descubres que, oh, espera, bromeo, el interruptor realmente no se presionó.
Por lo tanto, durante la duración del "intervalo de rebote" usted continúa a través de su programa, presumiblemente actuando sobre la información errónea de que se presionó el interruptor.

Básicamente, todo se reduce a:
¿Contra qué estás tratando de protegerte?
¿Qué es lo peor que puede pasar si te equivocas?

Si estuvieras construyendo un juego de niños a batería en una caja de plástico, probablemente no habrá mucho ruido eléctrico para estropear tus entradas; por lo que su debouncing simplificado estaría bien.
Sin embargo, si esta parte del dispositivo de soporte vital en un hospital ... es posible que prefiera un poco más robusto de lógica de entrada de datos.

    
respondido por el Adam Head
2

Sí, funcionará.

El enfoque convencional tiene la ventaja de que también rechazará el ruido.

Por lo general, el rebote mecánico se limita a \ $ \ le \ $ 5msec, por lo que no creo que veas la diferencia en el tiempo de respuesta aparente.

    
respondido por el Spehro Pefhany
2

Eso funcionaría, por supuesto. Pero puede ser incluso más simple: siempre reboto al leer el pin (s) con al menos 50 ms de diferencia. Simple y efectivo.

Eso sí introduce una latencia de hasta 50 ms. No creo que ningún humano note la diferencia. (¿A qué distancia se desplaza un botón pulsador en 50 ms?)

    
respondido por el Wouter van Ooijen

Lea otras preguntas en las etiquetas