# Circuito antirebote (Hardware)



## gu1llermo (Sep 29, 2006)

Bueno después de buscar en San Google y el buscador interno de éste foro y en un libro que tengo, todavía no estoy seguro en el circuito definitivo antirebote que tengo que implementar a continuación los esquemas que hice para ver cuál de los dos me recomiendan:
Circuito 1:


Según lo que he leído es que la constante RC tiene que ser mayor a la duración del rebote presente, asumiendo que un rebote puede durar como 2mili-seg entonces RC>2mili-seg => R=10x10^6 y C=1x10^-9 => RC=10mili-seg y esto es mayor que 2mili-seg, bueno ese es mi argumento, pero no tengo mucha experiencia y por eso recurro a ustedes a ver quién me puede ayudar, desde ya gracias.

Circuito2:


Éste lo saqué del libro pero... tengo mis dudas.


----------



## VichoT (Sep 29, 2006)

Holas.gu1llermo. le creo mas al 1 ya que el 2º cto no tiene una resistencia limitadora de descarga del condenso  elevando al corrient de descarga en demasia reduciendo la vida util del condenso..aunque si tienes una resistencia muy grande de descarga  se demorara mucho en tiempo en vajar el voltaje lo suficiente para que la entada del PIC sea 0... creo que deberas buscar una resitencia mas pequeña que 1Mohms talves de un kilo.....

BYE!


----------



## eduardo.bonilla (Sep 30, 2006)

Hola guillermo,

En los dos circuitos que muestras tienes el mismo problema de que al momento de presionar el interruptor no existe ningún filtro antirebote porque la entrada al pic estaría en corto con tierra.   Te hace falta la resistencia limitadora en la descarga del capacitor C8.

Puedes ver lo que he escrito en la siguiente liga para una explicación detallada del filtro antirebotes.

http://www.kedo.com.mx/modules/newbb/viewtopic.php?topic_id=25&post_id=34#forumpost34

Ojalá ésta información te sirva.  

Saludos,

El P@n@


----------



## gu1llermo (Oct 3, 2006)

Muchas Gracias a VichoT y Eduardo por su respuestas y su interés, me han ayudado a ver mejor la solución.

Eduardo el PIC no está en corto a tierra directamente, sino a través de un capacitor, y todos sabemos que el capacitor no puede variar bruscamente su voltaje, es una de sus propiedades y yo me aprovecho de ello con éste circuito, así que es imposible que en T=0 (cuando cierre el pulsador) el voltaje a la entrada del PIC sea cero voltios porque está en paralelo con el capacitor (que está cargado) y éste tiene una resistencia de descarga en serie.

En cuanto a la fórmula que planteas en tu circuito, cuando multiplicas: 20K * 1000p eso es igual a 20us y no 20ms ó lo que es lo mismo 20x10^3 * 1000x10^-12 = 20x10^-6

El circuito definitivo que he deducido es el siguiente:


Con una constante RC=10x10^3 * 1x10^-6= 10x10^-3= 10ms (En la descarga ó transición Beta)

y

Con una constante RC=11x10^3 * 1x10^-6= 11x10^-3= 11ms (En la carga ó transición Alfa)


Nota1: Yo no quiero caer en polémica ni nada por el estilo, si estoy equivocado por favor hacermelo saber, yo estoy aprendiendo y como dicen: "la ignorancia es atrevida" disculpen cualquier incomodidad (si la hubo).

Nota2: ¿Eduardo con qué programa hicistes ese esquemático?

Nota3: Todavía no he montado el circuito.

Nota4: Pasenla bien   y gracias.


----------



## eduardo.bonilla (Oct 3, 2006)

Hola Guillermo,

Muy interesantes tus comentarios.  Me hicistes dudar por un momento.    

Gracias por la información sobre los cálculos incorrectos, tienes toda la razón,  los cálculos son incorrectos y en vez de ser 10ms y 20ms, debe ser 10us y 20us.   Fue un error mío garrafal.

Tienes toda la opción de dudar y preguntar, eso es muy bueno y ojalá todos en el foro preguntaran sus dudas también.

