Autor Tema: problema con lcd 16x4 muestra caracteres raros  (Leído 2089 veces)

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

Desconectado fernandogomav

  • PIC10
  • *
  • Mensajes: 32
problema con lcd 16x4 muestra caracteres raros
« en: 07 de Noviembre de 2015, 18:38:35 »
Hola mi nombre es fernando gomez de Merida-Venezuela, soy relativamente nuevo en el foro, siempre leo cosas pero esta es la primera vez que escribo sobre un problema.

estoy programando un pic18f4550 para que muestre un mensaje en una pantalla lcd16x4 pero muestra caracteres raros que no son, en proteus simula bien pero en el protoboard nada.

la libreria de la lcd es una libreria que utilize para una pantalla lcd16x2, el programa esta bien porque conecte la de 16x2 y muesta, pero cuando coloco la de 16x4 nada...

ahora me parace que es la programacion de la inicializacion de la pantalla...(entiendo esto por driver, corrijame si estoy mal)
hay un dato importante, la pantalla de 16x4 tiene por detras 3 nucles o 3 micros y la de 16x2 solo tiene dos, por esto me parece que es el codigo de inicializacion.

ya busque varios datasheet de pantallas 16x4 y la inicializacion es lamisma que para las de 16x2

podrian ayudarme, o alguien podria =)?? gracias

adjunto lo que estoy simulando en proteus con el codigo de la LCD
nota:(estoy programando en MPLABX y copilando con XC8)

este es el .H

/*
 * File:   LCD_4bits.h
 * Author: fernandojose
 *
 * Created on 2 de noviembre de 2015, 20:38
 */

#ifndef LCD_4BITS_H
#define   LCD_4BITS_H

#define _XTAL_FREQ 2000000UL //definicion del cristal para poder utilizar los delays

#define LCD_RS      LD2

#define LCD_EN      LD3

#define LCD_DATA    LATD


#define LCD_RS_TRIS TRISD2

#define LCD_EN_TRIS TRISD3

#define LCD_DATA_TRIS TRISD



void LCD_init(void);

void LCD_write_4bits(char, char);

void LCD_write(char,char);

void LCD_clear(void);

void LCD_putc(char);

void LCD_puts(const char *);

void LCD_gotoxy(char,char);

#endif   /* LCD_4BITS_H */


y aqui va el .C

#include <xc.h>
#include "LCD_4bits.h"

void LCD_init(void)
{

LCD_RS_TRIS    = 0;

LCD_EN_TRIS    = 0;

LCD_DATA_TRIS &= 0x0F;


LCD_RS = 0;

LCD_EN = 0;


__delay_ms(15);

LCD_write_4bits(0, 0x30);

__delay_ms(5);

LCD_write_4bits(0, 0x30);

__delay_ms(1);

LCD_write_4bits(0, 0x30);


LCD_write_4bits(0, 0x20);


LCD_write(0, 0x28);

LCD_write(0, 0x0C);

LCD_write(0, 0x01);

LCD_write(0, 0x06);

}

void LCD_write_4bits(char t, char c)
{

LCD_DATA = c;

LCD_RS   = t;

LCD_EN   = 1;

LCD_EN   = 0;

__delay_us(400);

}

void LCD_write(char t, char c)
{

LCD_DATA = c;

LCD_RS   = t;

LCD_EN   = 1;

LCD_EN   = 0;

__delay_us(400);

LCD_DATA = c << 4;

LCD_RS   = t;

LCD_EN   = 1;

LCD_EN   = 0;

__delay_us(400);

}

void LCD_clear(void)
{

LCD_write(0, 0x01);

 __delay_ms(5);

}

void LCD_putc(char c)
{
LCD_write(1, c);

}

void LCD_puts(const char *s)
{
    char i = 0;
    while(s != '\0')


{


LCD_write(1,s);


i++;

}

}

void LCD_gotoxy(char x, char y)


{
      if(y < 2)
        LCD_write(0, 0x80 | x + 0x40*y);
    else
        LCD_write(0, 0x80 | x + 0x10 + 0x40*(y - 2));

}

 - Adjunto no válido -


Desconectado fernandogomav

  • PIC10
  • *
  • Mensajes: 32
Re:problema con lcd 16x4 muestra caracteres raros
« Respuesta #1 en: 07 de Noviembre de 2015, 18:41:30 »
esta es la simulacion

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:problema con lcd 16x4 muestra caracteres raros
« Respuesta #2 en: 08 de Noviembre de 2015, 00:42:29 »
Bueno normalmente si en la simulacion funciona pero en la realidad no, el problema puede ser de varios lados

