# Mostrar mensajes en LCD usando C18



## RJR (Ene 10, 2007)

Que ta l, estoy aprendiendo a programar el poderoso pic 18f4550, pero tengo dudas en como hacer para mostrar msj en la pantalla lcd usando el c18, el caso es que se que el c18 ya tiene una libreria que contiene la configuraciones para usar la pantalla, pero no se y no entiendo, que pines son los que se utilizan, sabiendo que deben haber unos para el envio de datos y otro para el control de la pantalla, y otra duda es si encaso de que quiero utilizar otros pines que no son los que trae establecidos ya, como hacerlo que debo cambiar. esa es mi duda ya se manejar el pic mas muchas cosas pero esta parte todavia no la he comprendido por mi mismo, asi que si hayy alguien que me podria ayudar explicarme detalladamente como hacerlo se lo agradeceria mucho, espero sus respuestas, pueden responderme por aqui. o enviarme un correo.........


----------



## Turkito (Ene 14, 2007)

Hola , te recomiendo bajes  unos archivos de la pagina de la microchip donde están las librerias para LCD (MPLAB - c18 libraries), y otro que indica como crear el proyecto (MPlab c18 getting started). Bueno no tiene nada del otro mundo, lo único que tienes q hacer es utilizar las librerias, además una vez creado tu proyecto debes agregar además del archivo. C en el cual está tu programa,  los siguientes:

busyXLCD.c
openXLCD.c
Readaddr.c
readdata.c
setcgram.c
writdata.c

estos estan ubicados en la ruta donde guardaste tu programa MCC18, me imagino que en archivos de programa, en mi caso está en la ruta 

archivos de programa/MCC18/src/extended/pmc/XLCD

también te adjunto un programita que tengo en donde muestro dos mensajes en el LCD

para que te guies como usar las rutinas para LCD.. espero te sea de ayuda ..

saludos


----------



## Turkito (Ene 14, 2007)

pana tambien te recomiendo entres a los foros de la microchip, que hablan mucho sobre este tema!, para  mi me fue de mucha ayuda mientras andaba como tu, intentando mostrar mensajes con el c18


----------



## RJR (Ene 15, 2007)

muchas gracias por tu ayuda, bueno dejame ver que puedo hacer, gracias....


----------



## mr.brett (Ene 14, 2009)

Hola que tal, veo que este post es antiguo, pero el tema que iba  a postear es el mismo 

La diferencia es que ya he logrado conectar el LCD y funciona, pero con el puerto por default del C18, es decir el puerto B, pero como también estoy utilizando el módulo I2C del PIC (que está en RB0 y RB1) quiero cambiar de puerto.  Estoy intentando colocarlo en el PuertoD pero no se porque no me lo permite.

He modificado las definiciones de los pines y aún así sigue mandando las señales por el puertoB

#define DATA_PORT		PORTD
#define TRIS_DATA_PORT	DDRD

#define E_PIN		      PORTDbits.RD0
#define TRIS_E		DDRDbits.RD0
#define RW_PIN		PORTDbits.RD1
#define TRIS_RW		DDRDbtis.RD1
#define RS_PIN		PORTDbits.RD2
#define TRIS_RS		DDRDbits.RD2

Me pregunto si alguien ha utilizado el LCD con la libreríz XLCD del C18 en un puerto distinto al puertoB?

De antemano muchas gracias.


----------



## cracking_12hmn (Jun 23, 2009)

date una vuelta por http://encaminandoc.blogspot.com/2009/01/usando-un-lcd.html aqui te dice como cambiar el puerto a utilizar del lcd, solo es necesario cambiar unas lineas del archivo xlcd.h y listo, la verdad no lo he intentado, pero ahi te dice paso a paso q hacery segun eso, si funciona.
saludos


----------



## mr.brett (Jun 24, 2009)

Muchas gracias cracking_12hmn por tu aporte, estoy revisando el blog y está muy interesante, afortunadamente ya he resuelto el problema con el LCD, 

de nuevo, muchas gracias

Saludos.


----------



## cracking_12hmn (Jun 24, 2009)

