Autor Tema: Rebote de contactos  (Leído 3241 veces)

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

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Rebote de contactos
« en: 05 de Marzo de 2006, 14:14:00 »
Uso un teclado 4x4 con solo un interruptor de cierre en cada tecla, es decir que no es conmutador.
Tengo problema de rebote de contactos al introducir datos.
La libreria de teclado que uso es la siguiente

|code|
char const KEYS[4][4] = {{"-","0",".","E"},
                         {"1","2","3","C"},
                         {"4","5","6","B"},
                         {"7","8","9","A"}};


// Caracteres ASCII asociados a cada tecla:


#byte kbd_port_b = 6


char kbd_getc()
{
  char tecla=0;
  int f,c,t,i,j;

  port_b_pullups(true);
  set_tris_b(0b00001111); // RB7-RB4 salidas, RB3-RB0 entradas

  for(f=0x10, i=0; i<4; f<<=1, i++)
  {
    for(c=0x01, j=0; j<4; c<<=1, j++)
    {
      kbd_port_b = ~f;
      delay_cycles(10);
      t = kbd_port_b & 0x0F;
      t = ~(t | 0xF0);
      if(t == c)
      {
        delay_ms(100);
        tecla=KEYS[j];
        while(t==c)
        {
          restart_wdt();
          t = kbd_port_b & 0x0F;
          t = ~(t | 0xF0);
        }
        break;
      }
    }
    if(tecla)
      break;
  }
  port_b_pullups(false);
  return tecla;
}
|endcode|

¿Como podria modificarla para evitar el rebote.?
Subi los tiempos que estaban en 20 ms a 100 ms pero sigue igual
 Muchas gracias

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Rebote de contactos
« Respuesta #1 en: 06 de Marzo de 2006, 00:01:00 »
Si superan los 100ms no son rebotes, deben ser cañonazos.
Pienso que el problema vendrá de otro sitio, pero para descartar que sean rebotes, podrías poner un delay_ms bestial, como 2000 por ejemplo.

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
RE: Rebote de contactos
« Respuesta #2 en: 06 de Marzo de 2006, 13:24:00 »
HE tenido que subir de los 200 ms para que desaparezcan.
Es un teclado hecho con las teclas numericas viejas de un teclado de PC, es comodo porque es grande.
Gracias asi parece funcionar bien

Conectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
RE: Rebote de contactos
« Respuesta #3 en: 06 de Marzo de 2006, 14:29:00 »
¡¡¡¡  Qué barbaridad ... 200 ms es toda una vida !!!

Hace unos meses hice un Analisis de rebotes en Botones y Pulsadores con un
teclado matricial 4x4 (como mi Lada) monitorizándolo mediante el puerto serie
del PC y me salían tiempos que podía expresar en microsegundos :





y que terminaba analizándolo así:

 Fijaos que he marcado los valores obtenidos sobre cada uno de los flancos de subida.
Así tenemos que entre cada uno de ellos hay una diferencia de valores de TIMER0 de
168 - 89 = 79, 254 - 168 = 86, 2 + 90 = 92 y 218 - 90 = 128. Esto corresponde con
tiempos de 158 microsegundos, 172 microsegundos, 184 microsegundos y 256
microsegundos respectivamente.



Dale un vistazo por si te interesa.

Un saludo.

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania


 

anything