# Fichero LCD.C exacto del CCS C



## Penguin (Jul 27, 2009)

Hola buenas. Trato de cambiar mi puerto de lectura del lcd, y segun un libro que me compré tan solo he de descomentar la linea          " //if defined use_portb_lcd    "  ( a decir verdad no dice como ). Hay muchos, muchos ficheros LCD.C para ese cometido, variar el puerrto, pero yo necesito averiguar como se cambia este. Al hacer el cambio que he dicho, me aparecen una serie de errores estupidos letra por letra linea por linea. NO entiendo como cambiar. SI alguien tiene este fichero ( exactamente) agradeceria los cambios para puerto C ( de lectura del LCD) y en caso que sea simplemente el cambio que he dicho, ver si hay un error a no tener en cuenta. Gracias


----------



## Moyano Jonathan (Jul 27, 2009)

Si me esperas hasta la noche te subo la librería para el puerto C. No es tan facil como lo pones vos pero tampoco es algo dificil.


----------



## Penguin (Jul 28, 2009)

hola! Vaya, no puede esperar ya que madrugo bastante ( no penasba que akguien me respondiera tan rápico, la verdad). De todos modos espero ansioso tu fichero, Moyano ( y gracias!). Y creo que a lo que te refierres es al cambio de dirección de los puertos de 8 y 16  bits ( estoy viendo la direccion de portc de mi micro, pero no se si es 8 o 18, y en ese caso, si he de poner la direccion de cualquier otro que use 16 bits). Bajé un fichero de alguien, para lectura por ahi. AHora puedo leer lo que queria, pero se vuelbe loco, y no se, no es plan de ir copiando sin saber de donde vienen las cosas, por eso pido la modificacion de este. gracias!


----------



## Moyano Jonathan (Jul 28, 2009)

Acá está la librería prometida     

Espero te sirva !


----------



## Penguin (Jul 29, 2009)

Moyano Jonathan dijo:
			
		

> Acá está la librería prometida
> 
> Espero te sirva !




perfecto! eso es exactamente lo que andaba buscando. Es curioso, he tenido problemas al compilar archivo..me compilaba siempre el anterior ( inlcuso creia que lo tuyo hacia lo mismo) . Al final lo he cerrado todo y lo he vueklto aabir. Ahora me detendre mas en lo que has hecho, pero compranado con el de portb es mucho mas facil saber el por que. Ha sido de gran ayuda, gracias!


----------



## Moyano Jonathan (Jul 29, 2009)

Muy raro que te de errores de compilación mostrame el proyecto y vemos cual puede ser tu error.


----------



## Penguin (Jul 29, 2009)

Moyano Jonathan dijo:
			
		

> Muy raro que te de errores de compilación mostrame el proyecto y vemos cual puede ser tu error.



creo que simplemente era porque no especificaba la ruta de compilacion. Al guardr el fichero, he cerrado y he abierto wizarr, no any file. Ese tipo de cosas me han dado algun problemita tb ( recuerdo) con un entorno de JAVA, pero ya esta resuelto, solo es eso


----------



## Moyano Jonathan (Jul 29, 2009)

Ok menos mal que pudiste resolver tu problema


----------



## Penguin (Ago 6, 2009)

Hola, recuerdas que dije que me iba perfectamente despues? Pues, ahotra no me va, me da fallos en una linea de delays del fichero del timer de puertoc. Estoy cerrando constantemente todos los archivos, y abriendo de nuevo mi proyecto, viendo desde donde compila..todo esta bien, pero no me funciona ningun fichero de lcd... la verdad ya me estoy volviendo loco, sabes que puede ser?


----------



## Penguin (Ago 6, 2009)

me respondo a mi mismo. He puesto ( y la he debido cambiar ademas sin querer) #use delay (clock=4000000) debajo de #include <LCD2_PORTC.C>. Solo por ese pequeño detalle me daba errores de compilacion. Son tonterias... pero que te pueden volver loco, ya que estaba revisando una y otra vez los 3 ficheros lcd diferentes que tengo !


----------



## javker29 (Sep 4, 2009)

Estoy trabajando sobre esta misma libreria, pero la idea que tengo es trabajarla pero para un microcontrolador freescale (MC68HC908GP32), obviamente me salen errores pues se debe trabajar en codewarrior, bueno si alguien tiene alguna idea de lo que comento o mejor si alguien ha manejado una LCD para un freescale y si esta en codigo C mucho mejor.

