Autor Tema: Problema 18F4550 + lcd + teclado  (Leído 25637 veces)

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

Desconectado ivanbv4

  • PIC10
  • *
  • Mensajes: 21
Re: Problema 18F4550 + lcd + teclado
« Respuesta #15 en: 28 de Febrero de 2011, 20:47:18 »
Hola a todos gracias por sus respuestas. Les adjunto el código del programa que es realmente breve. La idea es que tanto el teclado como el display funcionen en el mismo puerto B. Les agradeceria cualquier sugerencia o aporte

#include <18F4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock= 20000000)       
#define use_portb_lcd TRUE
#define use_portb_kbd TRUE
#include <lcd.c>
#include <kbd.c>

void main()
 {
   char k;
   int  x;
   lcd_init();
   kbd_init();
   port_b_pullups(TRUE);
   lcd_putc("\fListo...\n");
                                   
   while (TRUE)
    {
      k=kbd_getc();
      x=k-48;                             //Conversión numérica
      if(k!=0)
       {
        if(k=='*') 
          lcd_putc('\f');
        else
         { lcd_putc(k);             //Imprime carácter
           delay_ms(500);
           printf(lcd_putc,"\f Car=%c",k); //Imprime carácter
           delay_ms(500);
           printf(lcd_putc,"\f Car=%u",k); //Imprime valor ASCII
           delay_ms(500);
           printf(lcd_putc,"\f Num=%u",x); //Imprime valor numérico
           delay_ms(500);
           lcd_putc("\fListo...\n");
         } 
      }
   }
 }

Desconectado rodrigo_control2009

  • PIC12
  • **
  • Mensajes: 54
    • Blog  de la  Orden del  temple
Re: Problema 18F4550 + lcd + teclado
« Respuesta #16 en: 28 de Febrero de 2011, 21:16:41 »
Lo  voy a simular y ver q  pasa.
A simple vista  segun la imagen  solo  deberia  funcionar el teclado, ya  q por ej  las lineas q bajan del lcd  no  se conectan con las q van al pic y  las lineas D4 y D5 llegan al mismo pin 38.
Voy a probar  y  t cuento
“El hombre ideal, sería persa de origen, árabe de religión, iraquí por cultura, hebreo por experiencia, cristiano por conducta, hindú por perspicacia, sufí por su estilo de vida, angélico por su moral y divino por sus ideas y conocimiento, destinado a la eternidad”

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Problema 18F4550 + lcd + teclado
« Respuesta #17 en: 01 de Marzo de 2011, 01:05:13 »
y será buena idea conectar la lcd y el teclado a los mismos pines?

¿cómo sabe el pic cuál nivel lógico corresponde a cada quien?

asi como está ese circuito, yo no me atrevería a conectarlo en físico

Además faltan las pull-ups externas (mas de una vez se ha dicho en el foro que no es aconsejable usar las pull-ups internas para ese micro)

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado ivanbv4

  • PIC10
  • *
  • Mensajes: 21
Re: Problema 18F4550 + lcd + teclado
« Respuesta #18 en: 01 de Marzo de 2011, 09:07:24 »
Gracias por su pronta respuesta muchachos. rodrigo_control2009 tenias razón hay un error en el conexionado, corrigiendo esto el lcd me muestra el cartel de "listo..." pero no muestra nada cuando presiono las teclas.

PalitroqueZ sobre el conexionado de ambos perifericos al mismo puerto yo también tenia mis dudas hasta que vi un ejemplo funcionando en un pic de menor gama y me parecio una buena forma de ahorrar pines, en mi caso eso seria de mucha ayuda.

Desconectado rodrigo_control2009

  • PIC12
  • **
  • Mensajes: 54
    • Blog  de la  Orden del  temple
Re: Problema 18F4550 + lcd + teclado
« Respuesta #19 en: 01 de Marzo de 2011, 16:17:30 »
Lo simule y  funciona mal  aunq  imprime en lcd y lee  teclado pq  borra  el lcd al presionar '*'.
El ej q usas al parecer  es del libro Compilador Ccs y Simulacion Proteus hay q tener en cuenta  la mayoria de los ej son para  los pic 16f salvo los con usb.
Ademas hay q tener en cuenta q los registros de los 16f son distintos al del 18f  por ej  el portb del  16f877a  es  el  reg 0x06  y del 18f4550  es  reg  0x81, y creo q la lib  lcd.c hace uso de esos registros, depende de la version del compilador q se use.

