# Eliminar rebotes en interruptores



## hawk360 (Mar 6, 2007)

He leido por ahi que para eliminar los rebotes que se producen al cerrar un interruptor conectado a la entrada de un microcontrolador hay poner un condensador en paralelo con el interruptor. La pregunta es: De que valor deberia ser este condensador??

Y otra duda que tengo es si en un PIC 16F877A puedo conectar el pin MCLR directamente a 5 V o debería pasarlo primero por una resistencia para limitar la corriente?? En principio no tengo intención de ponerle ningun pulsador de reset. Así simplifico algo el circuito.


----------



## cykario (Mar 6, 2007)

Para eliminar rebotes lo puedes hacer de dos formas, una es si estas trabajando en lenguaje assembler es preguntar primero por el activo de tu sensor y despues que se haya pulsado preguntar hasta que se haya soltado. Ejemplo, tengo por RC0 un interruptor activo alto

pregunta1    btfss   portc,0
                  goto    pregunta1
pregunta2    btfsc    portc,0
                  goto     pregunta2
                  goto     lo_que_quieras_hacer

Otra forma de eliminar los rebotes sobre todo si se trata de sensores y los mismos generan una interrupcion es llamar a un tiempo de aprox 200mseg justo a la entrada de la interrupción, así se eliminan los falsos activos de los sensores/interruptores.

El MCLR lo puedes probar con una resistencia a VCC, esta resistencia puede ser de 10k por ejemplo. Saludos.


----------



## hawk360 (Mar 6, 2007)

Eliminarlos por software ya lo habia pensado pero si se puede por hardware con solo un condensador lo prefiero. Respecto a lo del MCLR me referia a si es obligatorio poner esa resistencia o tambien puedo conectarlo prescindiendo de ella??


----------



## pic-man (Mar 6, 2007)

Para el MCLR es necesario la resistencia precisamente para limitar la corriente y proteger el pic, sobre los rebotes, por supuesto que los puedes eliminar con capacitores pero yo digo que si puedes eliminar hardware mediante programacion lo hagas


----------



## cykario (Mar 6, 2007)

Estoy de acuerdo con pic-man, entre menos hardware "inutil" tenga tu circuito entonces son menos variables que tienes que controlar. Saludos.


----------



## maunix (Mar 6, 2007)

hawk360 dijo:
			
		

> He leido por ahi que para eliminar los rebotes que se producen al cerrar un interruptor conectado a la entrada de un microcontrolador hay poner un condensador en paralelo con el interruptor. La pregunta es: De que valor deberia ser este condensador??


100 nF funcionaría bien pero depende también del tipo de pulsadores que tengas.

Por software es también aconsejable pero yo pondría un delay de unos 5mseg entre deteccion y detección porque si lo haces asi sin más, un pic puede procesar eso en 1useg (a 4Mhz) o 0.2useg (a 20MHz) y realmente no habrás eliminado ningún rebote.




			
				hawk360 dijo:
			
		

> Y otra duda que tengo es si en un PIC 16F877A puedo conectar el pin MCLR directamente a 5 V o debería pasarlo primero por una resistencia para limitar la corriente?? En principio no tengo intención de ponerle ningun pulsador de reset. Así simplifico algo el circuito.



El RESET se debe dar cuando el pic está alimentado.  El reset consiste en poner el pin MCLR en bajo.  Si tu pic está alimentado y el reset está unido a esa alimentación, no tendrá tiempo de resetearse.  Alguna vez lo hará, alguna vez no.  

Consejo, una una resistencia de 4k7 de Vdd a MCLR.  Y un capacitor de 0.1uF de MCLR a GND.  Eso no fallará.

Además te evitas que cualquier ruido en la fuente resetee tu pic.

saludos


----------



## hawk360 (Mar 7, 2007)

maunix dijo:
			
		

> El RESET se debe dar cuando el pic está alimentado.  El reset consiste en poner el pin MCLR en bajo.  Si tu pic está alimentado y el reset está unido a esa alimentación, no tendrá tiempo de resetearse.  Alguna vez lo hará, alguna vez no.
> 
> Consejo, una una resistencia de 4k7 de Vdd a MCLR.  Y un capacitor de 0.1uF de MCLR a GND.  Eso no fallará.
> 
> ...




Quieres decir que si yo desconecto el PIC no se resetea??? Un poco raro no? Todos los registros del PIC se guardan en memoria RAM y esta cuando no esta alimentada se borra.


