Autor Tema: Problemas de novato en el tema de teclado 3x4  (Leído 5332 veces)

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

Desconectado mocopo

  • PIC10
  • *
  • Mensajes: 4
Problemas de novato en el tema de teclado 3x4
« en: 20 de Febrero de 2014, 16:48:04 »
Muy buenas,

Como todo novatos, llevo varias horas peleandome con este programilla bien sencillo. Solo ha de leer el valor que pulso en un teclado 3x4 y encender un led si pulso "4" y apagarlo si pulso "6". Pero no hay manera, a ver si podeis ayudarme en mi "iniciación".

Os copio el codigo con el que estoy trabajando

Código: [Seleccionar]
#include <Teclado.h>
#define use_portb_kbd TRUE
#include <KBD.C>
#use standard_io(C)


void main()
{
   char k;
 
   kbd_init();
   port_b_pullups(TRUE);
   
   while(TRUE)
   {
     k= kbd_getc();
      if(k == 4)
     
       output_high(pin_c1);
       
      else
      {
         if(k == 6)
         
          output_low(pin_c1);
         
      }   
    }
}

Teclado.h

Código: [Seleccionar]
#include <18F4450.h>
#device ADC=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)

#use delay(crystal=24MHz)


Saludos y muchas gracias de antemano. :oops:

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Problemas de novato en el tema de teclado 3x4
« Respuesta #1 en: 20 de Febrero de 2014, 18:03:34 »
Hola mocopo, si no me equivoco, que podria ser porque me queda mucho por aprender, en los includes debes definir la libreria <KBD.C> antes del #define use_portb_kbd TRUE.

Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problemas de novato en el tema de teclado 3x4
« Respuesta #2 en: 20 de Febrero de 2014, 18:27:22 »
Hola mocopo, si no me equivoco, que podria ser porque me queda mucho por aprender, en los includes debes definir la libreria <KBD.C> antes del #define use_portb_kbd TRUE.



Disculpa que te corrija Miguel, pero la libreria checa si ya esta definido el puerto a usar, si no esta definido entonces usa uno por default.


mocopo, un error que veo en tu código es que no especificas el cristal a usar, también estas activando el WDT y no lo estas reiniciando, puede que tu programa se reinicie constantemente y nunca llegue a checar tu condición
"Nada es imposible, no si puedes imaginarlo"

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Problemas de novato en el tema de teclado 3x4
« Respuesta #3 en: 20 de Febrero de 2014, 19:19:47 »
Gracias por la aclaración rivale, referente al cristal ¿No lo esta especificando dentro del #include <Teclado.h>?
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problemas de novato en el tema de teclado 3x4
« Respuesta #4 en: 20 de Febrero de 2014, 19:28:24 »
Gracias por la aclaración rivale, referente al cristal ¿No lo esta especificando dentro del #include <Teclado.h>?

esta especificando la frecuencia, pero no tiene el #fuse asociado, no se si tome el interno o busque algún externo, puede que eso cause problemas
"Nada es imposible, no si puedes imaginarlo"

Desconectado mocopo

  • PIC10
  • *
  • Mensajes: 4
Re: Problemas de novato en el tema de teclado 3x4
« Respuesta #5 en: 21 de Febrero de 2014, 02:25:41 »
Antes de nada, muchas gracias por responder.

Sobre lo del cristal, no lo tengo especificado ya que estoy simulando con Proteus y no creo que afecte(aunque nunca se sabe), a parte de eso no hay ningun error mas en el codigo? Esta todo lo demas bien?Asi deberia funcionar? Le he dado mil y una vueltas en si me dejo algo y no encuentro el que ni el problema.

Saludos!

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problemas de novato en el tema de teclado 3x4
« Respuesta #6 en: 21 de Febrero de 2014, 11:18:44 »
tienes razón, en proteus no deberia afetar lo del cristal

nunca he usado la libreria de ccs para manejar el teclado, no se si se detenga el corrimiento cuando presionas una tecla.

haz intentado correrlo paso a paso en proteus?
"Nada es imposible, no si puedes imaginarlo"

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problemas de novato en el tema de teclado 3x4
« Respuesta #7 en: 21 de Febrero de 2014, 11:23:57 »
otra cosa que podría afectar es que estas activando todas la pullup del puerto B, para el uso del teclado solo se activan 4, recuerda que la mitad del puerto es entrada y la otra mitad son salidas
"Nada es imposible, no si puedes imaginarlo"

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problemas de novato en el tema de teclado 3x4
« Respuesta #8 en: 21 de Febrero de 2014, 12:26:08 »
  Hay que tener en cuenta el ADC. Tal vez algún pin queda configurado como entrada, pero analógica en lugar de digital y por ello los problemas.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado mocopo

  • PIC10
  • *
  • Mensajes: 4