Gracias por su tiempo .


----------



## Moyano Jonathan (Sep 5, 2009)

Si tenés un compilador que sea ANSI C , la verdad no te va a costar mucho trabajo pasarla. Solo vas a tener que fijarte que en CCS hay algunas estructuras que no están bajo el standar de ANSI pero lo demás es copiar pegar.


----------



## c14nur0 (Sep 23, 2009)

jum agradeceria mas ayuda con este tema para codewarrior, porque esa libreria no la he usado apenas le he ojeado pero no tengo idea como funciona y segun leo tampoco sirve para el gp32, agradeceria si alguno la tradujera para codewarrior haber si se entiende y la puedo usar que en assembler me he enredado y quisiera trabajar en C y bueno tengo un lcd andando en assembler pero necesito trabajarlo apara un proyecto mas grande y no se de librerias para retardos o para manejar LCD, seria mucho mejor agradesco ayuda!!


----------



## facuenta (Mar 29, 2010)

Problemas al usar el LCD del Starter kit de Microchip con CCS.
Tengo la placa de desarrollo starter kit que tiene los pines de control del LCD E y RS conectadas  a los pines del puerto E (E2 y E1 respectivamente ) y RW a masa. El bus de datos del lcd están al puerto D (D0-D7) el problema es el siguiente: tengo la biblioteca del LCD.c del CCs y no se como modifcarla para estos dos puertos. Las modificaciones que encuentro en este foro es pasar del puero B al puerto D  o viceversa, esto sería lo conveniente pero las conexiones de la placa no la puedo modificar. La pregunta sería como modifico los pines de control para un puerto con RW a masa y los de datos a otro puerto de acuerdo a mi placa de desarrollo. 

Hice lo que está abajo en el archivo FLEX_LCD que me habían recomendado para modificar los puertos y que reemplazaría al LCD.C, pero me tira un error cuando uso el 
lcd_init();

y luego en el lcd_putc que uso en el pintf de mi programa. Y me dice que no están definidas... Lo raro que en el LCD.C si me funcionan ambos usando el proteus y sus puertos por defecto(puerto D para el LCD).


Cosas que modifiqué en el FLEX_LCD:

#define LCD_DB4   PIN_D4
#define LCD_DB5   PIN_D5
#define LCD_DB6   PIN_D6
#define LCD_DB7   PIN_D7
//
#define LCD_RS    PIN_E1
//#define LCD_RW    PIN_E0
#define LCD_E     PIN_E2

// 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




Si alguien me puede dar una mano se lo voy a agradecer.
Saludos


----------



## aldoblanco (Jul 28, 2010)

Yo tengo un problema similar con el lcd.c de CCS, de hecho copie el ejemplo que viene en el libro de CCS y Proteus sobre lcd pero me marca error en LCD.C, le modifique esta linea
#if defined use_portb_lcd
   #locate lcd = getenv("sfrORTB")    // This puts the entire structure over the port
   #define set_tris_lcd(LCD_WRITE) set_tris_b(LCD_READ)
//#else
  // #locate lcd = getenv("sfrORTD")    // This puts the entire structure over the port
  // #define set_tris_lcd(x) set_tris_d(x)
#endif

Pero me sale error 12 Undefined identifier set_tris_lcd

de ahi no sale, helpme please!!!


----------



## victormanuel12 (Sep 13, 2010)

A mi me pasa lo mismo, como lo solucionaste? Aguien sabe la solucion?


----------



## javierdavid2006 (Sep 15, 2010)

Yo tengo ese libro y tengo el mismo problema, acaso el libreo esta mal, o son las librerias, si alguien puede decir donde descargar librerias confiables, seria mi idolo.


----------



## Lvcios (Ene 7, 2011)

El libro debe estar mal. Yo también he intentanto pero hasta ahora no puedo trabajar con el puerto a para manejar el LCD.


----------



## Lvcios (Ene 10, 2011)

Hola, alguién de aqui ha manejado la libreria lcd con el puerto a? Según yo hice la asignación de pines como especifica la libreria. Con el puerto b va todo bien, pero con el puerto a no da nada. Estoy usando un pic16f268a. Cabe mencionar que desactive los comparadores que se inician por default en el porta y configuré también el resto de pines como salida.


----------



## gogutier (Feb 5, 2011)

