Botones de hardware que rebaten diafonía

0

Estoy usando un circuito de desalojo basado en hardware para desencadenar una interrupción en una Particle Photon .

Usouncircuitosimilarcondosbotones:

A veces, cuando se presiona un botón, también se dispara la interrupción vinculada al otro botón. ¿Cuál es la razón de este comportamiento? ¿Cómo resolver este problema?

    
pregunta DurandA

3 respuestas

1

Se debe a la carga en el condensador. Conectó el interruptor a VCC en el momento que presionó. Condensador cargado y luego de liberar el capacitor descargado a través de la resistencia. Por lo tanto, el capacitor debe descargarse por debajo de VIL antes de presionar otro botón. Mejor sigues el cambio de tierra. Para eso necesitas usar resistencia de levantamiento.

    
respondido por el Sathyanarayanan G
0

¿Qué se supone que debe hacer este circuito?

Cuando se aplican 5V con el interruptor abierto, el voltaje en OUT inicialmente será de 5V. Durante un tiempo, el condensador se cargará para tener 5V de ancho y OUT será de 0V. Cuando el interruptor está cerrado, el capacitor se descargará instantáneamente a través del interruptor. Con el tiempo, esto probablemente dañará el interruptor y posiblemente también el condensador.

Quizás algo como esto sería mejor:

simular este circuito : esquema creado usando CircuitLab

En este circuito, la resistencia entre 5V y todo lo demás, puede ver de inmediato que no hay posibilidad de grandes corrientes de entrada / salida de interruptores, capacitores o puertas del microcontrolador.

ACTUALIZACIÓN: En realidad, esto no es cierto porque el condensador se descarga instantáneamente cuando el interruptor está cerrado, por lo que eso pondrá presión sobre el interruptor y el condensador. Entonces, como se describe a continuación, quitaría el condensador por completo e implementaría el rebote en el código.

Aunque no sé qué tan bien funcionaría el condensador de 100 nF como un circuito de rebote. Por un lado, cuando se inicia, inicialmente será de 0 V y tomará tiempo para cargarse. Pero de lo contrario podría funcionar.

En la práctica, omitiría el condensador e implementaría el rebote en el software. Específicamente, obtiene el tiempo con milis () y lo compara con la última vez que se presionó el botón. Si no se supera ese tiempo, ignora ese cambio de estado. Así es como se hace y hay numerosos ejemplos de cómo escribir código que maneja el desalojamiento momentáneo de botones.

    
respondido por el squarewav
0

Prefiero hacer la mayor cantidad de software posible. Creo que también puedes rebotar tus interruptores solo usando software. Y, al hacerlo, evite los problemas que está viendo ( que, creo, se deben a la alta corriente involucrada al descargar el condensador a través de un cortocircuito ).

Creo que puede sobrevivir con solo un cambio a tierra y una resistencia de arranque a 3.3 V, todo ello conectado al pin de interrupción. Tan pronto como hay un cambio de estado, se llama la interrupción. Es decir, si la interrupción se llama en el borde de caída. (Si se llaman las interrupciones en el flanco ascendente, simplemente mueva el interruptor a 3.3V y la resistencia a tierra). En ese punto, probaría el valor de Arduino millis (). Si fuera muy diferente, ejecutaría el código de interrupción y registraría el valor actual de Arduino millis (). Si el interruptor rebota y causa otra interrupción, estoy seguro ya que primero compruebo si millis () devuelve un valor muy diferente del que registré la última vez que reparé la interrupción. Si no es muy diferente, sé que no ha pasado el tiempo suficiente y omito la ejecución del código en la interrupción y omito la actualización del valor milis () guardado desde que ejecuté el código en la interrupción.

Sin embargo, tengo que preguntar por qué estás ejecutando interrupciones basadas en que un humano presiona un botón. Las interrupciones toman un poco de cuidado para la configuración. Y la recompensa es que su código de interrupción se ejecuta (generalmente) con poco retraso. Pero, en lo que concierne a las personas, un simple programa de sondeo es lo suficientemente rápido. Y mucho más sencillo de implementar. Entonces, ¿por qué interrumpe?

Si va por la ruta de sondeo, eche un vistazo a debounce-button-software-solution .

    
respondido por el st2000

Lea otras preguntas en las etiquetas