por nada mr.brett y que bueno que ya resolviste tu problema, ahora yo tengo otro problema, lo que pasa es que tengo un codigo lcd para desplegar información por el puerto b del microcontrolador pic18f4550, ya ves que el modulo lcd tiene 2 lineas de 16 caracteres, y ps solamente me muestra 10 lineas, y no se porque, ya intente cambiar los tipos de datos, la posicion, etc, y me hace lo mismo, te muestro los codigos q tengo, utilizo el compilador mplab c18.

adjunto los archivos necesarios para q el programa funcione, espero q me puedan ayudar, y de antemano gracias.


----------



## mr.brett (Jun 29, 2009)

que tal cracking?

Primero tengo una duda de como haces tus includes, veo que en el lcd_18.h estás escribiendo #include "lcd_18.c", según yo tienes que ponder #include "lcd_18.h" en el archivo lcd_18.c,

Esa librería de donde la sacaste? 
Estás escribiendo en el LCD en modo de puerto completo? Porque no utilizas la librería que viene en el C18?

Te adjunto una librería para manejar el LCD, está chida porque todo viene incluido en un sólo archivo H,


Saludos, me avisas como te fue


----------



## cracking_12hmn (Jun 29, 2009)

hola mr.brett, pues mira, esta libreria nos la paso el maestro, me imagino que es una modificacion de la libreria de lcd de c18, segun el profesor nos habia comentado que las librerias lcd de c18 no funcionaban por algunos retardos de tiempo que incluian que habia que cambiar, y en fin, la verdad no me he puesto a investigar  como funcionan las librerias de c18, ahora las veo y te cuento que tal. con respecto al la libreria lcd_18.h esta libreria conntiene los llamados de las funciones para inicializar el lcd, imprimir cadenas desde la rom, imprimir caracteres ascci, etc.. pero solamente las llama, y para eso incluye el archivo lcd_18.c que es en donde estan dichos codigos de las funciones.
otra cosa, este problema que tengo no es problema ahora si que de los codigos, porque en el laboratorio, use un lcd diferente y si imprime en los 16 espacios del lcd, cosa que con el lcd que yo tengo no lo hace, , me imagino que va a ser problema del driver hitachi del lcd, pero ahi si no se como puedo repararlo, apenas estoy cursando la materia de microcontroladores y no se mucho del tema.
bueno, de antemano gracias por la información, e intentare hacer funcionar el lcd con las librerias del c18.
saludos

ah, el lcd lo estoy usando en modo de 4 bits, usando los bits rb0,rb1,rb2,rb3 a los pines d11..d14 del lcd


----------



## mr.brett (Jul 1, 2009)

Que tal cracking, tu profesor tiene razón en las librerías de c18 es necesario modificar los tiempos de delay, pero si funcionana. Te anexo un proyecto funcionanado. Sólo tiene que modificar el #define CLOCK_FREQ a la velocidad de tu crystal para que funcione.

Saludos y suerte.

Mr.Brett


----------



## strontium (Oct 10, 2009)

Hola, lamento revivir el tema pero tengo un problema. tambien estoy tratando de hacer funcionar la rutina xlcd en el puerto d, ya que usare las interrupciones del puerto b, y tampoco puedo usar el puerto c porque usare spi. ya intente con la pagina de encaminandoc, pero sigue sin funcionar. podria alguien ayudarme y detallarme los pasos a seguir?
gracias.


----------



## dtrtardivo (Jun 5, 2010)

mr.brett dijo:


> Que tal cracking, tu profesor tiene razón en las librerías de c18 es necesario modificar los tiempos de delay, pero si funcionana. Te anexo un proyecto funcionanado. Sólo tiene que modificar el #define CLOCK_FREQ a la velocidad de tu crystal para que funcione.
> 
> Saludos y suerte.
> 
> Mr.Brett



Obrigado Mr. Brett, seu projeto de LCD resolveu os meus problemas, me ajudou muito. Valeu, abço.


----------



## joanse (Jun 26, 2010)

cracking_12hmn dijo:


> por nada mr.brett y que bueno que ya resolviste tu problema, ahora yo tengo otro problema, lo que pasa es que tengo un codigo lcd para desplegar información por el puerto b del microcontrolador pic18f4550, ya ves que el modulo lcd tiene 2 lineas de 16 caracteres, y ps solamente me muestra 10 lineas, y no se porque, ya intente cambiar los tipos de datos, la posicion, etc, y me hace lo mismo, te muestro los codigos q tengo, utilizo el compilador mplab c18.
> 
> adjunto los archivos necesarios para q el programa funcione, espero q me puedan ayudar, y de antemano gracias.


 