Use el compilador CCS 4.023 y4.114  ambos m dan los mismos  resultados, al habiltar  las pullups del puerto b no imprime  y se qdaba pegado en la instruccion imprime PRUEBA  (para eso  uso el led del port C0  como bandera para ir viendo q lineas de cod se ejectutan, simple pero practico), luego puse las pullups de 4,7K e imprime y lee, pero como ya mencione lo hace mal.
Otro detalle  es el uso del retardo despues de la instruccion imprime PRUEBA  se  qdaba  pegado  cuando no lo usaba.
el  comando borrar  lcd me funciono  asi  "\f" no  '\f', tb probocaba q se colgara.

Creo q es posible  el uso del mismo puerto, ya q  existen en fisico y la simulacion lo permite  . Habra  q estudiar mas las lib lcd.c y kbd.c para q sean compatibles con el 18f4550.

Lo positivo es q va mejorando

#include <18f4550.h>
#fuses hs,NOWDT,NOPROTECT,NOLVP
#use delay(clock= 20000000)       
#define use_portb_lcd (TRUE)
#define use_portb_kbd (TRUE)
#include <lcd.c>
#include <kbd.c>

void main()
 { char k;
   int  x;
   lcd_init();
   kbd_init();
   //port_b_pullups(true);
   printf(lcd_putc,"\f PRUEBA \n");
    delay_ms(300);
                                 
 while (TRUE)
    {lcd_putc("\f");
     output_high(pin_c0);
     k=kbd_getc();
     output_low(pin_c0);
     x=k-48;                             //Conversión numérica
     
      if(k!=0x00)
       {
        if(k=='*') lcd_putc("\f");
         
        else
         { lcd_putc(k);             //Imprime carácter
           delay_ms(300);
           
           printf(lcd_putc,"\f Car=%c",k); //Imprime carácter
           delay_ms(300);
         
           printf(lcd_putc,"\f Car=%u",k); //Imprime valor ASCII
           delay_ms(300);
         
           printf(lcd_putc,"\f Num=%u",x); //Imprime valor numérico
           delay_ms(300);
           
           lcd_putc("\f Listo...\n");
         }
         
      }
     
   }
 }
“El hombre ideal, sería persa de origen, árabe de religión, iraquí por cultura, hebreo por experiencia, cristiano por conducta, hindú por perspicacia, sufí por su estilo de vida, angélico por su moral y divino por sus ideas y conocimiento, destinado a la eternidad”

Desconectado ivanbv4

  • PIC10
  • *
  • Mensajes: 21
Re: Problema 18F4550 + lcd + teclado
« Respuesta #20 en: 02 de Marzo de 2011, 20:15:35 »
Hola rodrigo_control2009  gracias por tu nuevo aporte. Te hago una consulta ¿las resistencias de pull up no deberian estar solo en las columnas como dice la kbd.c?  Luego de varias pruebas tuve un minimo avanze, logre que fundionara correctamente pero solo lo hace hasta 5 pulsaciones luego se tilda. Seguire intentando...
Saludos

Desconectado rodrigo_control2009

  • PIC12
  • **
  • Mensajes: 54
    • Blog  de la  Orden del  temple
Re: Problema 18F4550 + lcd + teclado
« Respuesta #21 en: 03 de Marzo de 2011, 15:11:39 »
Tienes  toda  la  razon sobre  las pullups.
Y cuales  han  sido  las mejoras  q  has  efectuado,  seria  bueno  q  las  compartas  para  q mas personas  nos  beneficiemos.
“El hombre ideal, sería persa de origen, árabe de religión, iraquí por cultura, hebreo por experiencia, cristiano por conducta, hindú por perspicacia, sufí por su estilo de vida, angélico por su moral y divino por sus ideas y conocimiento, destinado a la eternidad”

Desconectado ivanbv4

  • PIC10
  • *
  • Mensajes: 21
