Autor Tema: Error en simulación de teclado 16x2 con PIC18F2550 (lib. KBD_C de CCS)  (Leído 2132 veces)

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

Desconectado Novato!

  • PIC10
  • *
  • Mensajes: 6
Novato!
Hola buenas noches.

Tengo problemas al simular un teclado numérico 16x2 en proteus (ver Prot7.8 SP2Portable) con el PIC18F2550. He tomado como base para el programa, el ejemplo que trae el compilador PICC para lcd y teclado en la página 77 del libro del compilador en la figura 24 "LCD y el teclado compartiendo los mismos puertos". Pero en fin, al hacer el montaje en el Proteus, el puerto B1 de microcontrolador 18f2550, no me funciona o no da el uso que yo esperaba.
 ¿ qué se puede deber esto?
¿Necesito ser más específico?
GRACIAS!

Datos: Compilador:
#include <18f2550.h>//Declaro el PIC.
#use delay(clock=4000000)//Use un retardo de reloj de 4Mhz.
#define use_portb_lcd true//Definir el uso del puerto.
#define use_portb_kbd true//Definir el uso del puerto.
#include <lcd.c>//1. Definir el uso del puerto 2.Incuya el driver de la librería de la LCD.
#include <kbd.c>//1. Igual que arriba 2.Incluye el driver de la librería del teclado.

void main (void)//Programa principal.
{
char t;//1. Variable tipo "car"ácter 2.Se da una letra como nombre -cualquiera-.
int y;//1. Variable tipo entera 2.Igual que arriba.

lcd_init();//Inicializar o encender la LCD.
kbd_init();
port_b_pullups(TRUE);//pullup Resistores de protección del puerto B.
lcd_putc("\fListo...!=D\n");//Voy a escibir en el LED lo que está dentro: ej. ("José").

while (TRUE)//Repetiión de la ejecución.
{
t=kbd_getc();//Lee la tecla pulsada.
y=t-48;//Conversión numérica (la que dice qué tecla presionamos (0, a, <)).
if(t!=0)//Si la teclado es diferente.
{
if(t=='*')//Si la tecla es *
lcd_putc('\f');//Limpie a LCD.
else//Sino...
lcd_putc(t);//Imprime carácter.
delay_ms(500);//Retardo de medio segundo para ejecutar el siguiente comando.
printf(lcd_putc,"\f Car=%c",t);//Imprime carácter.
delay_ms(500);
printf(lcd_putc,"\f Code=%u",t);//Imprime valo ASCII
delay_ms(500);
printf(lcd_putc,"\f Num=%u",y);//Imprime valor numérico.
delay_ms(500);
lcd_putc("\fListo...!=D\n");
}}}

El problema es el siguiente, al pulsar cualquiera de las teclas debería notificarme:
1. El número pulsado, 2. El valor ASCII y un tercero.
Pero el B1 no funciona y fue algo inesperado, no me esperaba eso, ¿es normal?
« Última modificación: 23 de Abril de 2013, 14:56:56 por Novato! »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Error en simulación de teclado 16x2 con PIC18F2550 (lib. KBD_C de CCS)
« Respuesta #1 en: 22 de Abril de 2013, 22:02:14 »
  Tendrías que subir tu programa y el esquema (preferentemente una imagen del mismo, para que no haya que bajar y simular el archivo), para que podamos intentar ayudarte de una mejor manera.
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: Error en simulación de teclado 16x2 con PIC18F2550 (lib. KBD_C de CCS)
« Respuesta #2 en: 23 de Abril de 2013, 13:54:01 »
Novato!

#include <18f2550.h>
#fuses xt,nowdt,nolvp,nobrownout
#use delay (clock=8000000)//\n
#define use_portb_lcd true
#include <lcd.c>
int x;
void main (void)
{
lcd_init( );
lcd_gotoxy(1,1);
lcd_putc("HOLA\nCHAO");
}




ese es tu programa?, si ese es el caso necesitas poner un ciclo infinito al final ya que asi como lo tienes tu micro se resetea despues de mprimir en la lcd
"Nada es imposible, no si puedes imaginarlo"

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Error en simulación de teclado 16x2 con PIC18F2550 (lib. KBD_C de CCS)
« Respuesta #3 en: 23 de Abril de 2013, 15:41:39 »
algo que se me ocurre es que puede que tus pines del puerto B estén como analógicos, intenta configurar el ADC y decir que todos son digitales
"Nada es imposible, no si puedes imaginarlo"

Desconectado neo

  • PIC10
  • *
  • Mensajes: 34
Re: Error en simulación de teclado 16x2 con PIC18F2550 (lib. KBD_C de CCS)
« Respuesta #4 en: 23 de Abril de 2013, 15:47:59 »
has probado poner las llaves de los IF y ELSE ....... { y }