TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Azicuetano en 24 de Agosto de 2006, 07:58:29

Título: PIC18F2550 + LCD
Publicado por: Azicuetano en 24 de Agosto de 2006, 07:58:29
Hola colegas!

Ahora que tengo algo de tiempo libre he decidido mejorar un proyecto que tenía un poco olvidado. He migrado del PIC16F877 al PIC18F2550 porque me apetecía hacer algo con el USB.

Todo me ha funcionado perfectamente exceptuando el maldito display lcd. Con el otro micro me iba perfectamente pero ahora no me tira.

He decidido montar en una placa de inserción solamente el PIC y el display pero nada de nada. El lcd lo conecto al puerto C y  para ello modifico el lcd.c que incluyo al principio de mi programa.

Lo que modifico del LCD.C es lo siguiente:

Código: [Seleccionar]
#if defined(__PCH__)
#if defined use_portb_lcd
   #byte lcd = 0xF81                   // This puts the entire structure
#else
   #byte lcd = 0xF82                   // This puts the entire structure         // AZICUETANO // DIRECCION DEL PURTOC 0xF82
#endif
#else
#if defined use_portb_lcd
   #byte lcd = 6                  // on to port B (at address 6)                 // AZICUETANO // DIRECCION DEL PURTOC 7 (ver datasheet pág. 117, ejemplo 10-3)
#else
   #byte lcd = 7                 // on to port D (at address 8)
#endif
#endif

#if defined use_portb_lcd
   #define set_tris_lcd(x) set_tris_b(x)
#else
   #define set_tris_lcd(x) set_tris_c(x)
#endif

A alguien le ha pasado algo parecido?? Voy a ver si lo conecto al puerto B para ver si así funciona pero... hasta que no lo conecte al puerto c no dormiré tranquilo.


Un saludo desde Alicante.
Título: Re: PIC18F2550 + LCD
Publicado por: Azicuetano en 24 de Agosto de 2006, 09:04:41
Creo que ya se por que me pasa esto.

Es posible que RC4 y RC5 no se puedan poner como salidas?? En la página 105 del datasheet nos hablan de todos los pines del puerto c y en todos nos dice 'data input' y 'data output' excepto en las patillas RC4 y RC5 que solo nos pone 'data input'.

¿Es correcto?


Un saludo desde Alicante.
Título: Re: PIC18F2550 + LCD
Publicado por: elmasvital en 24 de Agosto de 2006, 09:52:39
Así es... de hecho yo tengo un modulo de 8 leds y conectado al puerto c esos leds no se encienden aunque los señales como salida...

mejor elije el puertob... y casi mejor que cambies de rutina de lcd al flex_lcd_2.c de redpic que puedes configurar cada pin de forma independiente.

1 saludo.
Título: Re: PIC18F2550 + LCD
Publicado por: Azicuetano en 24 de Agosto de 2006, 11:31:18
Si, eso es elmasvital.

Antes de irme a comer he hecho esa prueba y lo he observado. Ya lo he puesto en el puerto b y funciona muy bien.

Justo ahora iba a modificar el lcd.c para configurar cada pin de forma independiente pero... si me dices que el maestro redpic ya lo hizo, voy a buscarla para no perder ya más tiempo con esta tonteria.


