Autor Tema: Teclado por Interrupcion de pocher  (Leído 1467 veces)

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

Desconectado jdaniels

  • PIC10
  • *
  • Mensajes: 49
Teclado por Interrupcion de pocher
« en: 09 de Julio de 2007, 23:19:06 »
Saludos he implementado esta rutina que puso el compañero pocher en este Tema de redpic al final puden ver la rutina del teclado por interrupción, la cosa es que la rutina trabaja bien pero no del todo:

Código: [Seleccionar]
#INT_RB
void TECLADO_INTERRUPT()
{
delay_ms(50);
if(!RB4 || !RB5 || !RB6 || !RB7)
{
k= kbd_getc();
RB0=RB1=RB2=RB3=0;   
}
}
asi como esta trabaja bien pero yo queria que dentro de la interrupcion me pusiera en el lcd la tecla presionada con un lcd_putc(k) asi de esta manera:

Código: [Seleccionar]
#INT_RB
TECLADO_INTERRUPT()
{
delay_ms(50);
if(!RB4 || !RB5 || !RB6 || !RB7)
{
k= kbd_getc();
lcd_putc(k);
RB0=RB1=RB2=RB3=0;   
}
}

la cosa es que no trabaja, si no después de presionar 24 veces cualquier tecla es decir a la 25 escribe la tecla que se presiono siempre es constante a la 25, escribí el comando putc(k) para ver si entraba en la interrupcion y efectivo lo hace entra manda la tecla por rs232 pero no la escribe en el lcd alguien le ha pasado lo mismo? en el tema pocher decia que no lo habia probado en fisico solo en proteus, no es nada que tenga en void main ya que solo inicio el lcd y habilito la interrupcion, pongo las pullups y esa cosas

Desconectado Trev_11

  • PIC10
  • *
  • Mensajes: 44
Re: Teclado por Interrupcion de pocher
« Respuesta #1 en: 16 de Septiembre de 2007, 19:58:32 »
Hola,la libreria incorporada KBD.C es una cagada a mi tampoco me funciona no me dio la gana estudiarla asi ke me hice una funcion para escanear un teclado de 4x3,creo ke por ahi pasa el problema,ademas en el if yo usaria un | en vez de ||,y mas bien usaria un printf(lcd_putc,"%c",tecla) dentro de la misma funcion o printf(lcd_putc,"%c",escan_teclado()) aca dejo el código,chau

char escan_teclado()
{
     int tecla;
     int i=0;
     boolean teclapulsada=FALSE;
   
     int vect[5]={0x0E,0x0D,0x0B,0x07,0};
     char matriz_teclado[4][3]={'1','2','3','4','5','6','7','8','9','*','0','#'};

     while(i<4|teclapulsada==FALSE)
          {
          portb=vect;
          if(!input(PIN_B4))
                {
                 tecla=0;
                 tecla=matriz_teclado[tecla];
                 teclapulsada=TRUE;
                }
          if(!input(PIN_B5))
                {
                 tecla=1;
                 tecla=matriz_teclado[tecla];
                 teclapulsada=TRUE;
                }
          if(!input(PIN_B6))
                {
                 tecla=2;
                 tecla=matriz_teclado[tecla];
                 teclapulsada=TRUE;
                }
          i++;     
          }
     teclapulsada=FALSE;     
     return(tecla);
}   

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Teclado por Interrupcion de pocher
« Respuesta #2 en: 17 de Septiembre de 2007, 12:56:13 »
Hola jdaniels.

¿Probaste físicamente la rutina que escribí? Es por saber si funciona.

Un saludo

Desconectado jdaniels

  • PIC10
  • *
  • Mensajes: 49
Re: Teclado por Interrupcion de pocher
« Respuesta #3 en: 17 de Septiembre de 2007, 17:04:47 »
Sip la rutina si funciona, solo cuando le hice esos pequeños cambios no me hacia caso, a lo mejor solo reconoce a quien la diseño  :D, pero si pocher la rutina trabaja excelente