Sobre lo que comentas de que el PIC no está en corto con tierra, te comento que el circuito que propones tienes una conexión directa entre la entrada al PIC y 0V.   Cuando cierras el switch se crea una conexión entre los dos pines, lo que hace que la entrada al PIC sea igual a 0V.

Es correcta tu afirmación de que el capacitor no puede variar bruscamente su voltaje, de hecho esto es una condición imposible.    Todo va a depender de la resistencia asociada a la descarga del capacitor y cuando conectas a 0V con el switch la resistencia de descarga será casi 0 ohms, pues el valor de 0 ohms tampoco existe,  por lo que el tiempo de descarga será muy, pero muy bajo.

Creo que todo el problema viene con el entendimiento de la conexión en serie y paralelo.

En tu circuito propuesto el capacitor no está conectado en paralelo al PIC.  Mas bien la resistencia R2 + el cap C1 están conectados en paralelo a la entrada del PIC.    Y no tienes ninguna resistencia en serie con la entrada del PIC al momento de descarga del capacitor.

Sobre las mediciones, me he tomado la libertad de conectar tu circuito y medir el tiempo de descarga del capacitor, y el tiempo de descarga al presionar el switch me ha dado 2.64ns, y encontré algo de ruido en la entrada de medición.   Cabe mencionar que he puesto en vez del PIC una resistencia de 1M ohm para simular una compuerta CMOS. 

Te incluyo la medición para que la revises, y ojalá te sirva para revisar nuevamente tu circuito.

Sobre el software que he utilizado para el circuito es el KICAD, es un software gratuito y puedes ver los detalles del software en éste foro al igual que la página de KEDO, te lo recomiendo ampliamente, le he ayudad a un par de personas a completar sus diseños con éste software y me gusta mucho.  También utilizo las librerías de kedo_device para los diagramas.

Bueno, espero la información te sea muy útil.


----------



## gu1llermo (Oct 3, 2006)

Oye Gracias de nuevo Eduardo, muy útil el diagrama, ahora estoy más convencido que es el circuito que necesito y te digo porqué:

El tiempo de descenso es de 2,64ns, yo estoy utilizando el PIC16f877 con oscilador de externo de 20Mhz, implica que su reloj interno es de 5Mhz con lo que cada instrucción simple la ejecuta en 200ns, entonces para cuando yo pregunte si el pulsador está en Low, ya la señal de entrada estará estable, es decir ya debió pasar el transitorio hace rato.

De todas formas también cuento con el esquema que propones, por si no me resulta lo que yo hice  

¿Hicistes un oscilador y ves la señal en la compu?

Por lo que veo montastes el circuito físicamente, lo digo por la señal de ruido presente, aunque inofensivo porque es muy leve la diferencia de voltaje como para que cambie de un estado lógico a otro.


----------



## eduardo.bonilla (Oct 4, 2006)

Guillermo, mucha suerte en la implementación.  Ojalá y te funcione para lo que necesitas.

Solo para comentarte que el circuito lo implementé físicamente con un protoboard y la señal la he sacado con un osciloscopio.   La oscilación que se ve seguramente es por el cableado del circuito.

Me gustaría saber tus resultados una vez lo implementes.   

Saludos,

El P@n@


----------



## maunix (Oct 4, 2006)

gu1llermo una sugerencia.

Si usas el PORTB , con los weak pullup habilitados, no necesitas más que un pulsador.

Además el "antirebote" lo podrías resolver por software, evitándote de confiar en que el hardware simpre haga todo además de ahorrarte algunos componentes, espacio en PCB, tiempo de armado, etc.  

Además dicha rutina te será muy pero muy útil cuando por ej, utilices un teclado de membrana.

Saludos


----------



## gu1llermo (Oct 4, 2006)

Con gusto Eduardo te cuento como me fué, el sábado el profesor me va a prestar un osciloscopio para realizar unas pruebas más, mientras estoy armando el circuito completo.