hola, yo tenía ese problema al asignar pines con el lcd.c que viene con el ccs, y finalmente el único problema es que deben poner el #define port... antes del include<lcd.c> (tampoco es necesario modificar el lcd.c) error de principiante supongo. para conectar el lcd al puerto A en un 16f628a yo usé la siguiente asignación utilizando uno de los pines B, ya que ni el a4 y ni el a5 me funcionaron :S

ahora estoy buscando una forma de utilizar el lcd con 8 bits, he encontrado algunas librerías pero sólo tienen las funciones lcd_putc() y yo busco alguna que tenga la funcion printf(...) ¿alguna sugerencia?

 #define LCD_ENABLE_PIN  PIN_a2                                   ////
 #define LCD_RS_PIN       PIN_a0                                    ////
 #define LCD_RW_PIN      PIN_a1                                    ////
 #define LCD_DATA4       PIN_a3                                    ////
 #define LCD_DATA5       PIN_b0                                    ////
 #define LCD_DATA6       PIN_a6                                    ////
 #define LCD_DATA7       PIN_a7  
 #define LCD_EXTENDED_NEWLINE 

#include<lcd.c>


----------



## Lvcios (Feb 6, 2011)

gogutier dijo:


> hola, yo tenía ese problema al asignar pines con el lcd.c que viene con el ccs, y finalmente el único problema es que deben poner el #define port... antes del include<lcd.c> (tampoco es necesario modificar el lcd.c) error de principiante supongo. para conectar el lcd al puerto *A en un 16f628a yo usé la siguiente asignación utilizando uno de los pines B, ya que ni el a4 y ni el a5 me funcionaron :S*
> ahora estoy buscando una forma de utilizar el lcd con 8 bits, he encontrado algunas librerías pero sólo tienen las funciones lcd_putc() y yo busco alguna que tenga la funcion printf(...) ¿alguna sugerencia?
> 
> #define LCD_ENABLE_PIN  PIN_a2                                   ////
> ...



Los pines 4 y 5 de PORTA estan configurados inicialmente como comparadores, para usuarlos como entradas y asi poder usarlos para el lcd debes desactivar los comparadores, te recomiendo que cheques en el datasheet del PIC16F628A, ahi viene como inicializar el porta, creo que es la página 33, analiza la inicialización e inserta ese pedazo de código ensamblador.
Saludos!

Edit: Perdón, pin A5 de PORTA es para resetear la pic, no funciona como salida sino como entrada, siempre como entrada.

Por cierto, MikroC trae una libreria para usar los lcd a 8 bits


----------



## gzaloprgm (Feb 6, 2011)

> Los pines 4 y 5 de PORTA estan configurados inicialmente como comparadores, para usuarlos como entradas y asi poder usarlos para el lcd debes desactivar los comparadores, te recomiendo que cheques en el datasheet del PIC16F628A, ahi viene como inicializar el porta, creo que es la página 33, analiza la inicialización e inserta ese pedazo de código ensamblador.



Además, el Pin A4 es de open drain, por lo que deberías ponerle una res. de pullup si deseás usarlo como salida...

Saludos,
Gonzalo


----------



## dcp1985 (Ago 16, 2011)

Hola, estoy intentando utilizar una lcd con la libreria del puerto C, y me estoy volviendo un poco loco.....
Utilizo un 18f2550, y el programa es el siguiente:


> #include <18F2550.h>
> #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT,USBDIV,PLL2,CPUDIV1,VREGEN,PUT,MCLR
> #use delay(clock=48000000)
> 
> ...


 
Al conectarlo a la alimentacion, en el LCD aparece la linea de arriba con todo cuadrados.
Al inicializarlo (El led verde se enciende) desaparece esos cuadrados (asi que supongo que se inicializa bien el lcd)
Pero luego ya no aparece nada más, y el led rojo se ilumina, asi que no se que ocurre....

Cualquier ayuda aunque sea poca se agradece, muchas gracias de antemano.
Un saludo, David.


----------



## sebirris (Dic 6, 2011)

Hola amigos!.. e intentado varios codigos que e visto por varios libros y por varios foros, y siempre me sale el mismo error, el cual consiste en que al mostrar un texto en la lcd como tal en la simulacion me aparecen caracteres como #*/, ya llevo como una semanana con el mismo error..
muchas gracias!...


----------



## ilcapo (Jul 17, 2012)

