TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: er_clemen en 11 de Julio de 2003, 19:04:00

Título: ANTI-REBOTES SOFTWARE
Publicado por: er_clemen en 11 de Julio de 2003, 19:04:00
¿Quien me puede decir como hacer un antirebotes por software con PBP?

GRACIAS
Título: RE: ANTI-REBOTES SOFTWARE
Publicado por: MGLSOFT en 12 de Julio de 2003, 06:28:00
Puedes utilizar el comando Button, que preve un tiempo programable de antirrebote, o desarrollar una rutina de escaneo de la tecla con 20 mseg de retardo...
Título: Re: ANTI-REBOTES SOFTWARE
Publicado por: TREMENS en 02 de Diciembre de 2006, 14:36:35
No me queda claro adonde va el retardo para evitar el rebote.
Usando este programa para leer el teclado, donde iría el retardo de 20mseg????(tiene un retardo al final, pero  está mal puesto o no es suficiente)

barrido:   
        LOW A                       ;hacer bajo la 1era fila
  IF UNO    = 0 THEN numero=1:return ;si 1ra tecla es presionada sacar 1   
  IF DOS    = 0 THEN numero=2:return ;si 2da tecla es presionada sacar 2
  IF TRES   = 0 THEN numero=3:return ;si 3ra tecla es presionada sacar 3
   
        HIGH A                     ;poner en alto la 1era fila
        LOW B                      ;hacer bajo la 2da fila
  IF UNO    = 0 THEN numero=4:return    ;si 1ra tecla es presionada sacar 4 
  IF DOS    = 0 THEN numero=5:return  ; y así sucesivamente 
  IF TRES   = 0 THEN numero=6:return   
 
        HIGH B                     ;poner en alto la 2da fila
        LOW C                      ;hacer bajo la 3ra fila
  IF UNO    = 0 THEN numero=7:return   
  IF DOS    = 0 THEN numero=8:return 
  IF TRES   = 0 THEN numero=9:return     
   
        HIGH C                     ;poner en alto la 3ra fila
        LOW D                      ;hacer bajo la 4ta fila
       
  IF DOS    = 0 THEN numero=0:return ;solo senso el 0   
 
 
        HIGH D                     ;poner en alto la 4ta fila
  pause 10                       ;pausa de 10 milisegundos
 goto barrido           
Título: Re: ANTI-REBOTES SOFTWARE
Publicado por: Nocturno en 02 de Diciembre de 2006, 14:43:42
Deberías ponerlo antes de cada "return"
Título: Re: ANTI-REBOTES SOFTWARE
Publicado por: manwenwe en 02 de Diciembre de 2006, 14:51:05
Hola! No se nada de PBP pero yo hice un antirrebotes en asm(en C es tambien facil de hacer) que consistia en poner un registro a 127(más o menos la mitad) y cada vez que se leía un 0 en la linea se decrementaba el registro y si se leía un 1 se incrementaba... de esta forma cuando el registro se desborda por arriba tienes un 1 en la linea, y si lo hace por abajo tienes un 0... Lo utilizé con un interruptor tipo switch(de estos malillos que fallan mucho) y me funcionaba a la perfección... no fallaba nunca. Espero que te sirva...salu2!
Título: Re: ANTI-REBOTES SOFTWARE
Publicado por: electronando en 02 de Diciembre de 2006, 15:14:01
te doy una formula q nunca me falla supongamos q portb.0 esta con pull up a 5voltios y si se juntan contactos me lleven a tierra , solo uso esto en contactos super ruidosos como botones de lata switch de fines de carreraen donde de acuerdo a la cantidadde ruidosidadq pueda tener aumentas obajas el tiempo de gracia paravolver a testear mira

if portb.0=0 then

pause 20 'ëste es el retardo o tiempo de gracia
if portb.0=0 then
(acalarutina q deseas ejecutar)
endif
endif
esto es que preguntas laprimeravez y una vez q te acierte sea ruido o no despues de un tiempo de estabilizacion vuelvo hacer la pregunta y si acierta en esta se ejecuta recien la rutina la verdadnunca entendi de una forma bien explicita lo de button por eso uso esta rutina q me funciona de maravillas espero te sirva :-/
Título: Re: ANTI-REBOTES SOFTWARE
Publicado por: Marioguillote en 02 de Diciembre de 2006, 15:51:43
Hola TREMENS

