# LCD 16x2 ejemplo CCS para 16F628a



## gastón (Ago 31, 2006)

Gracias al foro ahora ya tengo algunas cosas un poco mas claras:

Utilizaré CCS (lenguaje C), mi display es compatible (16x2) y bus de 4 u 8 bits (cualquiera), PIC 16F628A. 

Me gustaría que alguien me pasara un ejemplo para hacer funcionar mi lcd,

algo sencillo (por el momento me conformo con un "hola mundo", después evolucionaré en su uso).

He probado cantidad de código (he revisado todo el foro) y no logro un buen resultado.
No encuentro código para el PIC que utilizo y tengo problemas al compilar.

Y recién estos empezando a comprender el uso de las librerías.

(utilizo el PORTA para las señales de control y todo el PORTB para el display, pero no me preocupa cambiar el cableado siempre que sepa como es la nueva opción)

Como verán es la primera vez que intento esto.

Saludos y muchas gracias.


----------



## leo_programer (Sep 11, 2006)

que mas gastón?,

aqui esta lo que pides, tanto para el 628 como para el 628a, el esquematico por si las moscas, ah!, no lo probe en un protoboard por que no tengo dicho pic, lo probe en proteus(que hay mismo esta el archivo) y algo si se, es que si sirve en proteus, sirve en cualquier montaje real, se lo aseguro, y a mi me sirvio, fijese las funciones y todo, y otra cosa, si no sirve o se ve muy claro, revisa las conexiones que por lo general es lo que fallan, despues si alguien lo pide, publico una libreria mucho mas completa con muchisimas mas opciones, como animaciones y todo eso, por lo pronto, me comenta, cuidese...


----------



## Palmas (Mar 16, 2008)

Saludos amigos, estoy ingresando en este fascinante mundo de los microcontroladores y con la programacion en c con ccs, ya estoy trabajando con el ejemplo de lcd en ccs de Leonardo, tal vez me pudieran enviar un archivo para estudiarlo y aprender para manejar un teclado hexadecimal 4x4. Muchas gracias. (gracias Leonardo)
Palmas.


----------



## tiopepe123 (Mar 17, 2008)

hay un ejemplo dentro del compilador, mira en el directorio examples


----------



## Palmas (Mar 17, 2008)

Gracias tio, pero si te refieres al ejemplo lcdkb...  Pues no lo entiendo bien, tal vez uno más didáctico como para "iniciados".Gracias de todos modos.
Palmas.


----------



## tiopepe123 (Mar 17, 2008)

Primero mirate en driver el fichero LCD.C

Un ejemplo podria ser algo como esto



```
#include <16F628.h>
#use delay(clock=4000000)
#fuses NOWDT,WDT,NOPROTECT


#include "Lcd.c"
#define use_portb_lcd TRUE

void main()
{
int a=10;
  lcd_init();
  lcd_gotoxy(1,1);
  printf(LCD_PUTC,"proba 2  %u",a);
  while(TRUE);
}
```

No lo he compilado, pero basicamente es lo que tienes que hacer


----------



## Palmas (Mar 19, 2008)

Gracias, ya logrè sacar texto por el lcd, ahora quisiera conseguir lo mismo pero usando el teclado; es decir, un progrma minimo que me permita lograr usar el teclado, luego ya estudiando mas poder realziar algo cuendo se aprieta tal o cual tecla. Muchas gracias tiopepe.
Palmas


----------



## Palmas (Mar 21, 2008)

Saludos amigos listeros. Hay algo que no entiendo o me estoy confundiendo. El asunto es el siguiente: Leonardo J. da respuesta a un listero y le envia un código para el 16f628 (para usar el lcd) (que lo use con el f84 y funciono bien), pero lo que no entiendo es DONDE esta el "include" para que funcione este lcd. Dentro del comprimido de Leonardo hay un archivo llamado lcd_leo.c pero en el programa no indica su utilización. Osea, tengo entendido que para hacer funcionar un lcd, por ejemplo en ensamblador, se crean una serie de rutinas y para que cada vez no se esté escribiendo estas rutinas, se crea un "include a esta rutina". Alguien podría indicarme (quien si no tu Leonardo) por qué en el programa "...lcd para 16f628...." no se llama al archivo lcd_leo.c? Gracias por las respuestas y disculpen, pero todos creo que tenemos momentos de "bloqueo mental"

