Buenos días gente. El antirrebote para un pushbutton, sea el que sea, sólo ocupa unos cuantos milisegundos en los que hay que controlar que no se produzca un cambio crítico en el estado que llama a la rutina de antirrebote. En mi caso en particular, los tiempos que utilizo rondan los 80ms por cada vez que es oprimido un botón, como tal. En el caso de un sensor, tipo reed switch, por ejemplo, pueden reducirse estos tiempos en funcion de la necesidad, peeeero hay que ser cuidadoso. Esto va a depender de la necesidad, de la aplicación.
De todos modos, dependiendo también del tamaño de la aplicación (del programa para el micro) existen dos posibilidades: 1) que el cambio en el pin genere una interrupción, para lo que el tratamiento de la misma tendrá su proceso específico (óptimo para procesos largos y complejos), o 2) que el proceso realice el control del pin en cada ciclo, y que al detectar el cambio realice alguna tarea específica.
Pero en cualquiera de los casos, debe darse al evento el tiempo suficiente para asegurarse que no es un roce fallido, una cuestión de ruido o algo extraño asociado al funcionamiento del botón.
En mi caso, lo resuelvo de la siguiente manera (en lenguaje descriptivo):
1) Control estado del botón
2) Si se detecta cambio (boton oprimido): Delay de 40ms para controlar si hay varianza, si en esos 40ms no detecta cambio, vuelve a tomarse 40ms para controlar cambio, y así sucesivamente, hasta que aparezca el cambio (Botón suelto).
3) Devuelve 1 al evento detectado (boton oprimido).
2-a) Si al final de los 40ms detectó cambio, se descarta el proceso
3-a) Devuelve 0 (botón suelto)
Como podrán ver, en este caso, el resultado del estado del botón, se obtiene en el flanco de salida, al finalizar la rutina
Este tiempo de 40ms es el apropiado para un tact switch convencional (en realidad para todos los dispositivos tipo push button), pero puede modificarse.
Es necesario considerar el funcionamiento del botón, el efecto que realiza, pues puede ya sea poner a 0 una pata del micro, o poner un 1 (VDD) en la misma. Para eso se realizan 2 ramas de análisis en función del tipo que se elija.
También podría hacerse una variación (que no le encuentro mucho sentido) para que el cambio se haga en el flanco de entrada, pero eso aparte de complicar el tema, lo transforma en muchísimo más susceptible a errores.
Espero que sirva. Saludos.