hola, que pena molestar, pero queria saber si saben como desplegar informacion en la LCD queno quepa en una lcd de 16 caracteres, el problema es q necesito mostrar una palabra de mas de 16 caracteres en la lcd que recibo desde netbeans pero sinceramente no he podido lograr que el mensaje se vaya corriendo y permita ver todo el mensaje


----------



## arturoism (Oct 20, 2011)

necesito un ejemplo para hacer aparecer un mensaje en el lcd pero con c30.

como se utiliza la libreria xlcd en c30, necesito ayuda


----------



## ROCADRILO (Mar 8, 2013)

Hola a todos,

estoy intentando hacer funcionar un LCD powertip pc1602f b 2x16 con PIC18F45K20, uso MPLAB C18 Compiler.
he descargado ya dos códigos de ejemplo y configurado pero en los dos tengo el mismo error.
En cada uno de ellos configuro las salidas de puerto como los conecto.
El LCD no muestra nada, aunque si muevo la resistencia variable de 10k que he puesto a la entrada de ajuste contraste aparecen cuadros negros.
Os explico: lo alimento a 5v, he puesto resistencia de 50ohms entre 15-2 (A-VDD). DB0B3 a masa y DB4B7 al pic. RS-RW-E al pic en puestro diferende del de los datos.
Esta placa en el lateral tiene preprarado para soldar la resistencia R8 y R9 que no vienen y no he puesto por no saber para que son, tambien al lado de ellas hay unos puntos de soldar que ponen A y K. Puede ser que no se vea por no haber puesto estas resistencias? La pantalla no se ilumina, creo que es por esto del A-K...
Otra duda, cuando el programa de microchip que uso para esta rutina hace refernecia al nibble bajo, se refiere solo al dato o el del puerto, yo lo tengo configurado nibble bajo y uso puerto RC0:RC3 aunque despues en el LCD va a 7:4.
Muchas gracias por cualquier comentario que me ayude a salir de este encayo.

pd: Datasheet: http://www.google.es/url?sa=t&rct=j...7oaJsE80Pi-U91nnA&sig2=vbRcdlycoLnCor4xPfKedQ


----------



## D@rkbytes (Mar 8, 2013)

ROCADRILO dijo:


> estoy intentando hacer funcionar un LCD powertip pc1602f b 2x16 con PIC18F45K20
> he descargado ya dos códigos de ejemplo y configurado pero en los dos tengo el mismo error


Prueba con este otro ejemplo, quizás el tercero sea el que funcione.
Como no mencionas el lenguaje de programación, lo escribí en PICC de CCS.
Conecta la pantalla tal cual y se muestra en el diagrama adjunto.

Nota:
Para determinar que tipo de controlador usa esa pantalla, descargue otra hoja de datos (PC 1602-H)
Y menciona que usa el controlador Hitachi HD44780.
Así que posiblemente sea compatible con el ejemplo que adjunto.

Suerte.


----------



## ROCADRILO (Mar 9, 2013)

Hola Darkbytes,

gracias, uso MPLAB C18 Compiler. Podrías convertir tu código a este compilador?
Con tu datasheet ya veo mi pregunta sobre los pines A y K, que solo son para el backlight, de momento los tengo sin conectar. Aunque no veo que valores de R8 o R9 usar, supongo que pondré un variable y buscaré el valor.
Gracias.


----------



## D@rkbytes (Mar 9, 2013)

ROCADRILO dijo:


> uso MPLAB C18 Compiler.


OK. Ya vi que editaste tu primer mensaje para especificar el lenguaje. 


ROCADRILO dijo:


> Podrías convertir tu código a este compilador?


No programo en C18, pero en el ejemplo que subí viene el archivo *.hex para que hagas pruebas.

Ahora que mencionas el lenguaje de programación, muevo aquí los mensajes.
En este tema hay mas ejemplos.

Sobre las resistencias R8 y R9, puedes usar solo una. Yo he usado de 220Ω solo para reducir el brillo.