----------



## pic-man (Mar 7, 2007)

maunix se refiere al reset que se da por el MCLR, pero si, cuando se desconecta el micro tambien se hace un reset


----------



## hawk360 (Mar 8, 2007)

Vale gracias por la aclaración. Entonces haré el restet desconectando el micro.


----------



## maunix (Mar 15, 2007)

hawk360 dijo:
			
		

> Quieres decir que si yo desconecto el PIC no se resetea??? Un poco raro no? Todos los registros del PIC se guardan en memoria RAM y esta cuando no esta alimentada se borra.



*hawk360*, yo no he dicho tal cosa, ¡No se como has hecho para interpretar mi post de esa forma!  




			
				pic-man dijo:
			
		

> maunix se refiere al reset que se da por el MCLR, pero si, cuando se desconecta el micro tambien se hace un reset



gracias pic-man por interceder jeje, No me conecto seguido a este foro, pero es así.


----------



## Anchoasfrescas (Abr 20, 2007)

hola a todos

estoy programando un 16f877. tengo dudas sobre la actuacion del reset en el pic. he estado trasteando con el datasheet pero no encuentro respuesta. cuando pulso el reset del circuito se manda una señal al pic, pero que pasa dentro del pic??

la pregunta en cuestion es:

yo tengo un reset inicial que siempre se lleva a cabo cuando se inicializa el pic. dentro de ese reset considero la configuracion de puertos y del pic en general, ya que sino el pic no tendria estrucutra creada. 

hasta ahi creo que todo bien, pero si ademas tengo un pulsador para resetear en cualquier momento..... ¿como puedo hacerlo? igual no me explico bien, pero es que no entiendo bien si tengo que crear una subrutina especial o q.

gracias.


----------



## alphaimpresos (Oct 2, 2007)

Un saludo para todos, en verdad no creo que por software sea la mejor forma de desacernos de los rebotes. PREGUNTO: en tal caso que estuvieramos enviando, controlando, comunicando o recibiendo información, esta demora por software no interrumpiria algun proceso?

Pues esta claro que el que anda en este mundo de los pic ya todo lo hace en microsegundos, pero algunas veces estas demoras con bucles por software o por poolling no son recomendadas. Imaginense ustedes controlando una carga con respecto a una señal de cruce por cero, y de repente el usuario modifica el programa, me refiero a que cambia el programa, (interactua), el pic lo que debe saber es que eso paso y cambiar su proceso, pero se imaginan mientras que espera a que termine el rebote para no recibir ordenes que el usuario no desea.

Ojala no alla sido tan espesa la comunicacion. Anexo un informe sobre estos rebotes y como tratarlos con integrados discretos.

Un saludo desde la bella capital de Colombia.


La pereza anda tan despacio, que la pobreza no demora en alcanzarla.
Benjamin Franklin


----------



## ariel.soler (Abr 22, 2009)

Hola a todos, he estado leyendo sus comentarios y necesito ayuda para mi tesis. El que me pueda ayudar se lo agradecere mucho.
    Mi tesis trata entre otras cosas de programar el kit de entrenamiento de mp 8085 , para el cual tengo que usar las interrupciones especificamente una cualquiera, mi duda esta en como eliminar el rebote,podria hacerlo por software?, tengo que tener en cuenta que el mp debe leer un puerto el cual es el que produce dicha interrupcion.


----------



## Manonline (Abr 22, 2009)

La verdad que no lei todo el tema pero estas son mis recomendaciones:

*Hardware:*
Si usas capacitor, te comento que yo use entre 10nF y 100nF y andan joya.

*Software:*
Si estas programando en assembly tenes dos posibilidades:
-Una es que presionar el pulsador sea el evento de interrupcion, por lo que al entrar en servicio de interrupcion haces esto:


```
call Retardo_20ms
btfss Pulsador     ;o btfsc si estas usando logica negativa
retfie
.
.
resto del servicio de interrupcion
.
.
retfie
```

y si estas encuestando constantemente al pulsador (polling) haces esto:


```
Polling
    btfss Pulsador     ;o btfsc si estas usando logica negativa
    goto $-1         ;como no esta presionado vuelve un paso atras
    call Retardo_20ms   
    btfss Pulsador     ;o btfsc si estas usando logica negativa
    goto Polling
    .
    .
    resto del programa
    .
    .
```

saludos
mano.


----------



## ariel.soler (Abr 22, 2009)