Palmas.


----------



## fenatronx (Jun 11, 2009)

Tienes la inicializacion o el archivo .h


----------



## Destripador (Feb 18, 2010)

leo_programer dijo:


> que mas gastón?,
> 
> aqui esta lo que pides, tanto para el 628 como para el 628a, el esquematico por si las moscas, ah!, no lo probe en un protoboard por que no tengo dicho pic, lo probe en proteus(que hay mismo esta el archivo) y algo si se, es que si sirve en proteus, sirve en cualquier montaje real, se lo aseguro, y a mi me sirvio, fijese las funciones y todo, y otra cosa, si no sirve o se ve muy claro, revisa las conexiones que por lo general es lo que fallan, despues si alguien lo pide, publico una libreria mucho mas completa con muchisimas mas opciones, como animaciones y todo eso, por lo pronto, me comenta, cuidese...



Hola.

Lo utilice en el pic 16f877a, unicamente cambie la libreria y en el proteus me corre bien y todo, solo que cuando lo hago fisicamente me aparece el mensaje parcial. solo se ve "Mundo", quisiera saber si es cosa de mi hardware o es la programacion que hay que cambiarle algo.

gracias


----------



## yack (Mar 20, 2010)

hola como estan, destripador el problema puede ser tu hadware muchas LCD son echisas que quiero decir con esto que son fabricadas por gente con poca experiencia en ese tema pero lo que pasa es que tienen un corrimiento de 5 letras si utilizas la libreria de LCD. c del CCS esta incluye una funcion que es lal siguinte

lcd_gotoxy(5,1)

que permite poder por coordenadas los mensajes el 5 indica su pocion sobre el eje X y el 1 su pocion sobre el eje Y checalo y ve si eso lo remedia


----------



## sammaael (Abr 29, 2010)

como saber que pantalla lcd debo comprar en que me debo fijar? varia el programa entre un dispaly lcd y otro ?


----------



## Chico3001 (Abr 30, 2010)

No, casi todos los LCDs "inteligentes" traen el mismo controlador (Hitachi 44780), asique la gran mayoria funcionan aunque sean de diferente fabricante... para mas informacion revisa este tema:

https://www.forosdeelectronica.com/f24/control-display-lcd-microcontrolador-pic-201/


----------



## jalva (May 4, 2010)

Sres:

En el 16f628 y 648 para usar el puerto A con un lcd primero deben apagar los comparadores que de arranque se activan.

Debes poner CMCON en 0x07     (07 en hexa) para apagar los comparadores y poder usar el port A como I/O.

Alguna vez un moderador dijo ( creo que fué Fogonazo, no lo recuerdo bien): 
LEAN LAS HOJAS DE DATOS...!
Un gran consejo que me ayudó mucho...!

Suerte con el LCD.


----------



## ELCHES (Jun 9, 2010)

Como estas...muy interesante tu programa...y gracias por ello...perr quisiera saber si tu sabes como modificar la librería de PICC lcd.c para utilizar el puerto B del PIC16F628A para solo llamar a esa librería y no poner tanto código!

O tal vez sepas de algun problema que pueda existir con este pic y dicha librería...gracias de antemano!!!


----------



## Cesiir (Ene 15, 2011)

hola foreros, que tal?? estoy realizando un proyecto para el instituto, y estoy haciendo un termómetro, y quiero mostrar la temperatura en el lcd. Pues bien, de momento solo veo la linea de arriba, la del contraste, y no se exactamente si le llegan datos al lcd,creo que si...   entonces pongo mi programa a continuacion para ver si me podéis echar una mano y lográis ver algo que pueda modificar. 
 Cuando pruebo el lcd aun no le conecto el sensor de temperatura lm35, y he probado otros programillas en plan mostrar un "hola mundo" y nada. MXAS GRACIAS