Suerte.


----------



## ROCADRILO (Mar 10, 2013)

Hola Darbytes,

puse la R 220ohms y la pantalla no se ilumina, debería, verdad?
tambien hize la prueba de dar valor al pin de Enable, por si era eso y nada.
Como puedo saber que el LCD funciona? era nuevo. Tocanda la variable de contraste si que se nota que aparecen o desaparecen los recuadros negros.

Adjunto el proyecto para usar el lcd, es el de microchip pero con los puertos modificados para datos C0-C3 y control B1,B2,B3. A ver si alguien quiere darle un vistazo para ver si hay algún error. Gracias


----------



## D@rkbytes (Mar 10, 2013)

Con el ejemplo que subiste solo se alcanza a visualizar una P en la segunda línea.
Si lo que quieres es probar la pantalla, ¿no entiendo por qué no usas el *.hex del ejemplo que subí?

Realice un programa en C18 para un 18F45K20, modificando el proyecto que adjuntó Mr. Brett.
Como no entiendo muy bien sobre C18, espero que funcione físicamente, ya que simulándolo si lo hace.
Para el LED, coloca el pin 15 (ánodo) a VDD y el pin 16(cátodo) por medio de una R 220Ω a VSS.

Adjunto el nuevo esquema y el proyecto.

Suerte.


----------



## ROCADRILO (Mar 11, 2013)

Hola Darkbytes,

Muchisimas gracias.
estoy ansioso por probarlo, será esta tarde.
Pero hay una cosa que aún no tengo clara, el tema de upper o lower nibble. Yo tengo conectado PIC-LCD así:

*PIC   LCD*
C0 - B4
C1 - B5
C2 - B6
C3 - B7
---- B0 hasta B3 a GND

Sería lower?
Veo que en tu libreria lcd.h, usas puerto datos D y configuras como upper y de control D0,D1,D2. Puedes usar el mismo puerto para las dos cosas, no sobreescribirá cuando grabas datos el valor que está en los pines de control?
Gracias.


----------



## D@rkbytes (Mar 11, 2013)

ROCADRILO dijo:


> Hola Darkbytes,
> 
> Muchísimas gracias.
> estoy ansioso por probarlo, será esta tarde.
> ...


Los pines del LCD D0, D1, D2, y D3, forman el nibble bajo.
Y los pines D4, D5, D6 y D7, forman nibble alto.
Cuando se trabaja la pantalla en modo de 4 bits, se usa el nibble alto, como en este caso.
Los pines de control son E, RW y RS, y no existe problema por contención de datos.
Ya que los pines de datos y los de control se definen en la librería, y se pueden modificar.
Una vez enviados los datos, se guardan en la RAM de la pantalla,
y permanecen visibles en la pantalla hasta otra orden de escritura.
Cuando termina una escritura, los pines de datos son puestos a nivel flotante por instrucciones en la librería.
Esto se usa mucho para poder usar los pines de datos para otras funciones.


----------



## ROCADRILO (Mar 11, 2013)

Hola,

nada de nada, continua sin funcionar.
He cargado tu codigo despues de revisar la config de los puertos y no hace nada.
Empiezo a pensar que el LCD no funciona, de hecho, aún no he conseguido encender el backlight.
Donde puedo comprar un LCD 2x16 con backlight y compatible hitachi que sepais que funciona seguro?
Muchas gracias.


----------



## D@rkbytes (Mar 11, 2013)

ROCADRILO dijo:


> Hola,
> 
> nada de nada, continua sin funcionar.
> He cargado tu código después de revisar la config de los puertos y no hace nada.
> ...



Podría ser que si esté dañado. Yo uso los LCD marca Shenzhen Jinghua (JHD 162A)
Pero existen otros mejores, estos son chinos y me han funcionado bien, excepto uno. 
Aquí tienes la lista donde puedes ver los disponibles según tu localidad. Listado de Proveedores

Saludos.


----------



## ROCADRILO (Abr 4, 2013)

hola,

acabo de recibir el LCD que compre por ebay, en principio son con el chip Hitachi.
Cuando pueda, lo pruebo y comento.
saludos.


----------



## ROCADRILO (Abr 5, 2013)

Hola,

pues parece que funciona!!!
Gracias.


----------