Fuses - La simulacion no tiene en cuenta los fuses
Reloj - La simulacion puede no tener en cuenta los "delays" o tiempos a respetar para un LCD. Un caso seria este:

Código: C
  1. LCD_EN   = 1;
  2.  
  3. LCD_EN   = 0;

Muchas veces uno se confia y termina usando una velocidad de 20Mhz por ejemplo, en el cual esas instrucciones se ejecutarian en nanosegundos, PERO tal ves el LCD necesita que ese pin este activo 1ms.
Si queres asegurarte, agregale un par de delays a esos cambios, en especial a ese (se repite en varios lados), en el que se modifica el mismo pin en 2 instrucciones seguidas.
Podes ponerles delays masomenos "grandes" y ver que ocurre, si ves que funciona asi (aunque va a ser lento), sabes que es un problema de tiempo y ahi empezas a buscar exactametne donde esta fallando.

Driver - Este es el ultimo, en el que el driver posea otras instrucciones para escribir en la DDRAM, El que tenga 3 micros con gotitas negras no es indicativo de nada. Aunque el mas comun es el HD44780, lo que puede cambiar entre uno u otro tambien puede ser la inicializacion. Para saber cual es el driver vas a tener que buscar en la placa del LCD alguna numeracion que te permita buscarlo por internet y tratar de encontrar cual es el driver del mismo.
Pero primero probaria con las demoras.


Desconectado fernandogomav

  • PIC10
  • *
  • Mensajes: 32
Re:problema con lcd 16x4 muestra caracteres raros
« Respuesta #3 en: 08 de Noviembre de 2015, 22:45:49 »
Bueno normalmente si en la simulacion funciona pero en la realidad no, el problema puede ser de varios lados

Fuses - La simulacion no tiene en cuenta los fuses
Reloj - La simulacion puede no tener en cuenta los "delays" o tiempos a respetar para un LCD. Un caso seria este:

Código: C
  1. LCD_EN   = 1;
  2.  
  3. LCD_EN   = 0;

Muchas veces uno se confia y termina usando una velocidad de 20Mhz por ejemplo, en el cual esas instrucciones se ejecutarian en nanosegundos, PERO tal ves el LCD necesita que ese pin este activo 1ms.
Si queres asegurarte, agregale un par de delays a esos cambios, en especial a ese (se repite en varios lados), en el que se modifica el mismo pin en 2 instrucciones seguidas.
Podes ponerles delays masomenos "grandes" y ver que ocurre, si ves que funciona asi (aunque va a ser lento), sabes que es un problema de tiempo y ahi empezas a buscar exactametne donde esta fallando.

Driver - Este es el ultimo, en el que el driver posea otras instrucciones para escribir en la DDRAM, El que tenga 3 micros con gotitas negras no es indicativo de nada. Aunque el mas comun es el HD44780, lo que puede cambiar entre uno u otro tambien puede ser la inicializacion. Para saber cual es el driver vas a tener que buscar en la placa del LCD alguna numeracion que te permita buscarlo por internet y tratar de encontrar cual es el driver del mismo.
Pero primero probaria con las demoras.

Quiero agradecer a KILLERJC por la respuesta, pues solucione el problema tal cual lo planteo.

Dejo un archivo de un tutorial corto sobre LCD's  en donde se menciona que algunas pantallas tienen controladores rapidos y estos debe llevar delays en los steps o pasos de habilitacion (enable) =). les dejo la nota aqui en ingles del pdf que les adjunto:

Since some microcontrollers are very fast, delays may be required between the steps described in the pseudo-code.

Desconectado fernandogomav

  • PIC10
  • *
  • Mensajes: 32
Re:problema con lcd 16x4 muestra caracteres raros
« Respuesta #4 en: 08 de Noviembre de 2015, 23:00:55 »
bueno el archivo es muy grande para cargarlo aca..

les dejo mi correo por si lo necesitan, es un tutorial general sobre pantallas LCD y esta en ingles, pero es corto y preciso..

fernandogomav@hotmail.com

saludos desde venezuela

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:problema con lcd 16x4 muestra caracteres raros
« Respuesta #5 en: 08 de Noviembre de 2015, 23:58:05 »
Si, para eso deberias fijarte en el Driver del LCD, ahi dice el tiempo minimo de cada señal, creo que la mas limitante es esa. no recuerdo si es 1us o algo por el estilo