Re: Problema 18F4550 + lcd + teclado
« Respuesta #22 en: 04 de Marzo de 2011, 12:12:04 »
Hola muchachos finalmente pude darle solución al problema. Recordemos que lo que buscaba era poder conectar en el mismo puerto el lcd y el teclado matricial 4*3 para ahorrar pines en un 18F4550.
Una de las cosas a tener en cuenta es que en ambas bibliotecas kdb.c y lcd.c se debe tener habilitado el puerto b (que es el que elegi, podria ser el d también). Como mas arriba se dijo en este tema, no son muy confiables las pull-ups de este integrado por lo que conecte resistencias externas, tanto a las filas como a las columnas, aunque en la kbd solo dice que es necesario para las columnas. El lcd tiene dos pines que generan conflicto, por lo que solo ellos deben ser conectados en otro puerto, estos son RS y RW, que en mi caso les di nueva ubicación en D6 y D7. El Enable continua en el pin b0 y D4-D7(del lcd) en los correspondientes pines como la biblioteca lo indica.
A continuación adjunto el código y una imagen del esquema en proteus. Gracias por los aportes que hicieron y espero que a alguien le sea de utilidad.
Saludos

Desconectado fvergniaud

  • PIC10
  • *
  • Mensajes: 16
Re: Problema 18F4550 + lcd + teclado
« Respuesta #23 en: 27 de Mayo de 2011, 02:38:36 »
ivanbv4 pordes subir el esquematico, hice el mio que te atacho pero no funciono. Gracias :?

Desconectado ivanbv4

  • PIC10
  • *
  • Mensajes: 21
Re: Problema 18F4550 + lcd + teclado
« Respuesta #24 en: 27 de Mayo de 2011, 09:12:55 »
Hola fvergniaud, vi tu esquematico y hay algunas lineas del display que olvidaste conectar, proba con eso che. En el .rar que subi en mi comentario anterior hay una imagen del esquematico y el .c también esta incluido. Te incluyo el dsn que yo use. Espero te sirva
saludos

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1099
Re: Problema 18F4550 + lcd + teclado
« Respuesta #25 en: 21 de Agosto de 2011, 17:18:00 »
Aunque el hilo viene de viejo y las ultimas aportaciones tambien tienen su tiempo, espero me echeis una mano.
Necesito justamente poner el teclado y el ldc en el mismo puerto del 4550 o 4523, pero segun veo nadie lo ha conseguido. El problema es que tengo las lineas de I/O justas, para solo disponer de 8 lineas, o sea un puerto para el teclado y ldc.
En mi caso necesito 16 entradas y 12 salidas, lo que suman 28 pines, mas los 8 del teclado/lcd total 36. Por ello ademas debere utilizar el oscilador interno del pic.
¿Alguien me puede ayudar?. Agradecere cualquier aporte.

Saludos.

Desconectado ivanbv4

  • PIC10
  • *
  • Mensajes: 21
Re: Problema 18F4550 + lcd + teclado
« Respuesta #26 en: 22 de Agosto de 2011, 02:40:53 »
 Hola AcoranTf, lamento no poder dar solución a tu problema. Yo también pense en hacer lo mismo que vos planteas pero no lo logre por ello opte por la solucion que di arriba usando dos pines más y eso que estuve bastante buscando la forma. asiq si lo logras seria un gran aporte para el hilo. exitos

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1099
Re: Problema 18F4550 + lcd + teclado
« Respuesta #27 en: 23 de Agosto de 2011, 18:28:00 »
Gracias Ivan, a ver si le echo un ratito y hago algunas pruebas. Ya comentare resultados. Si no lo consigo, mi solucion sera utilizar buffers 74HC573 para ampliar las entradas, aunque eso complica un poco la programacion.

Saludos.

Desconectado bichicome07

  • PIC10
  • *
  • Mensajes: 1
Re: Problema 18F4550 + lcd + teclado
« Respuesta #28 en: 14 de Diciembre de 2011, 22:09:22 »
HOLA A TODOS,  soy nuevo en el foro y no se si estoy publicando en el lugar correcto (mil disculpas). Soy durísimo con este tema y quizás alguno me pueda ayudar. Tengo que simular un teclado y display de un celular, pero no logro siquiera publicar en el display un mensaje de saludo.  El profesor nos pide que no se compartan pines, por lo que debo usar diferentes para el teclado y display. Les paso el codigo que he compilado con un rejunte de los que he visto en este foro; esta incompleto y no tiene antirebote, pero por el momento solo quiero ver ALGO en el display. Les adjunto el proteus, si alguien puede ayudar a esta piedra dura, se los voy a agradecer. saludos


