¿Es necesario que un interruptor sea antirrebote cuando se abre?

Suponga que una entrada en un microcontrolador tiene una resistencia pullup de 5 V y un interruptor a tierra (normalmente abierto) conectado a ella. Sé que se debe eliminar el rebote de un interruptor (en mi caso, en el software) cuando está cerrado, pero ¿es necesario eliminar el rebote cuando se abre un interruptor?

Respuestas (4)

Sí, es necesario eliminar el rebote en ambas direcciones si desea un borde único garantizado cada vez que el interruptor cambia de estado.

Afortunadamente, no necesita ningún hardware adicional para eliminar rebotes si el interruptor está conectado a un microcontrolador. Si el micro tiene un pull-up interno, que es lo que muchos tienen, no necesita nada más externamente que el interruptor entre el micro pin y tierra.

Creo que 50 ms es un buen tiempo de rebote. La mayoría de los interruptores rebotan por mucho menos que eso, pero algunos pueden durar casi tanto tiempo. Sin embargo, 50 ms aún se sentirán instantáneos para un usuario humano, por lo que también podría ser más confiable. La única diferencia es el número que cuenta en el firmware, por lo que no hay costo adicional. Por lo general, tengo una interrupción periódica de 1 ms por otras razones de todos modos, por lo que si el interruptor está en el mismo estado 50 veces seguidas en esa interrupción, entonces lo declaras rebotado al nuevo estado.

Detalles sobre la lógica de rebote en respuesta al comentario:

Por lo general, tendrá un bit global que indica el estado oficial de rebote del conmutador. Esto es lo que utiliza cualquier lógica que necesite saber de qué manera está configurado el interruptor. El único estado adicional que necesita es un contador, generalmente un solo byte, en la rutina de interrupción. Digamos que la interrupción es cada 1 ms y el tiempo de rebote es de 50 ms. Para cada interrupción:

Si el estado instantáneo coincide con el estado de rebote:
  Poner el contador a 50
  Hecho

Si el estado instantáneo difiere del estado de rebote:
  Contador de decrementos
  Si el contador llega a 0:
    Declarar el nuevo estado de rebote
    Poner el contador a 50
  Hecho
Hubo un artículo muy bueno en www.embedded.com hace un tiempo. El autor agarró un montón de interruptores y los colocó entre una fuente de alimentación y una entrada de alcance de almacenamiento digital, para observar las características de rebote. La conclusión final es que no puede elegir un tiempo de rebote "único para todos": debe caracterizar cada interruptor en particular y ver cómo rebota.
@John: ¿puedes dar el enlace? No entiendo por qué no se puede usar una suposición de tiempo de rebote máximo en el peor de los casos para todos los conmutadores, siempre que sea lo suficientemente corto como para satisfacer al usuario. El IME de 50 ms que menciona Olin satisface ambos criterios.
Gracias Olin. Entonces, ¿cómo hace un seguimiento del estado del interruptor en las últimas 50 interrupciones? Incrementaría una variable si el interruptor está en el mismo estado que la última interrupción, lo borraría si el estado ha cambiado y consideraría que el interruptor rebotó si llega a 50. ¿Es esa una forma eficiente de hacerlo?
Puede que este no sea el artículo mencionado anteriormente, pero tiene mucha información interesante: ganssle.com/debouncing.htm Cualquiera que se ocupe de la eliminación de rebotes debería leerlo.
@Nate: vea la adición a la respuesta.
@mickeyf: tenga en cuenta que Ganssle llegó a la misma conclusión que yo en cuanto a que el retraso de 50 ms todavía se siente instantáneo para un humano. Se me ocurrió probando varios retrasos hace muchos años. Es bueno ver que los humanos no han cambiado mucho en los 30 años desde que hice el experimento. Parece que los interruptores tampoco han cambiado mucho. También descubrió que la mayoría de los interruptores rebotaban durante menos de 50 ms, pero algunos eran mucho más largos que el resto. En resumen, el artículo básicamente confirma lo que dije.

Sí, usaría uno, el mecanismo es básicamente el mismo. A medida que rompe el contacto, tendrá puntos en los que el interruptor hace un buen contacto eléctrico y no hace un buen contacto eléctrico. Lo mismo que cuando estás haciendo el contacto.

En general, sí. Los interruptores mecánicos pueden producir ruido eléctrico (rebote) tanto al cerrar como al abrir.

En general, sí, pero siempre depende de lo que estés haciendo con la entrada digital. He tenido algunos sistemas que absolutamente no tenían necesidad de ser rebotados en ninguna dirección.

Sin embargo, si está conduciendo una interrupción, lo más probable es que deba rebotar.