perdon que reavive el post pero la libreria que tengo en el CCS es LCD.C  y la libreria del CCS posteada en el post N°1 es LCDD.C ! me he fijado que son diferentes, son para distintos LCD ?  
o sirven para controlar distintos diplays ? por ejemplo con la LCD.C yo manejo los displays 16x2 y 8x2 no se si se podran manejar otros con esta libreria

y con la LCDD.C ?? que displays estan manejando ? saludos !


----------



## yenz (Mar 10, 2015)

Comunidad foros de electrónica me gustaría que me ayudaran con las librerías de la lcd 4x20 para que funcione
por 2 puertos diferentes estuve consultando sobre lcd_flex pero aun no e podido solucionar.
Me gustaría aprender a modificar las librería del lcd para poder cambiarle los pines de funcionamiento.
Conexión que necesito:

RA0 = E
RA1 = RS
RA2 = RW

RB4 = D4
RB5 = D5
RB6 = D6
RB7 = D7

Codigo en c


```
#include <16f628a.h>
#use     delay(crystal = 4MHz)

//#define use_portb_kbd TRUE
#include <kbd_lib.c>
#include <LCD420.c>


void main () 
{
CHAR k;

   lcd_init();
   kbd_init();
   port_b_pullups(TRUE);
   lcd_gotoxy(1,1);
   printf(lcd_putc,"Bienvenidos (^^,)");
   
   while (true)
   {
      k = kbd_getc();
      
      if (k!=0)
      lcd_putc(k);
      
         }
   }
```

Les adjunto la simulación en proteus.


----------



## D@rkbytes (Mar 11, 2015)

Es más fácil modificar la librería lcd.c que la librería lcd420.c
Sólo debes reemplazar la rutina lcd_gotoxy(x, y); de la librería lcd.c por la de la librería lcd420.c

Si tu versión de lcd.c tiene la definición LCD_EXTENDED_NEWLINE incluida en la rutina, la debes dejar para mantener la compatibilidad.

De esa forma puedes usar cualquier pin para el control y también para los datos, usando las definiciones de la librería.
Este pequeño cambio hará que la librería lcd.c también funcione para pantallas 20x4.

Las ventajas de usar la librería lcd.c modificada son mayores, porque esta librería tiene mas funciones.


----------



## yenz (Mar 11, 2015)

D@rkbytes dijo:


> Es más fácil modificar la librería lcd.c que la librería lcd420.c
> Sólo debes reemplazar la rutina lcd_gotoxy(x, y); de la librería lcd.c por la de la librería lcd420.c
> 
> Si tu versión de lcd.c tiene la definición LCD_EXTENDED_NEWLINE incluida en la rutina, la debes dejar para mantener la compatibilidad.
> ...



Gracias D@rkbytes por tus orientaciones le cuento, encontré una librería lcd.c con  la definición LCD_EXTENDED_NEWLINE le hice los cambios por #define para los pines que nesecito y no dio errores pero en la simulación en proteus no mostró nada y los pines definidos E,RS,RW no alumbraban ni la lcd mostró nada.

Después encontré una librería flex_lcd decía que se podía modificar E,RS,RW pero la incluí en mi programa y dio muchos errores al compilarla.

Le adjunto las dos nuevas librerías y la simulación para que me aconsejes y ayudes para avanzar en mi proyecto de grado.


----------



## D@rkbytes (Mar 11, 2015)

Nop. No estás realizando bien las modificaciones ni usando las definiciones para los pines.

Mejor adjunto la librería modificada con un ejemplo de uso y simulación para Proteus 7.10 y 8.1

PD:
Cuando uses alguna librería que tenga el mismo nombre que alguna de las que se encuentran en la carpeta Drivers de PICC Compiler, debes incluirla con el nombre entre comillas ("") para que el compilador sepa que la librería que debe usar se encuentra en la carpeta del proyecto.
Si escribes el nombre entre los símbolos (<>) el compilador siempre usará la que encuentre por defecto en la carpeta Drivers.


----------



## yenz (Mar 11, 2015)

D@rkbytes dijo:


> Nop. No estás realizando bien las modificaciones ni usando las definiciones para los pines.
> 
> Mejor adjunto la librería modificada con un ejemplo de uso y simulación para Proteus 7.10 y 8.1
> 
> ...



Gracias por la explicación y ayudarme me quedo bien entendido, esta semana estaré trabajando me ayudaste con un avance bien significativo mil gracias.


----------