Un saludo desde Alicante.
Título: Re: PIC18F2550 + LCD
Publicado por: RedPic en 24 de Agosto de 2006, 14:23:26
Azicuetano, aquí tienes la Flex_LCD_2.c para Descargar (http://picmania.garcia-cuervo.com/recursos/flex_lcd_2.c)

Y un ejemplo de uso:

Código: C
  1. #include <16f876a.h>
  2. #fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
  3. #use delay(clock=4000000)
  4. #use standard_io(b)
  5. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
  6.  
  7. #define LCD_DB4   PIN_B4
  8. #define LCD_DB5   PIN_B5
  9. #define LCD_DB6   PIN_B6
  10. #define LCD_DB7   PIN_B7
  11.  
  12. #define LCD_RS     PIN_C0
  13. #define LCD_RW    PIN_C1
  14. #define LCD_E       PIN_C2
  15.  
  16. #include "flex_lcd.c"
  17.  
  18. char Keypress=' ';
  19.  
  20. #int_rda
  21. void serial_isr() {
  22.  
  23.    Keypress=0x00;
  24.    if(kbhit()){
  25.       Keypress=getc();
  26.    }
  27. }
  28.  
  29. void main() {
  30.  
  31.    enable_interrupts(global);
  32.    enable_interrupts(int_rda);
  33.  
  34.    printf("\r\n\LCD driver monitor\r\n");
  35.    
  36.    lcd_init();
  37.  
  38.    do {
  39.       if(Keypress!=0x00){
  40.          lcd_putc(Keypress);
  41.          putc(Keypress);
  42.          Keypress=0x00;
  43.       }
  44.    } while (TRUE);
  45.  
  46. }

Título: Re: PIC18F2550 + LCD
Publicado por: Azicuetano en 24 de Agosto de 2006, 14:44:21
Gracias RedPic pero la desesperación me ha hecho meterme en tu página y buscar y buscar hasta que la he encontrado.

Por cierto, funciona muy bien.


Un saludo desde Alicante.
Título: Re: PIC18F2550 + LCD
Publicado por: RedPic en 24 de Agosto de 2006, 15:02:42
1º Me alegra que te funcione.
2º En "Inicio" tiene un buscador Google para la página ....
3º Comprueba si es la Flex_LCD_2.c (en mis post anterior es la que he puesto)

Continuamos para bingo ....  :mrgreen:

Título: Re: PIC18F2550 + LCD
Publicado por: GabrielD en 23 de Agosto de 2014, 12:37:23
Hola se que este tema ya es viejo pero espero que me puedan ayudar.

Estoy teniendo problemas igualmente con el pic 18f2550 y el lcd de 16x2. Ya baje la libreria de flex_lcd_2 de redpic pero aun no lo he logrado hacer funcionar. Mi

idea es separar los pines entre el puerto A y el C pero por ahora estoy probando mandando todo al puerto B pero aun asi nada, estoy intentando con un mensajito

simple de "Hola...probando" pero por ahi vi que nomas salio la H una vez. Alguna idea de que podria ser?

Gracias.
Título: Re: PIC18F2550 + LCD
Publicado por: Miquel_S en 23 de Agosto de 2014, 12:42:37
Hola GabrielD quizas deberias postear el codigo para ver donde tienes el fallo.
Título: Re: PIC18F2550 + LCD
Publicado por: GabrielD en 23 de Agosto de 2014, 13:14:29
Código: [Seleccionar]
#include <18f2550.h>
#fuses xt,nowdt, nolvp,noprotect,NOPBADEN,NOMCLR,PUT
#use delay(clock=4000000)
#define LCD_DB4   PIN_B4
#define LCD_DB5   PIN_B5
#define LCD_DB6   PIN_B6
#define LCD_DB7   PIN_B7

#define LCD_RS    PIN_B0
#define LCD_RW    PIN_B1
#define LCD_E     PIN_B2

#include <flex_lcd_2.c>
#use fast_io(b)
#use fast_io(a)

void main ()
{
port_b_pullups(true);
lcd_init();

lcd_putc("Hola...probando");

while(true);

}

ese es el codigo que estoy intentando implementar es solo el mensaje, los pullups fue un intento por algo que lei en otro post de alguien que tenia problema para el puerto A pero en otro pic y le recomendaban poner pull up porque un pin tenia open drain y le funciono, tonces era simplemente por probar pero no.

Título: Re: PIC18F2550 + LCD
Publicado por: jhozate en 23 de Agosto de 2014, 13:29:09
fijate en el codigo de la libreria que ninguno de los pines de control RS, RW, E   estén comentados ,
Título: Re: PIC18F2550 + LCD
Publicado por: GabrielD en 23 de Agosto de 2014, 15:42:57
No, lo unico que esta comentado son los #define de los pin pero eso ya los puse ahi en el encabezado del resto todo esta bien

aunque me quedo una duda revisando la libreria, dentro de una funcion en vez de estar #ifdef esta escrito es #ifndef pero como no entiendo muy bn como funciona eso no se si este bn o mal

es esto, esta al final

Código: [Seleccionar]
void lcd_init(void){
int8 i;

output_low(LCD_RS);

#ifdef USE_LCD_RW
output_low(LCD_RW);
#endif

output_low(LCD_E);

delay_ms(15);

for(i=0 ;i < 3; i++)
   {
    lcd_send_nibble(0x03);
    delay_ms(5);
   }

lcd_send_nibble(0x02);

for(i=0; i < sizeof(LCD_INIT_STRING); i++)
   {
    lcd_send_byte(0, LCD_INIT_STRING[i]);

    // If the R/W signal is not used, then
    // the busy bit can't be polled.  One of
    // the init commands takes longer than
    // the hard-coded delay of 60 us, so in
    // that case, lets just do a 5 ms delay
    // after all four of them.
    #ifndef USE_LCD_RW
    delay_ms(5);
    #endif
   }
delay_ms(15);
}

eso viene es por esta definicion
Código: [Seleccionar]
// If you only want a 6-pin interface to your LCD, then
// connect the R/W pin on the LCD to ground, and comment
// out the following line.

 #define USE_LCD_RW   1

espero haya sido claro sino me avisan jeje
Título: Re: PIC18F2550 + LCD
Publicado por: nico en 23 de Agosto de 2014, 18:51:16
Podrias colocar un diagrama de como lo tienes conectado así lo miramos?

Salutes
Título: Re: PIC18F2550 + LCD
Publicado por: jhozate en 24 de Agosto de 2014, 13:36:51
he descargado de la pagina de picmania la libreria flex, compilado y simulado  tu codigo tal cual, y funciona, quizá se trate de un problema en tu hardware
Título: Re: PIC18F2550 + LCD
Publicado por: GabrielD en 25 de Agosto de 2014, 13:20:34
que pena la demora en la respuesta me aleje un poco el domingo para descansar jeje

este es el esquematico por ahi vi que medio aparece la h mientras estoy subiendo la fuente a 5 v pero ya luego desaparece

por cierto estoy utilizando un cristal de 4MHz con dos capacitores de 15pF, en la alimentacion de Vpp en el pin uno lo tengo con una resistencia de 10k que ahi en el esquematico no lo tiene, tambien un  capacitor de tantalio en vdd y vss para filtrar ruido y otro electrolitico cerca a la fuente para el mismo fin.
Título: Re: PIC18F2550 + LCD
Publicado por: jhozate en 25 de Agosto de 2014, 13:40:36
Como asi? en caliente vas subiendo el voltaje de la fuente?

Para darte cuenta y descartar que el micro se este reiniciando , pon a titilar un led en el main, algo asi
Código: C++
  1. void main ()
  2. {
  3. output_high(pin_a0);
  4. delay_ms(200);
  5. output_low(pin_a0);
  6.  
  7. port_b_pullups(true);
  8. lcd_init();
  9.  
  10. lcd_putc("Hola...probando");
  11. while(true);
  12.  
  13. }

si todo va bien , cuando enciendes solo debes ver el led encender una vez
Título: Re: PIC18F2550 + LCD
Publicado por: GabrielD en 25 de Agosto de 2014, 14:33:31
mmmm ok te entiendo, no igual cuando prendo la fuente de una fija en 5v tampoco funciona.
Título: Re: PIC18F2550 + LCD
Publicado por: jhozate en 25 de Agosto de 2014, 16:56:22
la H que dices la observas claramente o hay presencia de cuadros negros que llenan el lcd?
Título: Re: PIC18F2550 + LCD
Publicado por: GabrielD en 25 de Agosto de 2014, 17:15:39
Hola, si hay presencia de cuadros blancos porque es el de fondo azul, la h solo aparece por un momento luego todo queda en cuadros.
Título: Re: PIC18F2550 + LCD
Publicado por: jhozate en 25 de Agosto de 2014, 17:52:05
A bueno, entonces el problema puede estar es en el pin de contraste del lcd, creo que es el pin 3, quizas este haciendo mal contacto o   puedes poner un potenciometro como en la imagen adjunta
(http://mla-s1-p.mlstatic.com/display-lcd-2x16-hd44780-backlight-azul-arduino-pic-etc-13649-MLA3316620555_102012-F.jpg)
Título: Re: PIC18F2550 + LCD
Publicado por: GabrielD en 25 de Agosto de 2014, 18:33:05
ya se lo tengo  :( es que cuando pruebo otra libreria si funciona es con esta que no y la quiero hacer funcionar por la libertad de los pines que al parecer se pueden enviar a cualquier lado.

Pero esa resistencia al pin 15 del lcd no la tengo, de que valor la pones?.
Título: Re: PIC18F2550 + LCD
Publicado por: jhozate en 25 de Agosto de 2014, 18:44:05
generalmente la pongo de 220ohm o 330ohm
Título: Re: PIC18F2550 + LCD
Publicado por: GabrielD en 28 de Agosto de 2014, 12:48:29
Hola jhozate la verdad me toco seguir avanzando y probe con otra libreria, no he vuelto a probar pero creo q ya casi me toca probar porque la estoy viendo negra por escases de pines.

Gracias por todo apenas sepa algo te aviso  :)