Autor Tema: funcionamiento de un teclado????  (Leído 2279 veces)

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

Desconectado Sebascl

  • PIC12
  • **
  • Mensajes: 73
funcionamiento de un teclado????
« en: 08 de Octubre de 2005, 18:42:00 »
hola, alguien me podria explicar el funcionamiento de un teclado ya que estoy tratando de hacer uno 4*4 y no se como hacerlo funcionar en el ccs el teclado lo tengo listo pero mi mayo problema es como saver que tecla precitran ami se me ocurrio hacerlo asi:

#include <16F877A.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT
#byte port_b = 06
#use rs232(baud=9600,xmit=PIN_A0,rcv=PIN_A1,invert)

int i;

tecla()
{
   i=0;
   set_tris_b(0b00011111);
   port_b_pullups(true);
   i=port_b;
   port_b_pullups(false);
   printf("%U",i);

}

void main()
{
   while (TRUE)
   {
      tecla();
   }
}

solo para saver que pines tienen tencion de entrada pero no em funciona.

no entiendo como hacerlo en el ccs y en los ejemplos que encontre en el foro no me funcionan, y ademas despues de ento como puedo gravbar los dijitos pulsados en un vertor x[5] para compararlo con otro.

un saludo y gracias.

Desconectado omix

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 244
RE: funcionamiento de un teclado????
« Respuesta #1 en: 09 de Octubre de 2005, 03:18:00 »
Hola, para leer de un teclado 4x4, yo lo que suelo hacer es coloco unas resistencias pulldown en las columnas y mediante las filas hago un barrido para comprobar que tecla se pulsó, es decir, activo una fila y miro si hay alguna columna activa, si es asi con el número de fila y columna indexo una matrix de 4x4 donde tengo los valores asignados para cada tecla y de esa forma se obtiene la tecla pulsada. El proceso que he descrito tambien se puede hacer al contrario, es decir, haciendo el barrido por columnas o tambien usando resistencias pullup, eso ya a gusto de cada uno.

Un saludo.

PD: El CCS creo recordar que tiene una libreria para manejar teclados 4x4, creo que se llama KBD.c. De todas formas si tienes problemas yo tengo una libreria para un teclado 4x4, la unica pega es que la tengo hecha para el compilador HI-TECH que es el que uso.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: funcionamiento de un teclado????
« Respuesta #2 en: 09 de Octubre de 2005, 12:31:00 »
Una buena manera de ahorrar líneas de entrada al micro es, en lugar de dedicar una línea exclusiva por cada tecla utilizada, emplear un teclado matricial. El teclado matricial se caracteriza por estar cada una de las teclas conectada a dos líneas (una columna y una fila) que la identifican. De este modo el número de teclas que pueden conectarse es el producto de filas por el de columnas.



La técnica de programación requiere tanto de entradas como de salidas. Las filas están conectadas a las patillas de salida y las columnas a las de entrada.

Se comienza el testeo colocando a ‘0’ la primera fila, y a ‘1’ las restantes. Si la tecla pulsada estuviese en la columna ‘0’, ésta colocaría en su línea un ‘0’ lógico. Bastará con hacer un muestreo de las columnas, buscando el 0, para saber la tecla exacta que fue pulsada en la matriz.

Si no es pulsada ninguna tecla en una fila, las entradas se encuentran en estado flotante, razón por la que son necesarias las resistencias de polarización internas, que mantienen las entradas a nivel alto.

En nuestro caso, las resistencias están a tierra. Por lo tanto, lo que se busca es un UNO en las lìneas de entrada.

Desconectado Sebascl

  • PIC12
  • **
  • Mensajes: 73
RE: funcionamiento de un teclado????
« Respuesta #3 en: 09 de Octubre de 2005, 19:02:00 »
hola y gracias por respuestas, si no fuera mucha la molestia me podrian poner un ejemplo en CCS y las conecciones del teclado a y como elimino los rebotes en las teclas??????



saludos...RebotadoRebotado

Desconectado elesep

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 42
RE: funcionamiento de un teclado????
« Respuesta #4 en: 11 de Octubre de 2005, 11:46:00 »

Hola, porque no ocupas la libreria del CCS es KBD.c , con esta libreria puedes saber cual tecla pulsaste, en tu propgrama rienes que inicialisarla, yo he ocupado esa libreria y la tecla pulsada la muestro por un LCD y funciona de lo mas bien, ademas el teclado lo conecto al puerto B, y activo las pull-up y asi no tienes que colocar +5V, externos al teclado. prueba con eso y suerte.

Desconectado Sebascl

  • PIC12
  • **
  • Mensajes: 73
RE: funcionamiento de un teclado????
« Respuesta #5 en: 11 de Octubre de 2005, 22:24:00 »
hola elesep  e tratado de usar el kdb.c pero nose como configurarlo no entiendo nada de lo que sale ay si alguien me puede ayudar por favor.




saludos...

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: funcionamiento de un teclado????
« Respuesta #6 en: 13 de Octubre de 2005, 05:03:00 »
Ke tal!!! en el post de ejemplitos en c hay programas de manejo del teclado y librerias modificadas para distintos teclados echale un vistazo!!!:
http://miarroba.com/foros/ver.php?foroid=46840&temaid=4061462
Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado kruskal

  • PIC16
  • ***
  • Mensajes: 108
RE: funcionamiento de un teclado????
« Respuesta #7 en: 13 de Octubre de 2005, 08:23:00 »
Esta libreria la kbd2.c me funciona muy bien y para mi es mas sencilla y demas facil de entender que la de CCS.

Saludos



 |  (c) Microsystems Engineering (Bilbao)    |
*-------------------------------------------*/

// Funciones para la gestión del teclado de la Trainer PLUS.

// char kbd_getc()   Devuelve el código ASCII de la tecla pulsada.
//         Si no se pulsó ninguna, devuelve 0.


// Conexiones del teclado.
/*
            RB0 RB1 RB2 RB3
             ^   ^   ^   ^
             |   |   |   |
           |---|---|---|---|
  RB4 ---> | 1 | 2 | 3 | F |
           |---|---|---|---|
  RB5 ---> | 4 | 5 | 6 | E |
           |---|---|---|---|
  RB6 ---> | 7 | 8 | 9 | D |
           |---|---|---|---|
  RB7 ---> | A | 0 | B | C |
           |---|---|---|---|
*/

// Caracteres ASCII asociados a cada tecla:
char const KEYS[4][4] = {{"1","2","3","F"},
                         {"4","5","6","E"},
                         {"7","8","9","D"},
                         {"A","0","B","C"}};

#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(1);
      t = kbd_port_b & 0x0F;
      t = ~(t | 0xF0);
      if(t == c)
      {
        delay_ms(20);
        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;
}

Desconectado Sebascl

  • PIC12
  • **
  • Mensajes: 73
RE: funcionamiento de un teclado????
« Respuesta #8 en: 15 de Octubre de 2005, 12:58:00 »
hola vszener y kruskal estan muy buenos los ejemplos y la kbd2.c esta bien facil de usar gracias.




saludos...RebotadoRebotadoRebotadoRebotadoRebotado


 

anything