Exactamente como te dijo Nocturno, debes ponerlo antes del return, cosa que te quedaría :

IF UNO    = 0 THEN numero=1 : DELAYMS 20 : return ;si 1ra tecla es presionada sacar 1   

Esto debieras repetirlo en cada línea.
Yo particularmente al usar esa técnica de barrido utilizo retardos de más tiempo, ya que 20 ms me resulta poco.
Yo he usado satisfactoriamente tiempos de entre 200 ms y 600 ms.

Saludos
Mario
Título: Re: ANTI-REBOTES SOFTWARE
Publicado por: Mario en 02 de Diciembre de 2006, 16:10:03
Esto es un ejemplo de cómo usar el button:


UP                       VAR PORTB.6             'TECLA DE UP
DOWN                  VAR PORTB.7             'TECLA DOWN 

 loop10:
 Button UP,1,255,0,B5,0,loop11
 High INUP
 loop11:
 IF INUP=1 Then SPPISTON                           
                       
 loop12:
 Button DOWN,1,255,0,B6,0,loop13
 High INDOWN
 loop13: 
 IF INDOWN =1 Then SPPISTON
                       
 Write 0,SPPISTON.BYTE0
 Write 1,SPPISTON.BYTE1

Espero sirva.
Título: Re: ANTI-REBOTES SOFTWARE
Publicado por: navaismo en 02 de Diciembre de 2006, 16:13:22
Yo siempre implemento un antirebote asi en PBP

if portx.x=x then
 pause 50
  if portx.x=x then   'el estado de x debe ser el mismo despues del Igual
     'acciones
  endif
endif
Título: Re: ANTI-REBOTES SOFTWARE
Publicado por: aitopes en 02 de Diciembre de 2006, 16:54:53
Yo hago como navaismo....y funciona.
Al principio me perseguia con que "que pasa si justo tengo dos ruidos separados por el mismo tiempo de la demora, y lo interpreto como un 1 que en realidad no existe?" pero en la practica no pasa nunca (o he tenido mucha suerte) :mrgreen:

Saludos!
Título: Re: ANTI-REBOTES SOFTWARE
Publicado por: todopic en 02 de Diciembre de 2006, 17:37:01
Hola Amigos, yo a los anti-rebotes los escribo (en asm) con tres verificaciones..
supongamos que el pulsador conecta a masa y la resistencia es a +
verifico si el pin esta en cero---> si
 demora 50 ms  ----> continuo ya que no pulsaron
luego de la demora, verifico si continua en cero----> si

entonces lo mantienen pulsado,  entro en un loop verificando si es uno  (sera uno cuando suelte)
continua el programa....   :mrgreen:

Norberto
Título: Re: ANTI-REBOTES SOFTWARE
Publicado por: dogflu66 en 02 de Diciembre de 2006, 18:27:51
'Esto no falla nunca
Dim p1 As Bit
p1=0
main:
   If RA0 = 1 Then p1 = 1
   If p1 = 1
      hago lo que sea
      p1 = 0
   Endif
Goto main
End       
Título: Re: ANTI-REBOTES SOFTWARE
Publicado por: pandarojo en 27 de Mayo de 2007, 08:17:53
El problema viene si al mismo tiempo estamos atendiendo la visualización con varios displays de 7 segmentos. Entonces con esas demoras se producen parpadeos. Me imagino que una solución podría ser anidar x veces pausas muy pequeñas.

Saludos.
Título: Re: ANTI-REBOTES SOFTWARE
Publicado por: Nocturno en 27 de Mayo de 2007, 12:00:11
Si atiendes al display mediante la interrupción del Timer no tiene porque haber parpadeos extraños.
Título: Re: ANTI-REBOTES SOFTWARE
Publicado por: pandarojo en 28 de Mayo de 2007, 12:08:05
Ya, pero es que en los códigos de ejemplo no había visto el uso de interrupciones por ningún lado. Cosa que, por otra parte me gustaría ver, me refiero a un ejemplillo completo para ver como funcionan. Se nota que soy novato ¿verdad? Estoy intentando hacer un proyectillo por mi cuenta pero, tengo poca idea de microcontroladores y nada de ensamblador, por eso tiro por el basic.
En un post aparte expondré lo que pretendo hacer.

Saludos.