Gracias por la ayuda , pero
  voy a explicar con mas detalle a lo que me refiero.
la cuestion es que tengo 4 pulsadores acoplados a un puerto,lo que necesito es que al presionar un de estos se genere una interrupcion la cual llamara una subrutina que recoja el dato que hay en ese puerto.
Mi idea es hacer un circuito que active la interrupcion, y como me elimino el efecto rebote del que les hable.
denme una manito en eso

saludos a todos


----------



## Manonline (Abr 22, 2009)

se entra en servicio de interrupcion cuando sucede un evento especifico, por ejemplo, cuando finaliza de escribir la eeprom, cuando se rebalsa el timer o cuando hay una interrupcion externa por cambio de nivel.

un circuito para activar la interrupcion es simplemente un pulsador y una pull-up/down (en el caso de que el puerto del pic no tenga pull-ups integradas) conectados a los terminales de interrupcion.

el rebote de los pulsadores, cuando estas hablando de un diseño con pics, se recomienda eliminar por software (retardo de 20ms que le da tiempo para que el pulsador se estabilice mecanicamente).

el tema de las interrupciones en pic es que este tiene solo un servicio de interrupcion y para saber la fuente de la misma tenes que hacer una encuesta entre todas las posibles fuentes (las que tengas activadas, sino tenes activada la interrupcion por finalizacion de escritura de eeprom, no vale la pena incluirla en la encuesta), una vez identificada la fuente, actuar en consecuencia.

bueno... cualquier cosa escribi...


----------



## ariel.soler (Abr 27, 2009)

despues de tener implementado los circuitos para eliminar el rebote,le puse condensadores de 100nf .La pregunta es si ya con esto activo la interrupcion,para leer el puerto realizo un retardo de 20 ms y ya , el problema mio es como lograr la interrupcion.
  Aqui va el manual del kit para que veas mas claro a lo que me refiero.
como veras en el circuito tengo acceso a la interrupcion RST 6.5 del micro , el puerto que tiene que leer es el pto A del 8155
para generar la int atraves de cualquiera  de los cuatro pulsadores tengo un cto con tres OR conectadas a la salida al pin 49 
del J1 del cto que esta en el manual.
     Saludos a todos y disculpa que  moleste tanto.


----------



## omarortegano (Jun 3, 2011)

he aquí un código en lenguaje assembler para eliminar el efecto rebote aplicando lo que dice el amigo CYKARIO, en este programa la entrada RC0 es activo baja, sin embargo en esta aplicación esta entrada controlada por un switch hace las veces de un pulsador, es decir, sólo se activa si el switch está en cero y además este circuíto tiene la particularidad que se deseaba que al resetear el PIC el valor de la salida fuera 1 como valor inicial (Led encendido, por ejemplo), la salida se asignó al pin RA5 y el PIC utilizado un 16f877, el código está en lenguaje ASSEMBLER

	list p=16f877
	include "p16f877.inc"

	org 0x00
	goto inicio
	org 0x05
inicio 
	bsf status,RP0
	movlw 0x20
	movwf TRISA
	movlw 0x06
	movwf adcon1
	movlw 0x00
	movwf trisc
	bcf status,RP0
	bsf portc,0
CICLO1	btfsc porta,5
	goto CICLO1
CICLO2	btfsc porta,5
	goto CICLO2
	movlw 0x01	
	xorwf portc,1
	goto CICLO1
	goto CICLO2
	END


----------



## PIBE CHORRO (Mar 18, 2014)

Hola a todos un gusto!... 
Alguien me podría explicar como eliminar el rebote, trabajando con el programa ld micro y el pic 16f877a
gracias


----------



## jvk85321 (Mar 19, 2014)

Simple, lees el pin y esperas un tiempo (250ms quizas) y luego vuelves a leer. Si las dos lecturas estan en 1 esta presionado, si no es falso positivo.

atte
jvk85321


----------



## Derneilkel (Nov 13, 2014)

Hay vistos varios ejemplos puntuales empleando distintas técnicas diferentes en software tratando de no mal gastar elementos físicos que sin conocimientos puede ser un dolor de cabeza.
Ahora bien de todas las soluciones propuestas para software sucede que para el principiante también es un dolor de cabeza.

Voy a dejar varias alternativas y las iremos evaluando:
#1:

```
while(!input(PIN_B4));
```
En este caso el problema es que solo toma un rebote y se quedaría en ese bucle hasta tanto se presione/suelte el pulsador. Poco conveniente para interrupciones distantes.

