# Antirebote por software



## Zelene (Nov 18, 2007)

Necesitaria que alguien me diera una mano para hacer por soft un antirebote para un ejercicio con el pic 16f84. El ejercicio es el siguiente.
Presionando el pulsador 1, el led del port_b se encendera y permanecera en este estado al soltar el pulsador. Al presionar nuevamente el pulsador 1, dicho led debe apagarse y debe encenderse el led 2. Lo mismo debe repetirse para las 8 salidas del port_b. Todo esto usando assembler. Gracias!


----------



## pic-man (Nov 18, 2007)

Revisa este enlace: Leer botones e interruptores, ahi veras como hacer un antirrebote por software.

Sobre lo que quieres hacer de dar click en el boton y que permanezca encendido el led hasta que vuelvas a dar click lo puedes hacer con la instruccion XOR.


----------



## ELIUSM (Nov 18, 2007)

Hola!
Sabes. no quedé tan contento con ese tutorial. Me parece que las rutinas que allí salen igual pueden fallar.

Entonces te sugiero lo siguiente. Los rebotes pueden durar hasta 50mS después de la pulsación del botón. Entonces, haz una rutina que lea el pin al que está conectado el botón, y cuando este se apriete, la rutina salte a una subrutina que sea un delay de 50mS. Esto hace la espera necesaria hasta cuando el botón se haya estabilizado al fin.

Eso es lo que te recomiendo.
Saludos!

PD: Ah! Y sabías que un botón no es venir y conectarlo asi nomás en una entrada del PIC? Sabes que hay que ponerle resistencias de cierta manera para que no se vuelva loco el PIC? Si no sabes, pregunta. Estaré dando vueltas por aquí.


----------



## pic-man (Nov 19, 2007)

ELIUSM gracias por tu comentario, esa rutina que esta en la pagina funciona y al menos a mi no me ha dado ningun problema, aunque tambien he usado rutinas con retardos como la que tu indicaste, despues pondre una rutina con un retardo para que el antirrebote sea mas seguro.

Sobre lo que dices de que se deben poner resistencias para poder leer un boton a que te refieres? El boton lo conecto utilizando una resistencia de pull-up de modo que el pic siempre lea un 1 hasta que el botón es presionado. Lo que hago es incorrecto? Quisiera que me dijeras a que te refieres, estoy totalmente dispuesto a aprender. Muchas gracias.


----------



## ELIUSM (Nov 19, 2007)

Hola cumpa!

Mira, es eso lo que tu dices, lo del Pull-Up. Lo que pasa es que si dejas una entrada del pic libre, sin conexión a nada (o a un pulsador no presionado), esta saltará entre un logico 1 y 0, de manera que al leerla, se leerán puras "pulsaciones del pulsador" erróneas, lo que es indeseado, cierto? Bueno, entonces hay que "amarrar" a tal entrada, para que no salte. Eso se hace con una resistencia, normalmente a tierra. Cuando se apriete el pulsador, es cuando todo se conecte a un polo positivo, el que finalmente tira todo para el lado de dar un lógico 1. Es como una palanca que está amarrada por un elástico, y venes tu y con fuerza la tiras para el  otro lado. Bien, ahora menos bla bla y más práctica, te adjunto un esquema donde verás como es que se deben conectar las resistencias. Y suerte con eso.


----------



## pic-man (Nov 20, 2007)

Vaya, muchas gracias, eso no lo sabía. La configuración que yo uso me la enseño mi profe de digitales y no es alguien que sepa poco, sin embargo tu configuración si debe ser mas segura.


----------



## ELIUSM (Nov 25, 2007)

Hola!
Me faltó agregar otro detalle:
Lo que te publiqué allí se llama "Pull Up". O sea, si no aprietas el pulsador siempre leerás un 1 lógico en ese pin del PIC.
Para hacerlo al revéz, o sea, para leer un lógico 0 cuando no aprietas el pulsador, se hace lo que se llama Pull Down, poniendo el GND en donde está el 5Vpositivo y 5Vpositivo en donde está el GND.

Asique: Pull Up y Pull Down. Recién hace poco me di cuenta de todo eso, sabiendo inconscientemente de la existencia de estas configuraciones.

Saludoos!


----------



## PHLAKO (Nov 26, 2007)

Hola gente, solo queria agregar que esa resistencia de 100 ohm esta de mas, para que hacer un divisor de tension, si lo que quieres es un nivel logico LOW, basta con tirar a tierra la linea. Te comento esto ya que cuando diseñas una placa y necesitas el mayor espacio posible, hay que pensar en deshacerse del material redundante. Imagina un teclado de muchas teclas. Ahora al hacerlo alreves(con la logica alreves) necesitas esa resistencia para no tirar directamente los 5v al PIC, lo recomendable seria, agrandar mas ambas resistencias para dejar que menos corriente circule por el micro. Espero no tomes a mal el comentario "ELIUSM", es solo con animo de ayudar.

saludos 

chaos


----------



## ELIUSM (Nov 26, 2007)

Hola!
Jajaja Phlako, te urges mucho. Gracias por el aporte!
Tenía entendido que esa resistencia estaba para ablandar un poco el choque cuando se apretaba el pulsador, ahora si, claramente no es necesaria para cuando se conecta a GND.
Saludos!


----------



## PHLAKO (Nov 27, 2007)

Hi, ELIUSM, en otro foro casi me pegaron por tratar de ayudar  por eso postee de esa forma.

salu2 

chaos


----------



## El nombre (Nov 27, 2007)

Softwre? hadware? este ingles.

Con temporizar 20 ms va que se las pela "o machaca" según se mire.


----------

