Paso 1: Botón contra rebotes
Para ilustrar el botón contra rebotes, el proyecto que hemos seleccionado contiene dos LEDs. Cuando se presiona el botón, los LEDs alternar entre ellos. Una pulsación enciende uno y el otro en. Al soltar el botón, puede comenzar el proceso otra vez y que los LEDs cambiar otra vez. Usted notará que el LED cambiará dos veces o más con solo un botón Pulse.
Hay dos formas de paralizar contra rebotes. Un método en el circuito (hardware) con el uso de un condensador y un software contra rebotes. El hardware simplemente usa un condensador para eliminar contra rebotes, y el software creará una variable que mide el nivel de confianza de la secuencia de botón de unos o ceros.
Descargo de responsabilidad: Este método que utilizo para hardware contra rebotes es una muy simple y pobre mans método. El principal problema con este método es que la tensión sube de 0 a 5v en lugar de una inmediata o cambio instantáneo. Esto puede poner la señal en un rango que el microcontrolador no sabe cómo lidiar con la tensión. Esta gama es el área entre los límites de las señales altos y bajos, que es entre 2 y 3 voltios. Con esto dicho, no he personalmente visto ningún problema con esto con mi botón contra rebotes. Si desea eliminar esta escalada, utilizar un disparador de schmitt.
En la ilustración video, verá que el circuito está conectado en la placa sin el hardware contra rebotes, por lo que el problema puede ser experimentado. Dos LED está conectado para el microcontrolador, en Puerto B, uno en el pin 0 y el otro en el pin 2. Ambos de estos pernos se establecerá en la salida y puesto que los LED son verdes, una resistencia de 330 ohm se utiliza para cada LED. El interruptor está conectado a la clavija 1 en el puerto B. Este pin se establecerá para la entrada y set para leer alta (pin a un "1"). para la primera prueba de "rebote", no utilizaremos un capacitor a través de los dos cables del botón.
El programa para hacer dos LEDs alternar cuando se pulsa la tecla es muy sencillo. En primer lugar, se inicializan los pernos: pernos de la salida a los LEDs están listos para la salida en el DDR (registro de dirección de datos). Uno de los LEDs se pueden alternar, así al principio, uno está en uno está apagado. Luego, se inicia el bucle sin fin y se ejecuta el código dentro de ese bloque hasta el microcontrolador pierde potencia. Dentro de este bucle, el pin que está conectado el pulsador constantemente se comprueba para determinar si está en. Si se presiona y exhibe un 1, comprueba si el botón estaba primeros liberados. Esto es importante, porque si no tenemos este control, el botón sólo cambiará continuamente mientras se presiona el botón. Sólo queremos que el botón para cambiar si el botón es presionado y liberado.
#include <avr/io.h> int main(void) { DDRB |= 1 << PINB0; //Set Direction for output on PINB0 PORTB ^= 1 << PINB0; //Toggling only Pin 0 on port b DDRB |= 1 << PINB2; //Set Direction for Output on PINB2 DDRB &= ~(1 << PINB1); //Data Direction Register input PINB1 PORTB |= 1 << PINB1; //Set PINB1 to a high reading int Pressed = 0; //Initialize/Declare the Pressed variable
while (1) { if (bit_is_clear(PINB, 1)) //Check is the button is pressed { //Make sure that the button was released first if (Pressed == 0) { PORTB ^= 1 << PINB0; //Toggle LED in pin 0 PORTB ^= 1 << PINB2; //Toggle LED on pin 2 Pressed = 1; } } else { //This code executes when the button is not pressed. Pressed = 0; } <p> }</p><p>}</p>
Cuando el microcontrolador está programado, y se presiona el botón repetidas veces, llega a estar claro que el LED cambiará, a veces correcta y a veces varias veces con sólo una pulsación. Añadir el condensador y comprobar el botón presionar y LED alternar nuevamente. En el osciloscopio, con el condensador instalado, un aumento gradual de la tensión se crea cuando se pulsa el botón, se oponen a un montón de arriba y abajo de tensiones resultantes de un rebote de las partes mecánicas del botón. Pero cuando se suelta el botón, muestra que la tensión es un cambio directo. Esto es porque el otro capacitor no está instalado entre el botón y el microcontrolador.