#include <18f4550.h>
#device adc =16
#fuses XTPLL,noMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,NOVREGEN,INTRC_IO
#use delay(clock=12000000)
#use standard_io(A)
#use standard_io(B)
#use standard_io(C)
#use standard_io(D)
#include <lcd.c>

void main()
{
   long vtem=0;
   int  temp=0;         //temperatura a mostrar en grados.

   //setup_oscillator(OSC_4MHZ);
   lcd_init();
   setup_adc_ports(AN0||VSS_VDD);               //Se configura el CAD.
   setup_adc(ADC_CLOCK_INTERNAL);
   //setup_counters(RTCC_INTERNAL,RTCC_DIV_2);   //TIMER0: Clock Interno y Preescaler
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_oscillator(False);

    while (TRUE)
   {

set_adc_channel(0);          //seleccion  de canal cad.
vtem=read_adc();             //Se carga variable con el valor del cad.
temp=(vtem*5)/655.35;        //Formula Para pasar de decimal a grados.


//printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"vtem= %ld",vtem);
delay_ms(50);
lcd_gotoxy(1,2);
printf(lcd_putc,"TEMP: %d",temp);
delay_ms(50);
//delay_ms(6000);

   }
 }


----------



## gzaloprgm (Ene 16, 2011)

Cesiir dijo:


> hola foreros, que tal?? estoy realizando un proyecto para el instituto, y estoy haciendo un termómetro, y quiero mostrar la temperatura en el lcd. Pues bien, de momento solo veo la linea de arriba, la del contraste, y no se exactamente si le llegan datos al lcd,creo que si...   entonces pongo mi programa a continuacion para ver si me podéis echar una mano y lográis ver algo que pueda modificar.
> Cuando pruebo el lcd aun no le conecto el sensor de temperatura lm35, y he probado otros programillas en plan mostrar un "hola mundo" y nada. MXAS GRACIAS



Asegurate que estén bien conectadas todas las patas como dice el lcd.c, y antes de lcdInit agregá un delay de 20 milisegundos.

Si no tenés osciloscopio/analizador lógico, podrías usar un simulador como proteus para ver qué está haciendo el código.


----------



## Cesiir (Ene 16, 2011)

En el proteus lo simulo y me funciona perfectamente, y creo que las patillas están bien, utilizo solo 4 bits y conecto desde la patilla 7 del puerto D hasta la 4,, desd D7 hasta D4, con sus respectivo enable, R/W...
Seguiré intentando cosejas a ver, aunq creo que mi problema puede provenir del tiempo al que funciona el pic, no se exactamente si estoy haciendo funcionar el reloj interno del pic a 4MHZ o no...


----------



## ulimar7813 (Ene 27, 2011)

hola disculpame las molestias es q no tengo a quien recurrir q me pueda solucionar mi problema
te comento tengo una placa entrenadora con lcd y no puedo configurar los pines  no se como poreso nesesito una mano 
estos son los datos q tengo 


Configuracion de LCD a 4 BITs

RB0 a RB3   datos 
RB4 RS
RB5 rw
RB6 E

Todo el ( Puerto B ) ademas de ser configurado directamente a LCD contiene disponibles 
de manera paralela a los LEDs desde RB0 a RB7.

Los leds estan seteados en dos partes RB0 a RB3 y RB4 a RB7 a negativo, por un jumper que puede ser levantado para disponer del HEADER y usar un protoboard externo, como entradas etc, independientemente.

Los pulsadores RA0 a RA3 contienen una resitencia pull up de 4k7 y capacitores de .1 para eliminar ruidos.

Las resistencias de los pulsadores RA0 y RA1 estan eliminadas opcionalemnte de fabrica de manera que al colocar los PRESET analogicos para desarrollar aplicaciones analogicas no compliquen su uso, de manera
que si se requiere tener estos pull up se alojan los presets en el centro, para poder usar digitalmente las entradas, si no fuere asi dispone de RA0 y RA1 normalmente para conversiones analogas en PICs como los 16F818. 