#2:

```
boton[0]=input(PIN_a0);
     delay_ms(250);
     boton[0]=input(PIN_a0);
```
Este caso se emplea, por ejemplo en el PIN RA0, con un retardo preguntando luego de un instante en que estado esta el pulsador.

Ejemplo: si estoy en 1, espero (aquí suceden los rebotes de alternancia entre 1/0/1..) luego de un delay pregunto de nuevo por el pulsador, si continua en 1 es porque lo estoy pulsando y con mas retardo se puede preguntar si ya esta en 0 lo que pone en evidencia que se presiono el pulsador (es como el mouse cdo espera a que soltemos el botón al hacer click para generar el evento)
En ese caso empleo un retardo lo que puede generar conflictos en tareas en tiempo real: procesos de filtrado, audio, muestreos en Conv. A/D. 

Aparentemente a velocidades de 4MHz no se producen problemas con las INTERRUPCIONES debido a que estas toman el primer cambio de estado, ahora bien si lo analizamos minuciosamente podrías tomar el rebote como muchos cambios y si la interrupción se ejecutase a esas velocidades es posible que se atienda la int tantas veces como rebotes haya.
Pero no es conveniente poner delay en INT's ya que detienen el main. Habrá que recurrir a otro algoritmo.
Soy todo oídos a mejores soluciones propuestas


----------



## D@rkbytes (Nov 14, 2014)

Derneilkel dijo:


> Pero no es conveniente poner delay en INT's ya que detienen el main. Habrá que recurrir a otro algoritmo.
> Soy todo oídos a mejores soluciones propuestas


Hace algún tiempo, buscando una buena solución para el problema de los rebotes en los pulsadores, encontré una librería escrita en C para PIC C Compiler.
Esta librería surge de una instrucción de PICBasic "*BUTTON* _Pin_*,*_Down_*,*_Delay_*,*_Rate_*,*_BVar_*,*_Action_*,*_Label" _que sirve muy bien para este propósito y lo que hace esta librería es muy similar, pues fue realizada para imitar a la instrucción de PICBasic, pero sin el salto a otra subrutina "_Label"_.
El autor, del cual ya no recuerdo su nombre ni el sitio, describe detalladamente las funciones que usó para crear la rutina *button*, y también los parámetros a usar.

Adjunto esta librería que es de libre distribución y un ejemplo sencillo de su uso.

Suerte.


----------



## ViCtorA (Nov 14, 2014)

Una técnica muy habitual es leer el teclado o teclas desde una maquina de estados, os dejo este ejemplo:
http://netstorage.iar.com/SuppDB/Public/SUPPORT/000370/AppNote_6811-003_State_Machine.pdf

Lo anterior lo utilizo para teclados, para 2 o 3 pulsadores hago lo mismo aprox. desde el timer.


----------



## yorsk2004 (Ago 12, 2018)

Hola, estoy creando una función antirrebotes para pulsadores en el PIC C Compiler.
Ya es funcional en el simulador con el pin_b2 pero tengo un problema pues no logro asociar esta función de manera general con cualquier pin de PIC. ¿Como podría solucionar esto?
Tengo entendido que hay que buscar un parámetro para la función para que se comporte de manera general.
Adjunto el código y la simulación.



```
#include <18F4550.h>
#fuses intxt, nomclr
#use delay(clock=1000000)
#include <lcd.c>
#use fast_io(b)

short estado;

short antirrebotes()
{
   short estadoActualPin, estadoAnteriorPin;
   int contador;
   do
   {
      estadoActualPin=input(pin_b2);
      if(estadoActualPin!=estadoAnteriorPin)
      {
         contador=0;
         estadoAnteriorPin=estadoActualPin;
      }
      else
      {
         contador++;
      }
      delay_ms(1);
   }
   while(contador<10);
   estado=estadoActualPin;
   return(estado);
}

void main()
{
   short estadoActualBoton, estadoAnteriorBoton;
   int pulsaciones;
   set_tris_b(0xFF);
   lcd_init();
   while(true)
   {
      estadoActualBoton=input(pin_b2);
      {
         if(estadoActualBoton!=estadoAnteriorBoton)
         {
            antirrebotes();
            if(estado==1)
            {
               pulsaciones++;
               printf(lcd_putc, "\f%u",pulsaciones);
            }
         }
      }
      estadoAnteriorBoton=estadoActualBoton;
   }
}
```