Hola Maunix, lo que pasa es que yo estoy trabajando (en éste caso) sobre algo que ya hizo otra persona y lo estoy acomodando, es decir arreglando porque no funcionaba bien, en específico es mi tesis que está basada en dos tesis más, y usaron el puerto A, gracias por la recomendación, la tendré presente para futuras implementaciones, en cuanto a eliminar el fenómeno del rebote por software, yo en las practicas que he hecho siempre lo e eliminado por software, pero en éste caso en particular es muy complicado realizar dicha implementación porque se necesitan hacer muchas cosas en paralelos y no me puedo quedar en una rutina de esperar 10ms porque pierdo información, en ese momento se pueden estar recibiendo ordenes ó datos del exterior y tengo que atenderlo si o si, aunque sé que puedo realizar la implementación por software así sea más complicado, pero me va a quitar mucho tiempo por eso prefiero ésta implementación por hardware para solventar la situación.

Saludos y estoy en deuda con exponer mis resultados y conclusiones al finalizar.  8)


----------



## maunix (Oct 5, 2006)

gu1llermo dijo:
			
		

> Con gusto Eduardo te cuento como me fué, el sábado el profesor me va a prestar un osciloscopio para realizar unas pruebas más, mientras estoy armando el circuito completo.



Bueno entiendo que si no puedes modificar el software, solo te queda esa opción.  Es que no estaba aclarado al principio del post.  Disculpas



			
				gu1llermo dijo:
			
		

> , en cuanto a eliminar el fenómeno del rebote por software, yo en las practicas que he hecho siempre lo e eliminado por software, pero en éste caso en particular es muy complicado realizar dicha implementación porque se necesitan hacer muchas cosas en paralelos y no me puedo quedar en una rutina de esperar 10ms porque pierdo información, en ese momento se pueden estar recibiendo ordenes ó datos del exterior y tengo que atenderlo si o si, aunque sé que puedo realizar la implementación por software así sea más complicado, pero me va a quitar mucho tiempo por eso prefiero ésta implementación por hardware para solventar la situación.



gu1llermo, hacer una rutina de antirrebote esperando con un polling 10mseg sin hacer otra cosa es una opción muy poco recomendable.  Yo no dije eso.    

Tengo aplicaciones hechas en tiempo real, donde cada menos de 1mseg se toman decisiones, se recibe información por los pines, se hacen cálculos, se comunica con la USART y se establece además una interfaz con teclado y sin embargo no por eso estoy 10mseg solamente leyendo un pin.

Es cuestión de cómo organices tu software, además leer 10mseg todo el tiempo un pin no te garantiza nada y tampoco es útil, a mi modo de verlo.

Saludos


----------



## jospylos (Oct 26, 2006)

maunix dijo:
			
		

> gu1llermo dijo:
> 
> 
> 
> ...



Que tal , esta muy interesente su debate sobre el circuito antirebote, quisiera saber MAUNIX, como es la implementacion por software de este circuito antirebote , quiza me puedas ayudar yo estoy implementando un programita en el 16f877 , que necesita de señales provocadas por pulsadores , para que me ejecute unas tareas, pero el efecto de rebote , no hace que el pic detecte bien la señal ...porfavor espero tu respuesta


----------



## Ecj (May 26, 2011)

jospylos dijo:


> Que tal , esta muy interesente su debate sobre el circuito antirebote, quisiera saber MAUNIX, como es la implementacion por software de este circuito antirebote , quiza me puedas ayudar yo estoy implementando un programita en el 16f877 , que necesita de señales provocadas por pulsadores , para que me ejecute unas tareas, pero el efecto de rebote , no hace que el pic detecte bien la señal ...porfavor espero tu respuesta



Hola. 

También me interesaría mucho, conocer como es la forma correcta de implementar el antirrebote por software. 

Espero nos puedas colaborar con eso.

GRACIAS


----------



## lubeck (May 26, 2011)

> conocer como es la forma correcta de implementar el antirrebote por software.


 
cuando solicites infomacion, procura fijarte en la fecha de la ultima participacion... en este caso 26/10/2006... uffff... y solo tuvo 17 participaciones .... 

por software, lo que yo te recomiendo es que utilices el regreso del boton...

es decir... tiene un estado 0 el puerto, entonces lo tomas como que no esta pulsado verdad??
ok...

presionas y tienes un 1 en el puerto pero lo sigues tomando como que no se ha pulsado....

al soltarlo o sea de pasar de 1 a 0 es cuando lo tomas como pulsado.. y vuala un antirrebote genial...

se entendio???


----------

