TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Novato! en 22 de Abril de 2013, 21:05:53

Título: Error en simulación de teclado 16x2 con PIC18F2550 (lib. KBD_C de CCS)
Publicado por: Novato! en 22 de Abril de 2013, 21:05:53
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?
Título: Re: Error en simulación de teclado 16x2 con PIC18F2550 (lib. KBD_C de CCS)
Publicado por: AngelGris 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.
Título: Re: Error en simulación de teclado 16x2 con PIC18F2550 (lib. KBD_C de CCS)
Publicado por: rivale 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
Título: Re: Error en simulación de teclado 16x2 con PIC18F2550 (lib. KBD_C de CCS)
Publicado por: rivale 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
Título: Re: Error en simulación de teclado 16x2 con PIC18F2550 (lib. KBD_C de CCS)
Publicado por: neo en 23 de Abril de 2013, 15:47:59
has probado poner las llaves de los IF y ELSE ....... { y }