----------



## Dr. Zoidberg (Ago 12, 2018)

Probablemente algo como esto, aunque no me gustan muchas cosas...para empezar que no sepas lo que es un parámetro de una función en C.


```
short antirrebotes( int8 pinSinRebote )
{
   short estado, estadoActualPin, estadoAnteriorPin;
   int contador;
   do
   {
      estadoActualPin=input( pinSinRebote );
      if(estadoActualPin != estadoAnteriorPin)
      {
         contador=0;
         estadoAnteriorPin=estadoActualPin;
      }
      else
      {
         contador++;
      }
      delay_ms(1);
   }
   while( contador<10 );
   estado = estadoActualPin;
   return estado;
}
```


----------



## cosmefulanito04 (Ago 12, 2018)

Y si eso lo hacés con variables globales o por referencia, en un tiempo determinado, queda chiche bombón.


----------



## Dr. Zoidberg (Ago 12, 2018)

Es que desconozco el contexto de aplicacion, pero usando variables locales me aseguro que sea reentrante por si la emplea en una interrupcion...aunque el delay molesta.


----------



## yorsk2004 (Ago 13, 2018)

Dr. Zoidberg dijo:


> Probablemente algo como esto, aunque no me gustan muchas cosas...para empezar que no sepas lo que es un parámetro de una función en C.


No me hice explicar. Este es el error que esta tirando:


El compilador salta el error "Expression must evaluate to a constant" al llegar al parámetro de la función.


----------



## sebsjata (Ago 13, 2018)

estas usando fast_io() en el puerto B, lo que debes hacer es decir que pin del puerto vas a usar, en el ejemplo usas input(pin_b2), el pin 2 del puerto B como entrada.
en input(); debes de poner el puerto que quieras usar, ej. input(pin_b0), input(pin_b1), input(pin_b2), etc.


----------



## yorsk2004 (Ago 13, 2018)

sebsjata dijo:


> estas usando fast_io() en el puerto B, lo que debes hacer es decir que pin del puerto vas a usar, en el ejemplo usas input(pin_b2), el pin 2 del puerto B como entrada.
> en input(); debes de poner el puerto que quieras usar, ej. input(pin_b0), input(pin_b1), input(pin_b2), etc.


Agradezco su apunte, aunque ya tengo claro eso. Lo que quiero es hacer una función antirrebote para evitar la redundancia de código.
Supongamos que vamos a utilizar 10 pulsadores entonces ya podrá imaginar el larguero de código.
El problema es que no logro asociar cualquier pin a la función.


----------



## Dr. Zoidberg (Ago 13, 2018)

Entonces probá con esto:


```
short antirrebotes( const int8 pinSinRebote )
{
   short estado, estadoActualPin, estadoAnteriorPin;
   int contador;
   do
   {
      estadoActualPin=input( pinSinRebote );
      if(estadoActualPin != estadoAnteriorPin)
      {
         contador=0;
         estadoAnteriorPin=estadoActualPin;
      }
      else
      {
         contador++;
      }
      delay_ms(1);
   }
   while( contador<10 );
   estado = estadoActualPin;
   return estado;
}
```

Y si no vá, tirá el compilador a la basura.


----------



## yorsk2004 (Ago 13, 2018)

Dr. Zoidberg dijo:


> Entonces probá con esto...  Y si no vá, tirá el compilador a la basura.


Entonces lo tirare a la basura.


----------



## Dr. Zoidberg (Ago 13, 2018)

yorsk2004 dijo:


> Entonces lo tirare a la basura.


Esto es del help del CCS:


----------



## yorsk2004 (Ago 14, 2018)

Dr. Zoidberg dijo:


> Entonces probá con esto... Y si no vá, tirá el compilador a la basura.



Desinstale la versión dinosaurio del PICC de CCS que tenia cuando aun estudiaba electrónica (era la 3.pico) y me conseguí la versión 5.078. Salio a la primera .
Gracias por sus aportes. Ahora voy a mejorar la función con el timer0 o timer1 para no usar el delay, que en cierta manera se comporta como modo "marrano" (expresión de TriloByte).


----------



## miglo (Ago 14, 2018)

*yorsk2004 * que te parece ésta manera de tener un antirebote, a ver si te sirve, asi no usas delays, ejemplo de pin D2:

if(input(pin_D2)) {do{}while(input(pin_D2));} yo lo uso para incrementar o disminuir.


