Autor Tema: Rebote del pulsador  (Leído 11433 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Rebote del pulsador
« en: 09 de Enero de 2007, 14:53:46 »
Hola a todos.

Ya hice varias cosas con botones y hasta ahora no habia tenido problemas con el ruido pero ahora no se que es lo que pasa que cuando pulso un boton, tienen que subir un digito y es como que se cuelga y sigue cada un segundo subiendo hasta el maximo que en mi caso son 6.
Supongo que ahora como estoy manejando 2 motores paso a paso eso mete ruido en el circuito y hace que tenga este rebote. Hace varios años en este foro habia leido que para evitar esto habia que usar un condensador.
Me podrian decir cual y como conectarlos y si puede ser por esto que les comentaba?
El circuito tiene solo resistencias de 10k a 5v y el boton a masa.

Saludos y gracias.
Pablo

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: Rebote del pulsador
« Respuesta #1 en: 09 de Enero de 2007, 15:00:38 »
Hola!
Yo pondria un condensador de .1 uF entre el punto en que se une el pin del pic con el pulsador y la resistencia y masa.
Eso te da un tiempo de T = C x R, donde C esta en faradios y R en Ohms.

Te quedaria: el pin del pic a un nodo en el que esta uno de los extremos de R, de C y del pulsador. La otra "pata" de la R a +V, y el otro extremo del C y del pulsador a masa.

Saludos!

PD: Con el pulsador en reposo, tenes un "1" en el pic, y al pulsar, se pone en "0" despues de "T".
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Rebote del pulsador
« Respuesta #2 en: 09 de Enero de 2007, 15:29:52 »
Perdon por la ignorancia. El capacitor es el que dice 104m o es de los electroliticos?

Desconectado Marioguillote

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: Rebote del pulsador
« Respuesta #3 en: 09 de Enero de 2007, 15:40:36 »
Hola pablo !  :)

Es el 104 y otra cosa :  entre las instrucciones del programa que "leen" el botón, pónles una pausa aunque sea pequeña de 10 milisegundos.

Saludos
Mario

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Rebote del pulsador
« Respuesta #4 en: 09 de Enero de 2007, 15:45:53 »
Puse el capacitor. En el programa tengo una espera de 30ms y entra en un ciclo mientras se presiona y cuando se suelta.
Pero ahora los numeros avanzan sin presionar el boton.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: Rebote del pulsador
« Respuesta #5 en: 09 de Enero de 2007, 15:48:36 »
Me suena a un problema con el soft....;)
Saludos!
PD: Postea el codigo!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado ESTECA55

  • PIC24H
  • ******
  • Mensajes: 1404
Re: Rebote del pulsador
« Respuesta #6 en: 09 de Enero de 2007, 15:53:39 »
Hola, tal como comenta aitopes con esos valores vas a solucionar el problema, pero bien podrias hacer antirrebote por soft, en mi caso para todos los pulsadores e interruptores que use en los pic los conecte directos al pic, con la correspondiente resistencia pull-down o pull-up y el antirrebote lo hago por soft.

Es mus censillo y solo consiste en cada vez que detectas el pulso o cambio de estado esperar una cierta cantidad de tiempo y nuevamente testear la entrada para ver si todavía esta seteado el pulsador, si lo esta, haces la accion correspondiente, y si no significa que fueron pulsos de ruido, rebote o lo que sea. De esta manera para que un pulso sea considerado como verdadero, debe tener una cierta longitud, justamente lo que estas haciendo con la maya RC, ya que si viene un pulso pequeño (ruido) no alcanza a cargar el cap y demas.

No se con que lenguaje estas trabajando así que lo expreso de manera esquemática:

->Estoy en un bucle testeando la entrada, o estoy en un  proceso a la espera de la interrupción por ejemplo INT0

->Detecto el cambio de estado,

->Espero un cierto tiempo ; suelo usar entre 20 y 100 mili segundos, esto los podes ir probando. Recorda que para un    pulsador tomarte 100 miliseg no es nada, el dedo en apretarlo tarda mucho mas. (normalmente uso 50ms)

->Nuevamente testeo la entrada, a ver si sigue el pulso en la entrada, ya sea negativo o positivo, y si  estoy trabajando con la interrupción, me fijo si por ejemplo era acriva por 0, si sigue en cero.


->Si el pulso sigue activo, quiere decir que es un pulso para considerarlo como verdadero y atiendo la tarea correspondiente al pulsador. Pero si luego de la espera el pulso no sigue activo, quiere decir que no puede ser considerado verdadero, puede ser ruido o rebote, entonces vuelvo a lo que estaba haciendo, ya sea el bucle infinito o la tarea que estaba realizando previamente activando la interrupción.


Saludos y espero qeu sea útil.
« Última modificación: 09 de Enero de 2007, 15:55:11 por ESTECA55 »
Hay que esforzarse por ser el mejor, no creerse el mejor

Desconectado ESTECA55

  • PIC24H
  • ******
  • Mensajes: 1404
Re: Rebote del pulsador
« Respuesta #7 en: 09 de Enero de 2007, 15:59:21 »
Perdón si quedo medio colgado el mensaje anterior, es que cuando coment¡ce a escribir, solo estaba la primer respuesta de aitopes, y me demore un poco, al momento de publicarlo vi que habían escrito un par de post mas pero lo mande igual como estaba, hace mucho calor como para escribir todo de nuevo jejeje

Ariel tengo un par de codigos de antirrobote que arme yo pero en asembler y van de 10, si queres lo subo, pero no es mas que lo que acabo de explicar.
 