#include <TP final teclado-display.h>
#include <stdio.h>
#fuses NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,NOPUT,NOMCLR,NODEBUG,HS,NOPBADEN

#define use_porta_lcd TRUE
#define use_portd_kbd TRUE  //esto define al puerto d para ser usado por el teclado

#include <lcd.c>
#include <kbd.c>

#use delay(clock= 4000000)

#define LCD_ENABLE_PIN PIN_A5
#define LCD_RS_PIN PIN_A4
#define LCD_DATA4 PIN_A0
#define LCD_DATA5 PIN_A1
#define LCD_DATA6 PIN_A2
#define LCD_DATA7 PIN_A3


#byte PORTA=0xF80
#byte PORTB=0xF81
#byte PORTC=0xF82

int num=0;
unsigned char y;


void main()
{
 
set_tris_A(0b00000000);//Configuracion de puerto A salida, que va hacia el display
PortA=0;//Limpiamos el pueto
set_tris_B(0xFF);//Configuracion de puertoB entrada, que se accionan send y end
PortB=0;//Limpiamos el pueto
set_tris_C(0b11110000);//Configuracion de puerto C nible alto entrada y bajo salida
PortC=0;//Limpiamos el pueto

   lcd_init();//inicio del display
   kbd_init();//inicio del teclado
   
       
   
   output_high(pin_A4);//RS=1 para que lea datos
   output_high(pin_A5);//E=1 para habilitar el display
   printf(lcd_putc,"\f");
   printf(lcd_putc,"Hola");   
   delay_ms(5);
   
   
   
   // si observa el micro jamas se ponen los puertos A4(RS) y A5(E) en 1
   
   
 
   while(TRUE)
   {
   
   

      output_low(pin_D0);
      output_high(pin_D1);
      output_high(pin_D2);
      delay_ms(500);
             if(input(pin_D4==0))
             num=1;
             lcd_putc(num);
             output_high(pin_D1);
             lcd_putc(num);
             printf(lcd_putc,"\f Num=%u",num);
             delay_ms(500);
           
             if(input(pin_D5==0))
             num=4;
             lcd_putc(num);
             //delay_ms(500);
             
             if(input(pin_D6==0))
             num=7;
             lcd_putc(num);
             //delay_ms(500);
             
             if(input(pin_D7==0))
             num=10;
             y="*";
             lcd_putc("*");
             //delay_ms(500);
             
           
      output_high(pin_D0);
      output_low(pin_D1);
      output_high(pin_D2);
      delay_ms(500);
            if(input(pin_D4==0))
             num=2;
             lcd_putc(num);
             delay_ms(500);
             
            if(input(pin_D5==0))
             num=5;
             lcd_putc(num);
             delay_ms(500);
             
           
            if(input(pin_D6==0))
             num=8;
             lcd_putc(num);
             delay_ms(500);
             
           
            if(input(pin_D7==0))
             num=0;
             lcd_putc(num);
             delay_ms(500);
             
      output_high(pin_D0);
      output_high(pin_D1);
      output_low(pin_D2);
      delay_ms(500);
     
            if(input(pin_D4==0))
             num=3;
             lcd_putc(num);
             delay_ms(500);
             
            if(input(pin_D5==0))
             num=6;
             lcd_putc(num);
             delay_ms(500);
             
             if(input(pin_D6==0))
             num=9;
             lcd_putc(num);
             delay_ms(500);
             
             if(input(pin_D7==0))
             y="#";
             lcd_putc(y);
             delay_ms(500);
             
            }
           
           
}

Desconectado ivanbv4

  • PIC10
  • *
  • Mensajes: 21
Re: Problema 18F4550 + lcd + teclado
« Respuesta #29 en: 15 de Diciembre de 2011, 02:47:43 »
Hola bichicome07 no he analizado tu código en detalle, pero en primera instancia creo que tienes un clock de 4MHZ y la configuración HS (High Speed) en los fuses, la cual si no me equivoco deberia ser XT para el reloj que usas. igual esta no es la solución a tu problema por que proteus omite pequeños errores como eso, pero la implementación real no lo hará. saludos