----------



## yorsk2004 (Ago 14, 2018)

Buen aporte. Está bueno el código, aunque ahora la normal ejecución del programa. Depende del contexto puede servir o no, porque el código hace algo como "no hago nada mientras no suelte el dedo del pulsador".


----------



## Saint_ (Ago 15, 2018)

yorsk2004 dijo:


> Gracias por sus aportes. Ahora voy a mejorar la función con el timer0 o timer1 para no usar el delay, que en cierta manera se comporta como modo "marrano" (expresión de TriloByte).


En realidad es sencillo pero a ver cuantos gruñidos salen antes de llegar a la solución optima


----------



## yorsk2004 (Ago 16, 2018)

Saint_ dijo:


> En realidad es sencillo pero a ver cuantos gruñidos salen antes de llegar a la solución optima


Tienes razón. Lo haré así: una vez se llama a la función antirrebotes se carga un timer con 10ms, si los estados actual y anterior son diferentes entonces se vuelve a recargar el timer con los mismos 10ms. Esto lo hara mientras la lectura del timer sea menor o igual a la carga de los 10ms.


----------



## Saint_ (Ago 16, 2018)

Si te pones a esperar en un bucle a que el timer se desborde seria lo mismo que usar un delay de 10ms, claro siempre depende como esta estructurado el código, sera interesante ver implementada las solución que propones


----------



## miglo (Ago 17, 2018)

Bueno yo quiero hacer una pequeña reflexion desde mi punto de vista y con mi justo conocimiento, que es pequeño, el tema de los antirrebotes, por lo que llevo leido da para mucho pero realmente es tan tan imprescindible y me explico, como bien pone yorsk2004 lo quiere para evitar el rebote en unos pulsadores, pero salvo que me equiboque, cuando entramos en una funcion especifica para modificar algun valor, lo que hacemos es pulsar teclas en concreto, si en ese momento hay alguna otra funcion en marcha, esta sigue funcionando, ejemplo: un motor activado, por lo que hacemos la modificacion que necesitamos y luego salimos de dicha funcion siguiendo el programa con su rutina normal.

Si dentro de esa funcion ponemos algun delay ¿hasta que punto es tan importante evitar el delay para hacer el antirrebote?, digo esto por que con un delay de unos 250 milis se elimina el rebote y con poner eso se puede ahorrar codigo y como va a ser poco tiempo no deveria importar mucho, pienso yo.

Segun comentais es mejor usar ese tiempo en hacer algunas comprobaciones en vez de poner un delay, pero claro como hacemos para hacer esos calculos, sabemos que con unos 200milis, mas-menos, evitamos el rebote, pero cuantas comprobaciones se puden colocar para que pase ese mismo tiempo y de paso evitar el rebote? o dicho de otra manera cuanto tarda mas-menos una instruccion? o mejor dicho ¿tiene sentido crear instrucciones, con lo que aumentamos el codigo, solo para evitar unos simples delays?.

Ya de paso una pregunta, en los codigos que mirado por hay, codigos sencillos, no veo que creen funciones especificas para evitar rebotes, quiere esto decir que tal vez lo que se suele hacer es mas incrementar componentes, llamensen condensadores y reistencias, para evitar incrementar sofware?.


----------



## pandacba (Ago 17, 2018)

Lo que hizo el forista tiene pleno sentido cuando se utilizan muchas teclas en un proyecto.
Si tu no quieres utilizar algo así simplemente no lo  utilices que a ti no te sirva o te parezca que no sirve no implica que para otros les sea muy útil


----------



## miglo (Ago 17, 2018)

Igual no me expresado correctamente, yo utilizo los antirrebotes, de lo contrario es un mareo cuando intento ajustar algun dato, pero como mis codigos son pequeños y no me implican problemas con el resto del programa pues no me complico tanto, que es a lo que me queria referir, por supuesto que cuando se usan muchas teclas es importante. 

Por otro lado, no he dicho que no sirva, creo que lo que he escrito es si tiene sentido complicarse tanto, por cierto, ami tambien me es util aprender a mejorar el antirrebote.


----------



## pandacba (Ago 17, 2018)

En programas cortos hacia cargar una variable si se presionaba una tecla por ejemplo si B0=1, A=A+1, y aunque se produzcan rebotes un solo pulso pondra hara tomar A el valor 1 luego de procesar la tecla volvia A=0


----------