El reloj de tiempo real a 32khz esta directamente conectado a la linea de 28 y 40 dip para su uso.

La memoria Serial 24LC256 esta conectada directamente a la linea de 28 y 40 dip por SCK y SDK de esta linea de PIC.

a estoy usando un pic 18f2550
gracias por tu ayuda

El Max232 esta comunicado directamente a las señales RX y TX para la linea 28 y 40 DIP.

El reset es general para todas las lineas desde 18 a 40 dip.

El cristal general des de 4mhz.

El buzzer y o led PWM esta conectado y seteado segun se elija uno u otro por jumper a PWM RC2.

El sensor de temperatura es del tipo TC74   RC4 y RC3

La programacion puede ser via ISCP por RJ o por Header lineal.

La alimentacion puede ser por batteria 9v.

La alimentacion maxima 12v 500 ma.


TODOS LOS ZOCALOS PARA PIC DESDE 18, 28 Y 40 DIP, ESTAN COMUNICADOS DE MANERA PARALELA CON SUS CORRESPONDIENTES PORTS DE MANERA DE PODER USAR Y EMIGRAR DE MICRO SIN PROBLEMAS.


----------



## jumu (Ago 10, 2011)

Hola a todos, yo tengo un problema y no se si es el ccs o proteus pero cuando quiero simular en proteus el pic16f628a con un lcd de 16x2 no me sale el mensaje, solo se enciende la pantalla y eso es todo...he buscado por todos lados he puesto otras librerias de lcd.c y nada...me gustaria saber como puedo solucionar este problema o si a alguien le paso y ya lo soluciono...de ante mano muchas gracias...


----------



## donovanct (Sep 19, 2011)

GRACIAS me sirvio muchisimo


----------



## olinqui (Nov 5, 2011)

jumu dijo:


> Hola a todos, yo tengo un problema y no se si es el ccs o proteus pero cuando quiero simular en proteus el pic16f628a con un lcd de 16x2 no me sale el mensaje, solo se enciende la pantalla y eso es todo...he buscado por todos lados he puesto otras librerias de lcd.c y nada...me gustaria saber como puedo solucionar este problema o si a alguien le paso y ya lo soluciono...de ante mano muchas gracias...





Hola amigo a mi me paso lo mismo para simular LCD en ensamblador pero con la simulación en C de leo_programer ya no tuve problemas con el ejemplo de arriba trabaja de 10


----------



## COSMICO (Ene 26, 2012)

Aqui es donde el viajeroo, toca la puerta.
No puedo hacer, que en proteus, o el circuito real
me salga el simbolo de "ºC", solo se ve la "C", el otro caracter  "º" , se ve asi "¬"
Alguie pudo, con este dilema.
he bajado cantidad de ejemplos de la web, pero ninguno, lo usa.
Mi idea, seria leer la tabla de caracteres que trae el lcd, pero como està en dos.
solo puedo leer la de la primera..No se como acceder a la segunda tabla, pues alli se encuentra el simbolo que necesito..
El programa es para un termometro en ºC, y esta hecho en ccs c..
No encuentro en ningun hilo èsto..
Gracias...


----------



## arrivaellobo (Ene 26, 2012)

El símbolo "º", en las LCD, por lo menos la mía, tiene el valor ASCII 223.
Solo envíaselo al LCD de ésta manera:

*printf(lcd_putc "%c" ,223);*


----------



## COSMICO (Ene 26, 2012)

arrivaellobo.
hola amigo.
Mira; ese simbolo no corresponde exactamente al de "º", y lo estoy usando, pero no corresponde, pues es un cuadrado.
el simbolo esta en la tabla extendida CGROM, de los lcd con controlador, 44780 de hitachi.
Pero no se como acceder a esta segunda tabla, la primera, si la uso, pero la otra no se como
pues tiene las mismas posiciones de memoria, pero muestra otra direccion de acceso.
Dice ROM CODE A02..
¿Como le meto este comando al lcd, en ccs c?


----------