Re: Problemas de novato en el tema de teclado 3x4
« Respuesta #9 en: 23 de Febrero de 2014, 13:24:02 »
Muy buenas,

Os va as sonar a broma, pero he modificado el #include por el del 16F877, he modificado la simulación con proteus cambiando el 18F4550 por el 16F877 y con el mismo código...tachan!! A funcionado, me parece a mi que es algo de CCS con el 18f4550 y el keypad 3x4 o en su caso del proteus.


Saludos! En caso de que se os ocurra una solución, no dejéis de ponerla. 

Desconectado mocopo

  • PIC10
  • *
  • Mensajes: 4
Re: Problemas de novato en el tema de teclado 3x4
« Respuesta #10 en: 03 de Marzo de 2014, 07:45:00 »
Muy buenas compañeros,

Comentar que he conseguido hacer funcionar el teclado 3x4 con un 18F4550 después de varios días peleándome. Finalmente me centre en mostrar por pantalla la tecla pulsada.

El problema después de muchas pruebas, reside en el proteus. Para poder tener 100% funcional el keypad 3x4 hay que realizar lo en Proteus con botones normales realizando por ti mismo las conexiones para sacar la matriz de 3x4, porque con el modulo keypad 3x4 del Proteus no funciona y ademas hay que insertar resistencias externas de pull-ups en el puerto B, ya que la función "port_b_pullups(TRUE)" no funciona bien en Proteus con 18F.



Ahora me estoy peleando para que me haga caso con el IF, de si pulso la tecla 4 se ponga en high el PIN C1 y cuando pulse la tecla 6 se ponga en low. En este ultimo aspecto no consigo adelantar, he quedado estancado.

He probado poniendo:

Código: [Seleccionar]
while(TRUE)
   {
     k= kbd_getc();
      if(k == 4)
     
       output_high(pin_c1);
       
      else
      {
         if(k == 6)
         
          output_low(pin_c1);
         
      }   
    }

O poner entre comillas los valores por ser CHAR, tal que así:

Código: [Seleccionar]
while(TRUE)
   {
     k= kbd_getc();
      if(k == '4')
     
       output_high(pin_c1);
       
      else
      {
         if(k == '6')
         
          output_low(pin_c1);
         
      }   
    }

Pero no hay forma, a alguien se le ocurre cual puede ser el problema? Hay que poner comillas dobles cuando se trabaja con CHAR ""??

Espero que la solución dada para el tema del teclado sea de utilidad para muchos, ya que después de navegar mucho por internet veo que es un problema muy extendido y del cual no había encontrado solución.

Saludos y gracias de antemano.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problemas de novato en el tema de teclado 3x4
« Respuesta #11 en: 03 de Marzo de 2014, 11:05:45 »
  ¿Las rutinas de teclado que estás utilizando, devuelven el valor ascii del caracter? Ya que en tus "if" evalúas si es igual al caracter 4 o 6.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problemas de novato en el tema de teclado 3x4
« Respuesta #12 en: 03 de Marzo de 2014, 11:33:10 »
esa libreria te regresa la tecla presionada en caracter, esta bien como lo tienes definido, con comillas simples ('4')

solo verifica que estes presionando la tecla correspondiente, de acuerdo a la librería este es el orden

// Keypad layout:
char const KEYS[4][3] = {{'1','2','3'},
                         {'4','5','6'},
                         {'7','8','9'},
                         {'*','0','#'}};
"Nada es imposible, no si puedes imaginarlo"

Desconectado gardelitock

  • PIC10
  • *
  • Mensajes: 6
Re: Problemas de novato en el tema de teclado 3x4
« Respuesta #13 en: 09 de Marzo de 2014, 12:52:25 »
Hola, creo que encontré la solución, hice un programa parecido. Apretando 1, prende el led y con cualquier otro lo apaga, es similar a lo que pensaste;

void main()
{
char key=0;
kbd_init();  // inicia la func de teclado                   
port_b_pullups(true);
output_a(0x00);                //Limpia el puerto C
   set_tris_a(0x00);           

while(1)
   {
   key=kbd_getc();
   if(key!=0)
   {
   if(key=='1')
      output_high(PIN_A1);
      else
      output_low(PIN_A1);
      }}}

Cuando declaras un char, le da el valor cero definido o algo asi. Ese era tu problema.
Avisá si te sirvió, tambien soy novato, hace dos semanas empece con esto.
Saludos!
Miedo tengo que esta vida un día, venga a cobrarse lo buena que fue!


 

anything