Hay que esforzarse por ser el mejor, no creerse el mejor

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Rebote del pulsador
« Respuesta #8 en: 09 de Enero de 2007, 16:07:46 »
Postie aca porque no pense que era de soft pido disculpas, espero entiendan este lenguaje.
Los pulsadores estan conectados en C0, C1, C2 y C3, mientras tengo pulsado estoy en un ciclo, espero cuando suelto 200ms analizo hasta use un variable bandera para que si ya paso no vuelva a pasar, y luego entra en otro ciclo de espera mientras no se estan pulsando los botones.
Sin el capacitor aumenta una vez presionado, con el capacitor apenas prendo el circuito.

   while(true) {
      do {
         if(!input(PIN_C0)) {
            Boton = 1;
         }
         if(!input(PIN_C1)) {
            Boton = 2;
         }
         if(!input(PIN_C2)) {
            Boton = 3;
         }
         if(!input(PIN_C3)) {
            Boton = 4;
         }
         restart_wdt();      // Puesta a cero del temporizador watchdog
      }while(!input(PIN_C0)||!input(PIN_C1)||!input(PIN_C2)||!input(PIN_C3));
      delay_ms(200);         // Antirebotes
     
     
      if(Paso==False) {
         if(Boton==1) {
            if(Sea==1)
               Sea=2;
            else
               Sea=1;
            Funcion = (int) read_eeprom(Sea);
         }
         if(Boton==2) {
            Funcion++;
            if(Funcion==7)
               Funcion--;
         }
         if(Boton==3) {
            Funcion--;
            if(Funcion==0)
               Funcion++;
         }
         if(Boton==4) {
            write_eeprom(Sea,Funcion);
            if(Funcion == 1)
               vspeed = 5;
            else if(Funcion == 2)
               vspeed = 50;
            else if(Funcion == 3)
               vspeed = 100;
            else if(Funcion == 4)
               vspeed = 150;
            else if(Funcion == 5)
               vspeed = 200;
            else if(Funcion == 6)
               vspeed = 250;
            if(Sea==1)
               speed1 = vspeed;
            else
               speed2 = vspeed;
         }
         Paso = True;
      }
      output_b(Display2[Funcion]);
      do{
         restart_wdt();      // Puesta a cero del temporizador watchdog
      }while(input(PIN_C0)&&input(PIN_C1)&&input(PIN_C2)&&input(PIN_C3));
      delay_ms(50);         // Antirebotes
      Paso = False;
  }

Para mi el soft esta bien, lo use varias veces y nunca tube problema solo ahora que tengo el motor.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: Rebote del pulsador
« Respuesta #9 en: 09 de Enero de 2007, 16:09:25 »
Faa....de C no cazo una!  :(

Tubiste en cuenta que "Con el pulsador en reposo, tenes un "1" en el pic, y al pulsar, se pone en "0" despues de "T". ?
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Rebote del pulsador
« Respuesta #10 en: 09 de Enero de 2007, 16:11:17 »
Que lastima.
Si eso creo que funciona bien, porque cuando pulso, cambia de numero.
El problema es que sigue subiendo o bajando segun el boton que presione.

Desconectado pikman

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 678
Re: Rebote del pulsador
« Respuesta #11 en: 09 de Enero de 2007, 23:24:31 »
Pablo, yo consegui poder poner dos pulsadores sin nada mas que un resistor de pull-UP, y no hay problemas de rebotes, claro usando la interrupcion por cambio de estado del highbyte del portB, pero creo que si te pones a estudiarlo lo vas a poder modificar para usarlo haciendo polling, y en el puerto del micro que quieras.

La ventaja de esto es que puedo leer los botones siempre, sin tenes que esperar llegar a la rutina que los lee, espero que te sea util.

Código: [Seleccionar]
RB_isr() {                          // selector de operaciones

    int cmd,status;                       



    cmd=swap(INPUT_B() & 0x30);     // carga en la variable cmd el valor del puerto
                                                     // enmascarando los bits 4 y 5 que son las botoneras
                                                     // luego hace un swap para tener el valor lsb.
    switch (cmd) {


                case 1:  // lecura del boton de comando de parada
                  if(PIN_B4 && status==5){
                   status=4;
                   }
                   break;


                case 2: // lectura de boton de comando arranque
                  if(PIN_B5 && status==4){
                  status=5;
                  }
                  break;

                default:                               
                break;
           }

     }

saludos
PikMan

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Rebote del pulsador
« Respuesta #12 en: 11 de Enero de 2007, 00:54:38 »
Pikman, muchas gracias por la ayuda.
Era un error de soft, cada vez que giraba el motor habia una instruccion (settris) que estaba mal configurada y hacia ese efecto, la saque y funciona perfecto.

Gracias por la ayuda y disculpen el error.
Un abrazo
Pablo

Desconectado Marioguillote

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: Rebote del pulsador
« Respuesta #13 en: 11 de Enero de 2007, 02:07:47 »
Felicitaciones pablo !  :)

Un error de soft, no es tan grave, a veces, cuando se está a tiempo.
Un error en hard, puede significar una quemazón de muchos $$$ !  :(

Una vez escuché por ahí que el éxito, no sólo es la sumatoria de aciertos, sino también la sumatoria de errores resueltos.

Muy bien pablo !
A seguir avanzando.

Saludos
Mario

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: Rebote del pulsador
« Respuesta #14 en: 11 de Enero de 2007, 10:06:22 »
Opino como Mario.
Muchas veces lo mas tedioso es justamente la depuracion de errores que sabemos se deben a una pavadita que es el 1% del trabajo realizado, pero que impide que el 99% del proyecto funcione.

Saludos!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert