#include <18F4550.h> //Libreria del PIC
#fuses XT,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOVREGEN,NOPBADEN //Configuracion de los fuses:
#use delay (clock=4000000) //Configuramos oscilador a 4Mhz
#include <lcd2.c> //Libreria para la lcd
#include <kbd3x4.c> //Libreria para teclado matricial
#use fast_io(A)
#use fast_io(B)
//---------- PROGRAMA PRINCIPAL ----------------
void main ()
{
char tecla; //almacena tecla pulsada
lcd_init(); //inicializa lcd
lcd_putc("Tecla pulsada:\n");
for(;;){
do{ //espera hasta que se pulse una tecla
tecla=kbd_getc();
}while(tecla==0);
printf(lcd_putc,"%c",tecla); //muestra tecla
lcd_putc("\b"); //retrocede una posicion
} //...infinito
}
#include <18F4550.h> //Libreria del PIC
#fuses XT,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOVREGEN,NOPBADEN // fuse con cristal 4Mhz
#use delay (clock=4000000) //Configuramos oscilador a 4Mhz
#define LCD_ENABLE_PIN PIN_D0 ////
#define LCD_RS_PIN PIN_D1 ////
#define LCD_RW_PIN PIN_D2 ////
#define LCD_DATA4 PIN_D4 ////
#define LCD_DATA5 PIN_D5 ////
#define LCD_DATA6 PIN_D6 ////
#define LCD_DATA7 PIN_D7
#define use_portb_kbd TRUE
#include <lcd.c> //Libreria para la lcd
#include <kbd.c> //Libreria para teclado matricial
//---------- PROGRAMA PRINCIPAL ----------------
void main ()
{
char tecla; //almacena tecla pulsada
lcd_init(); //inicializa lcd
kbd_init();
port_b_pullups(TRUE);
lcd_putc("Tecla pulsada:\n");
for(;;){
do{ //espera hasta que se pulse una tecla
tecla=kbd_getc();
}while(tecla==0);
lcd_putc(tecla); //muestra tecla
lcd_putc("\b"); //retrocede una posicion
} //...infinito
}Son dos formas de conectar el teclado según la disposición de los pines del matricial.
Has probado a conectar separadamente el lcd.
Las pantallas LCD puede recibir los datos con 4 Bits (L3-L7) o con 8 Bits (L0-L7).
¿Estás seguro de que la función que usas para enviar los datos está usando sólo 4 Bits? Quizás esté configurado para que el bus sea de 8 y por eso muestra basurilla espacial ...
Elimina el lcd del puerto B y conecta-lo al d otra vez, después conecta resistencias de pul up a las columnas, no en serie con el display como las tienes, que aunque en el proteus puede que funcione, en la vida real seguro que no.
Ten en cuenta que según el estado de los bits enviados al lcd, te variara el dato recibido por el teclado.
Hola.
Para trabajar con el teclado puedes usar cualquiera de las dos configuraciones, no hay problema, lo único que hacen es facilitar la conexión del teclado en hard para que no se crucen los hilos.
Yo he simulado con la conexión que describe el blue keypad y funciona.
Te recomiendo quitar las resistencias que tienes de 4k7 y colocar unas de PULLUP (buscalas así en el PROTEUS), también está la opción de usar las pullup's internas del puerto B.
Saludos
port_b_pullups(TRUE);Es decir, con esto, no es necesario poner las de 4k7? setup_adc_ports(NO_ANALOGS);
setup_comparator(NC_NC_NC_NC);Cortijero, ¡ojo! que el proteus no simula las resistencias de Pullup interna de los PIC (al menos no en la familia 16F).
setup_adc_ports(NO_ANALOGS);
setup_comparator(NC_NC_NC_NC);
Esas dos líneas se usan para que dichos puertos se puedan utilizar como digitales. Si no lo explicitás, dichos puertos quedan conectados a los correspondientes dispositivos analógicos.
Lo que sigo sin entender es, como dos simulaciones identicas, una sí simula los programas bien, y la otra no :(
Lo que sigo sin entender es, como dos simulaciones identicas, una sí simula los programas bien, y la otra no :(
¿Y en el proteus estás configurando la frecuencia de oscilación del PIC? Perdón por la pregunta, pero es para ir descartando cosas.
Ajamm, todo perfecto, muchisimas gracias!
Entoces, esto se debe a que mi version del proteus no simula las pullups internas?
Y para montar este circuito en una protoboard, no serian necesarias estas resistencias porque ya estan activadas las internas, o me equivoco? A ver si monto el circuito esta noche, que me hace ilu!! :-/
Siento ser tan pesado, pero me estais siendo de gran ayuda!
Hola! Soy nueva programando en c y tengo algunas dudas... a que te refieres con que no hay que modificar las librerias? Cuales? para la <lcd.c> no habria que decalrar los pines E, RS y RW estaran en otro puerto? Como se puede declarar esos pines en otro puerto? O estas usando otra libreria? tengo un problema tratando de encontrar librerias :? si estas usando otra libreiar xfa la puedes publicarla. Y un ultimo favor,si qusiera hacer el mismo programa pero con un teclado 4x4 tendria que usar otra libreria, una libreria de teclado 4x4 en c para ccs, no tiene alguna que pudieran publicar. Xfa.. estoy algo estresada con lo de encontrar librerias...
#define LCD_ENABLE_PIN PIN_A0
#define LCD_RS_PIN PIN_A1
#define LCD_RW_PIN PIN_A2
#define LCD_DATA4 PIN_B0
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7Te cuento que estuve probando el programa de biguis adaptandolo al pic 16f877a (Siempre tarabajo con este :g)) y la libreria<lcd2.c>(adjunto el programa), me compila bien, pero tengo un problema en la simulacion. Creo que esta mal la conección del LCD con el teclado ya que no me sale nada en el LCD. Segun lo que quiero hacer, necesito tener el LCD y teclado en el mismo puerto. Apreciaria cualquier sugerencia.
Los diodos son por si tienes pulsada una tecla al mismo tiempo que se manda un comando al lcd, ya que si cruzas potenciales al presionar la tecla puedes joder al pic. por eso se ponen tambien unas resistencias en serie.
Por cierto no has subido el archivo. Poooorfa :mrgreen: , quiero verlo. :-/