# Problema con LCD 16x2



## Joseph (Nov 30, 2010)

Hola a todos, tengo un problema con la implementacion de un LCD, estoy usando un LCD de 16x2 AGENA AA16202







y un PIC16F877A con oscialador de 4MHz, utilizo PICC para la programacion y la libreria LCD.c que viene con el PICC. El problema es que puedo simularlo sin problemas en el Proteus, pero cuando lo implemento tengo que apretar varias veces el MCLR y recien me aparecen ????, por ejemplo al querer mostrar "HOLA", despues de presionar varias veces el MCLR obtengo ????/, cada vez que  apreto el MCLR se mueve a la derecha.

No entiendo por que sucede eso..

¿Alguna idea de que puede estar fallando?

Gracias por su ayuda.


----------



## Zankoku (Nov 30, 2010)

Hola, un poco raro que funcione en tu simulación y no en la implementación específicamente por lo que comentas que debes presionar varias veces el MCLR, puedo equivocarme pero podría ocurrir que estes conectando incorrectamente el MCLR en tu protoboard si es lo que usas, para el funcionamiento normal 16f877a debes conectar el pin 1 del pic a vcc mediante una resistencia limitadora (10k), ahora si deseas trabajar en reset bueno eso lo puedes hacer mediante el pulsador que implementes enviando a gnd ese pin.
Resumiendo, en mi humilde opinión, tal vez tu programa no arranque porque tienes activo el MCLR el pic(esto es que ese pin este conectado a gnd), revisa tu conexión puede que sea ese el problema.


----------



## kiws (Nov 30, 2010)

lo mas probable es que te falte poner la resistencia del MCLR a vcc pero también deberías ver la programación a lo mejor lo despliegas muy rápido o conectaste mal uno de los pines de control (RW-R-E).


----------



## Joseph (Dic 1, 2010)

Hola, gracias por sus respuestas, el problema se debia a que el LCD estaba fallado y la frecuencia del programa era distinta a la de mi cristal.


----------



## carl69 (May 15, 2013)

tengo el mismo problema que muchos de aqui, que al encender el circuito solo muestra la fila de arriba recuadros, ya varie el contraste, lo unico que sucede es que los recuados se hacen luminosos o muy obscuros al grado de desaparecer, por alli lei que alguien lo soluciono cambiando el valor de LCD_Type = 1 por el valor LCD_Type = 2 yo alli tengo 0, igual tendria que ponerle el valor 2 ? y por que, el programa esta hecho en basic, espero me ayuden y muchas gracias


----------



## D@rkbytes (May 15, 2013)

Adjunta tu programa y esquema para poder determinar en donde se encuentra el problema.


----------



## franklin jhonny (May 16, 2013)

ahi t mando un ejemplo echo en micro basic


----------



## carl69 (May 17, 2013)

D@rkbytes dijo:


> Adjunta tu programa y esquema para poder determinar en donde se encuentra el problema.




aqui dejo el programa y la imagen del circuito, quite lo demas, solo deje el display y el pic que desmonte todo y se supone que con el pic debe mostrar almenos el mensaje de Introducir clave y no lo hace, no se si el programa o las conecciones esten mal, aunque en la simulacon si funciona 

El display que uso dice en la parte de abajo 1602A, dice que usa un controlador KS0066U



franklin jhonny dijo:


> ahi t mando un ejemplo echo en micro basic



En este ejemplo pones un f16877 y el mio es un f16877A

al cargarlo en el pic dice...

El archivo Hex super la capacidad Maxima.


----------



## D@rkbytes (May 17, 2013)

Saludos.
Lo que tienes que hacer es, probar la pantalla con un programa sencillo, el clásico "Hola Mundo"
.- Verificar bien las conexiones de alimentación y reset del PIC.
.- Cerciórate que el cristal sea de la frecuencia declarada en el programa.
.- Prueba quitando los capacitores, algunos cristales los tienen internos.
.- Destina un pin para poner un LED testigo, hazlo parpadear para determinar que el oscilador funcione.

Si sigue sin funcionar, intenta cambiando de puerto, para comprobar que no sea una falla del PIC.

Nota: El ejemplo de @franklin-jhonny es para un PIC16F887, no para un PIC16F877

Suerte.


----------



## carl69 (May 17, 2013)

D@rkbytes dijo:


> Saludos.
> Lo que tienes que hacer es, probar la pantalla con un programa sencillo, el clásico "Hola Mundo"
> .- Verificar bien las conexiones de alimentación y reset del PIC.
> .- Cerciórate que el cristal sea de la frecuencia declarada en el programa.
> ...



pues las conecciones ya estan verificadas
tambien ya quite los capacitores
tiene declarado el valor del cristal que es de 10

Aqui esta el mensaje de introducir la clave unicamente


```
Device=16F877A

 Xtal=10

Reminders = FALSE
     Config HS_OSC, PWRTE_ON, CPD_OFF, WDT_OFF, BODEN_OFF, LVP_OFF
Reminders = TRUE


    LCD_DTPin = PORTD.4
    LCD_RSPin = PORTD.2
    LCD_ENPin = PORTD.3
    LCD_Interface = 4
    LCD_Lines = 2
    LCD_Type = 0

      
        


                                 ' por flanco de subida.

All_Digital = TRUE               ' Todas las entradas y salidas son digitales.
                                                                              




TRISA  = %00000000
TRISB  = %11111111               ' Puerto A y B todo entradas.
TRISC  = %00000000               ' Puerto C como salida para visualizar a través de los LED.
TRISD=0
 OPTION_REG.7=0  
 PORTC=255        
inicializa:
 
   
   
    
    Cls
     Print At 1,1,"Teclee Clave:"
```

se uso Proton ide


----------



## D@rkbytes (May 18, 2013)

El problema no es por código, te dije que cambiaras de puerto para probar.

Prueba con este programa...

```
; Definir el PIC a utilizar
Device 16F877A
Reminders = 0
; Definir los fuses que usaremos en la palabra de configuración
Config HS_OSC,PWRTE_ON,WDTE_OFF,LVP_OFF,BOREN_OFF
Reminders = 1
; Establecer que trabajaremos con 10MHz
Xtal = 10MHz

; Configuración de los pines del LCD
Declare LCD_Type    Alpha       ; Alfanumérico
Declare LCD_DTPin   PORTB.4     ; Bus de datos de RB4 a RB7
Declare LCD_RSPin   PORTB.2     ; Pin RS en RB2
Declare LCD_ENPin   PORTB.3     ; Pin E en RB3
Declare LCD_Interface   4       ; Modo 4 Bits
Declare LCD_Lines       2       ; Pantalla de dos líneas

MainStart:
    Cls                         ; Limpiar e inicializar la pantalla LCD
    Print At 1,1,"16F877A LCD 16x2" ; Escribir en la primer línea
    Print At 2,4,"Hola Mundo"       ; Escribir en la segunda línea
    
MainProgram:
    Toggle PORTD.1              ; Parpadear un LED por el pin 20 cada segundo
    DelayMS 1000
    GoTo MainProgram
    
    End
```
Suerte.


----------



## carl69 (May 18, 2013)

asi es tu programa funciona,ya lo puse y esta de 10, crees que me podrias ayudar a acomplar mi codigo completo con este tuyo ??


----------



## D@rkbytes (May 19, 2013)

carl69 dijo:


> asi es tu programa funciona,ya lo puse y esta de 10, crees que me podrias ayudar a acomplar mi codigo completo con este tuyo ??


Lo que tienes que hacer es cambiar de puerto, obviamente tanto en código cómo en diseño.
Por ahora no tengo el PIC16F877A para hacer pruebas con Proton.
Sin embargo tuve problemas con Proton y PICBasic al tratar de usar la pantalla por el puerto D.
Incluso tampoco lo pude hacer funcionar en un PIC18F4550 por el puerto D, ni usando LATD.

Si quieres, y así salimos de dudas los dos, puedes probar con un ejemplo en PICC (PCWHD Compiler)
En el compilador que menciono, al seleccionar el tipo de PIC, hace el cambio de puertos.
Y al seleccionar un 16F877A, direcciona los pines de control y datos, al puerto D.

Adjunto el ejemplo por si lo quieres probar, y nos cuentas si funciona por el puerto D.
Por lo mientras, veré si puedo hacer funcionar en PICC, o ensamblador, el LCD por el puerto D, en un 18F4550.

Suerte.


----------



## carl69 (May 19, 2013)

mi teclado lo tenia conectado en los pines RB4 a RB7 y en Rc0 a RC3 como se cambio el display a los pines RB4 a RB7 a que pines puedo mandar mi display ? se podra usar RB0 a RB3 ?


----------



## DJ T3 (May 19, 2013)

Si tu teclado utiliza interrupciones por puerto B, no puedes ponerlo en el RB0-RB3, ya que esos pines no tienen interrupciones por cambio de estado.

Si no es el caso, si puedes utilizar los pines mencionados, pero recorda ponerlo en el programa.

PD: No se del lenguaje que usas...


----------



## D@rkbytes (May 19, 2013)

carl69 dijo:


> mi teclado lo tenia conectado en los pines RB4 a RB7 y en Rc0 a RC3 como se cambio el display a los pines RB4 a RB7 a que pines puedo mandar mi display ? se podra usar RB0 a RB3 ?


Sube tu proyecto completo para ver la forma de re acomodar los pines.

PD. No logré que funcionara la pantalla con el 18F4550 por el puerto D en PICC.
Probé de todo y nada, ya me cansé de leer la hoja de datos y no encontré nada extraño.
Algo debo estar pasando por alto, pero ya no se me ocurre que pueda ser.


----------



## DJ T3 (May 19, 2013)

D@rkbytes dijo:


> PD. No logré que funcionara la pantalla con el 18F4550 por el puerto D en PICC.
> Probé de todo y nada, ya me cansé de leer la hoja de datos y no encontré nada extraño.
> Algo debo estar pasando por alto, pero ya no se me ocurre que pueda ser.


Subí el código, y me fijo qué puedo encontrar... De última lo simulo en ISIS, porque solo tengo el 2550...


----------



## carl69 (May 19, 2013)

D@rkbytes dijo:


> Sube tu proyecto completo para ver la forma de re acomodar los pines.
> 
> PD. No logré que funcionara la pantalla con el 18F4550 por el puerto D en PICC.
> Probé de todo y nada, ya me cansé de leer la hoja de datos y no encontré nada extraño.
> Algo debo estar pasando por alto, pero ya no se me ocurre que pueda ser.



listo, aqui esta


----------



## D@rkbytes (May 19, 2013)

DJ T3 dijo:


> Subí el código, y me fijo qué puedo encontrar... De última lo simulo en ISIS, porque solo tengo el 2550...


Gracias por el interés.
Quiero hacer unos comentarios...
.- El problema es al tratar de usar la pantalla por el puerto D, por el puerto B funciona correctamente.
.- He configurado algunas cosas... Fuses, registros (SPPCON, SPPCFG)
.- El puerto D es un puerto paralelo (Streaming Parallel Port) sólo disponible en los PIC de 40/44 pines.
.- En la simulación funciona sin problemas, físicamente la pantalla muestra los clásicos cuadros negros. (Primer línea)

Adjunto el programa básico, sólo escribe en la pantalla, y hace parpadear un LED testigo (pin 40)

Nota: Utilizo el oscilador interno a 8MHz.

Saludos.


----------



## D@rkbytes (May 19, 2013)

carl69 dijo:


> listo, aqui esta


OK.
Disculpas por no haber dado respuesta antes, estuve algo ocupado.

Hice algunas modificaciones tanto al código cómo al diseño para adaptar la pantalla al puerto C.
Ésto con el motivo de utilizar el puerto B para el teclado, y poder usar las resistencias pull-up internas.

Pruébalo con las nuevas modificaciones y nos comentas el resultado.

Suerte.


----------



## carl69 (May 20, 2013)

D@rkbytes dijo:


> OK.
> Disculpas por no haber dado respuesta antes, estuve algo ocupado.
> 
> Hice algunas modificaciones tanto al código cómo al diseño para adaptar la pantalla al puerto C.
> ...



pues al grabar la memoria dice que la graba, pero luego le doy en verificar y me marca este error

y luego pues lo cargo para ver en la proto y me aparece el mensaje de " Teclee C " y no pasa nada, me puse a teclear todas las teclas y con la B aparece el mensaje de "Cambiar" pero tecleo numero y no aparecen los asteriscos ni numeros ni nada


----------



## D@rkbytes (May 20, 2013)

carl69 dijo:


> me puse a teclear todas las teclas y con la B aparece el mensaje de "Cambiar" pero tecleo numero y no aparecen los asteriscos ni numeros ni nada


Debes tener mal las conexiones del teclado, revisa el orden.


carl69 dijo:


> pues al grabar la memoria dice que la graba, pero luego le doy en verificar y me marca este error


Busca información acerca de ese error de Master-Prog en el Foro.

Saludos.


----------



## carl69 (May 20, 2013)

por que cuando predo el display no aparece el mensaje " introducir clave " aparece directamente el tecle C

Edit::

ya revise las conecciones y estan bien, me pide tecla C y funciona con la B, aunque es un dealle menor,  despues tecleo B y me pide que introduzca una nueva clave, primero tengo que poner la original para que me pida una clave nueva, pero pongo la nueva y no pasa nada se queda pidiendo la tecla nueva, pero si cuando voy a introducir la clave original para cambiarla, esa la meto mal, alli si me marca error... Y no aparezen los asteriscos cuando tecleo algo en ningun caso


----------



## gtronick (May 20, 2013)

carl69 dijo:


> pues al grabar la memoria dice que la graba, pero luego le doy en verificar y me marca este error
> 
> y luego pues lo cargo para ver en la proto y me aparece el mensaje de " Teclee C " y no pasa nada, me puse a teclear todas las teclas y con la B aparece el mensaje de "Cambiar" pero tecleo numero y no aparecen los asteriscos ni numeros ni nada



Lo que debes hacer primero, es descartar que el microcontrolador esté dañado. A mi me aparecía ese error en PICpgm programmer, se devía por malas conexiones, o voltaje de alimentación insuficiente en el micro. También puedes probar bajando la velocidad de programación.

Para verificar el micro, intenta crear un programa sencillo, como encender un LED, lo programas y verificas.

También puedes primero: 

Borrar el micro

Segundo: Programar el MCU con el programa básico (Recuerda configurar correctamente los pines) un ejemplo:

//Si usas compilador XC, y un cristal de cuarzo de menos de 10MHz

#include <xc.h>

//Si alguno de los siguientes presenta problemas, comentarealo o eliminalo
#pragma config WDTE=OFF    //Perro guardian deshabilitado
#pragma config FOSC=XT      //Cristal de menos de 10MHz
#pragma config LVP=OFF      //Programación a bajo voltaje deshabilitada
#pragma config CP=OFF       //Protección de codigo deshabilitada
#pragma config PWRTE=OFF  //Power-ON reset deshabilitado

#define LED PORTBbits.RB5

void main(void)
{
    TRISBbits.TRISB5=0;  //Configuro puerto como salida
     LED=1;                   //Enciendo el LED

     while(1)                  //Ciclo infinito para que no se resetee el micro
     {

     }
}


Tercero: verificar voltajes.


----------



## carl69 (May 20, 2013)

gtronick dijo:


> Lo que debes hacer primero, es descartar que el microcontrolador esté dañado. A mi me aparecía ese error en PICpgm programmer, se devía por malas conexiones, o voltaje de alimentación insuficiente en el micro. También puedes probar bajando la velocidad de programación.
> 
> Para verificar el micro, intenta crear un programa sencillo, como encender un LED, lo programas y verificas.
> 
> ...



ya cheque eso, era por *que* en el programa D@rkbytes cambio el valor de CPD_ lo puso en on


----------



## D@rkbytes (May 20, 2013)

carl69 dijo:


> por que cuando prendo el display no aparece el mensaje " introducir clave " aparece directamente el tecle C
> 
> Edit::
> 
> ya revise las conecciones y estan bien, me pide tecla C y funciona con la B, aunque es un dealle menor,  despues tecleo B y me pide que introduzca una nueva clave, primero tengo que poner la original para que me pida una clave nueva, pero pongo la nueva y no pasa nada se queda pidiendo la tecla nueva, pero si cuando voy a introducir la clave original para cambiarla, esa la meto mal, alli si me marca error... Y no aparezen los asteriscos cuando tecleo algo en ningun caso


Definitivamente tienes dañado tu PIC.
Me acaban de traer un PIC16F877A, y la pantalla funciona perfectamente por el puerto D.
Lo probé con el mismo programa del post #11 cambiando al puerto D, y no existe ningún problema.
También probé el programa del post #13 con el mismo buen resultado.

Si cómo mencionas, ya revisaste bien tus conexiones, entonces reemplaza el PIC,
ya que cómo te mencione anteriormente, no es problema de software.

Suerte.


----------



## carl69 (May 20, 2013)

D@rkbytes dijo:


> Definitivamente tienes dañado tu PIC.
> Me acaban de traer un PIC16F877A, y la pantalla funciona perfectamente por el puerto D.
> Lo probé con el mismo programa del post #11 cambiando al puerto D, y no existe ningún problema.
> También probé el programa del post #13 con el mismo buen resultado.
> ...



pues lo del post post #11 y el post #13  me funciono bien, alli mismo comente que si funciono a la perfeccion, lo que comente arriba es lo del proyecto completo que subiste ya con el teclado donde pusiste en le puerto B el display en el C el teclado...

Este proyecto que modificaste no lo haz cargado en tu pic que te acaban de traer ?


----------



## D@rkbytes (May 20, 2013)

carl69 dijo:


> pues lo del post post #11  me funciono bien, alli mismo comente que si funciono a la perfeccion, lo que comente arriba es lo del proyecto completo que subiste ya con el teclado donde pusiste en le puerto B el display en el C el teclado...


Ahí mencionaste que funcionaba por el puerto B.
Lo que yo verifique ahora, es que ese mismo programa funciona también por el puerto D.
Lo cual quiere decir que los programas y el PIC no tienen problema para usar la pantalla por el puerto D.


carl69 dijo:


> Este proyecto que modificaste no lo haz cargado en tu pic que te acaban de traer ?


Si, y funciona sin problemas, incluso tampoco tengo problemas al grabar el PIC con protección.
Aclaro que utilicé WinPic800 con el JDM por ICSP para grabar el PIC.
Cómo no tengo un teclado matricial 4x4, hice las pruebas conmutando los pines del puerto B.
Por ejemplo para la clave inicial que es 12345, entonces hago lo siguiente...
Para el número 1 se conmuta RB0 con RB4
Para el número 2 se conmuta RB0 con RB5
Para el número 3 se conmuta RB0 con RB6
Para el número 4 se conmuta RB1 con RB4
Para el número 5 se conmuta RB1 con RB5
Así consigo la secuencia de la clave 12345, y los mensajes se muestran correctamente en la pantalla.
Las rutinas trabajan bien, y no existen problemas, por eso te digo que cambies el PIC.

En la corrección anterior no quité las variables que no se usan.
Y la rutina para leer la clave inicial en la EEPROM, estaba mal y no funcionaba.
Es decir, siempre al iniciar, la clave sería 12345, con este nuevo cambio se guarda la clave cambiada.
Y al desconectar el PIC, o dar un reset, se lee la clave que se guardó últimamente.

Adjunto el programa con los nuevos cambios, y usando optimización de código.

Notas:
.- Como no puedes grabar el PIC con protección de datos en EEPROM, cambie el fuse por CPD_OFF
.- Para borrar los datos de la EEPROM en la simulación, ir al menú Debug/ Reset Persistent Model Data
.- Si tu PIC está dañado, estos cambios no harán que funcione.

Saludos.


----------



## carl69 (May 20, 2013)

mañana compro un nuevo pic, aunque este es nuevo, quiza salio dañado


----------



## DJ T3 (May 22, 2013)

Hola, D@rkbytes, ya que sos moderador, podrías poner nuestros mensajes, en uno nuevo, así no desvirtuamos el tema inicial... 

En el archivo LCD_TEST, te faltó;

*#define* LCD_DATA_PORT *getenv*(*"SFRORTD"*)

Fijate si funciona con la modificación que hice...

PD: No tengo un 4550 para probarlo.
PD2: ¿Probaste si el puerto D está funcionando?...
PD3: No incluí el archivo LCD.c, porque usé el del CCS..


----------



## D@rkbytes (May 23, 2013)

DJ T3 dijo:


> Hola, D@rkbytes, ya que sos moderador, podrías poner nuestros mensajes, en uno nuevo, así no desvirtuamos el tema inicial...
> 
> En el archivo LCD_TEST, te faltó;
> 
> ...


Saludos, y gracias.
Dejemos los posts aquí, para no crear un tema mas acerca de problemas con LCD.

Precisamente hoy que fui por un pedido con el distribuidor de Microchip aquí en México,
les hice el comentario acerca de la falla que tenía con una pantalla conectada por el puerto D.
Enseguida llamaron a una de las personas que imparten los cursos, y me dijo que no debía de haber problema.
Inmediatamente modificó un programa para usar el puerto D con una pantalla 16x2, y funcionó. 

El programa no tenía nada extraño que yo hubiera pasado por alto, así que decidí comprar otro PIC.
A final de cuentas, me regalaron el PIC y apenas hace un rato lo probé.
El problema es que el PIC está dañado. Por alguna razón el pin RD7 no sirve. 

Ahora con respecto a agregar...
*#define* LCD_DATA_PORT *getenv*(*"SFRORTD"*)
Ésta definición es la que se usa por default en el PIC18F4550, así que sin agregarla funciona.

Muchas gracias nuevamente por tomarte la molestia de revisar el programa.
Ahora ya sabemos que el puerto D es apto para trabajar la pantalla, y que la falla estaba en el PIC.

​ 
Saludos.


----------



## DJ T3 (May 23, 2013)

D@rkbytes dijo:


> Saludos, y gracias.
> Dejemos los posts aquí, para no crear un tema mas acerca de problemas con LCD.
> 
> [...]
> ...


Excelente, y disculpa por desvirtuar. Me parecía que algo pasaba, y era el puerto del PIC.

Saludos...


----------



## rdr23 (May 25, 2013)

Buenas tardes,

Primeramente saludar al foro soy nuevo en todo esto de los foros y también de esta parte de electrónica, nueva para mi a raíz de hacer algunos montajes en clase y curiosidad por seguir “trasteando” en casa con tiempo y con bastante curiosidad.

El problema que tengo es que no consigo visualizar en el LCD el texto programado en el PIC, la misma practica funciono en clase hace unos meses a la primera y sin problemas y ahora estoy cargando el ejercicio guardado en “.hex” en mi programadora en casa y no encuentro la manera de hacerla funcionar, igualmente he intentado realizar un proyecto  nuevo con LCD, incluso alguno otro distinto y la pantalla se queda igual sin mostrar el texto, otro tipo de montajes sin LCD funcionan sin problemas.

El ajuste del contraste y la iluminación de la pantalla se pueden visualizar sin problemas.

El ejercicio trata de 2 pulsadores y un led indicador, encendido y apagado con el mensaje de paro y macha en la pantalla, decir también que el encendido  del led funciona correctamente.
El ejercicio esta realizado con el programa Flowcode, la simulación en el programa es también correcta.

He podido seguir algún hilo en el foro exactamente con el mismo problema pero ni así he podido aun resolver, si hay alguien que pueda echarme una mano o alguna orientación, estoy seguro que se trata de alguna tontería o error de conexión o algo que se me escapa casi estoy seguro que no es cosa del programa ni del PIC, hasta parece al pulsar "PARO" - "MARCHA" que la función la hace, pero no se visualiza bien.

Adjunto el esquema del montaje realizado y foto de la pantalla con lo que hasta ahora se puede ver en ella

Desde ya gracias, un saludo


----------



## rdr23 (May 26, 2013)

He conseguido finalmente que me funcione con algunas variaciones en el circuito respecto al que que hice en clase, el LCD era distinto al que tengo ahora y creo que hay alguna variación en algún cable. En este caso t*AM*b*IEN* he añadido una resistencia conectada al borne central de regulación del potenciómetro, conectada a masa, lo he podido leer en algún lado y después de mirar y mirar conectar... soldar y echarle algún rato que otro funciona. Otra cosa que he podido ver es que en algún momento el LCD arranca con símbolos raros, desconecto la alimentación del LCD vuelvo arrancar y perfectamente. Seguiré trasteando ahora que se que funciona.... hasta me sorprende que funcione aun, no tenia ya muchas esperanzas de que siguiera en buenas condiciones y mucho menos conseguirla arrancar.

saludos y feliz domingo


----------



## DJ T3 (May 27, 2013)

rdr23 dijo:


> He conseguido finalmente que me funcione con algunas variaciones en el circuito respecto al que que hice en clase, el LCD era distinto al que tengo ahora y creo que hay alguna variación en algún cable


Te felicito, pero fijate en la imagen de la protoboard que el LCD es de 16 pines, que sería:

1.- VSS (GND, masa, 0V)
2.- VDD (+5V)
3.-Vlcd (contraste)
4.- RS ( Register Select)
5.- R/W ( Read/Write)
6.- E ( Enable)
7.- DB0 (DataBit0)
8.- DB1 (DataBit1)
9.- DB2 (DataBit2)
10.- DB3 (DataBit3)
11.- DB4 (DataBit4)
12.- DB5 (DataBit5)
13.- DB6 (DataBit6)
14.- DB7 (DataBit7)
15.- LED+ (LED BackLight = Ánodo)
16.- LED- (LED BackLight = Cátodo)

Vos conectaste mal los cables de "data", contaste los pines del backlight como uno de datos... 

Ver el archivo adjunto 93060


----------



## rdr23 (May 27, 2013)

DJ T3 gracias 

Si me di cuenta q*UE* falle algo en esos 4 o 6 cables mejor dicho, el tema es que en el primer montaje en clase la pantalla era distinta a la que compre yo y intente respetar el conexionado hasta el ultimo momento q*UE* conseguí que funcionara viendo algunas diferencias respecto al otro montaje, lo único q*UE* aun no he tenido tiempo de mirarlo bien todo y compararlo con el otro montaje.

En lo que pueda lo miro y rectifico el esquema que no me cuesta nada 

saludos


----------



## rdr23 (May 28, 2013)

Correcto DJ T3 la otra pantalla tenia 14 bornes de conexión en lugar de 16 que fue mi montaje en casa, se me pasó por completo en todo momento sin caer que la otra LCD no era retro iluminada.

Adjunto esquema nuevo

Saludos!


----------



## cguerrero1205 (Ene 17, 2014)

Hola amigos del foro...

Estoy haciendo mi primer proyecto con LCD, hice un código de "ejemplo" algo sencillo, pero el LCD no hace nada  cuando inicio el micro el LCD parpadea pero vuelve y se apaga.
Y cuando presiono el botón vuelve y hace lo mismo  en proteus funciona bien, no me da ningún error...

¿Qué puede ser? Ayuda.

Este es el código


```
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : Carlos Guerrero                                   *
'*  Notice  : Copyright (c) 2014 Carlos Guerrero                *
'*          : All Rights Reserved                               *
'*  Date    : 17/01/2014                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
;-------------------------- Base settings --------------------------
                                                                   
Device = 16F887   ; Chosen Picmicro
Xtal = 8
Config1 INTRC_OSC_NOCLKOUT, PWRTE_ON, MCLRE_ON, CP_OFF, CPD_OFF, WDT_OFF, FCMEN_ON, IESO_OFF, LVP_OFF, BOR_OFF
Config2 WRT_OFF, BOR21V
ANSEL = 0
ANSELH = 0
OSCCON = $74
                                                                   
;----------- LCD --------------------------
                                                                   
Declare  LCD_Type ALPHA   ; LCD type - alphanumeric
Declare  LCD_DTPin  PORTA.0   ; LCD data port
Declare  LCD_ENPin  PORTB.3   ; E line
Declare  LCD_RSPin  PORTA.4   ; RS line
Declare  LCD_Interface  4   ; Word length of the tyre of data
Declare  LCD_CommandUs  2000   ; Delay before a command parcel
Declare  LCD_DataUs  50   ; Delay before a data parcel
Declare  LCD_Lines   2   ; LCD lines number
                                                                   
;-------------------------- Ports --------------------------
                                                                   
TRISA = 0
TRISB = 0
TRISC = 1
TRISD = $F7
TRISE = 1                                                                   
#define  PortB_Pullups = On   ; Turn on PORTB pull-ups
Declare  All_Digital = On   ; Set all ports digital inputs/exits
                                 
;------------------- Symbols --------------------------
                                  
Symbol   LED1 = PORTD.0   ;LED_IN
Symbol   MO = PORTD.1   ;MENU/OK
Symbol   DOWN = PORTD.2  ;DISMINUIR DIAS/MES
Symbol   UP = PORTD.3   ;AUMENTAR DIAS/MES
Symbol   LED = PORTB.7

;------------------- Variables -------------------------
                                  
Dim   VAR1  As  Byte   ;IN
Dim   VAR2  As  Byte   ;CONTEO DE MES 1-3
Dim   VAR3  As  Byte   ;MO
Dim   VAR4  As  Byte   ;DOWN
Dim   VAR5  As  Byte   ;UP
Dim   EE  As  Byte   ;
Dim   LE  As  Byte   ;
Dim   DIA  As  Byte   ;
Dim   MES  As  Byte   ;
Dim   IN  As  Byte   ;
Dim   FUN  As  Byte   ;
Dim   POS As Byte
Dim   RESULTADO  As  Word
Dim   B0 As Byte ;VARIABLE PARA MOVIMIENTOS
Dim   B1 As Byte ;VARIABLE PARA MOVIMIENTOS

VAR1 = 0
VAR2 = 0
VAR3 = 0
VAR4 = 0
VAR5 = 0
EE = 0
LE = 0
IN = 0
POS = 0
RESULTADO = 0
EWrite $FF, [0]
VAR2 = ERead $7F
MES = ERead $FD
DIA = ERead $FE

DelayMS 500                                                              
;-------------------------------- Start ----------------------------
For B0 = 0 To 5
Low LED
DelayMS 500
High LED
DelayMS 500
Next
INICIO:

PRESENTACION:
Print $fe, 1 ' Limpiar la pantalla
Print $fe, 2 ' Posicionar el cursor en el inicio
Print " * SDSDSDS * "
Print $fe,$C0, "CEL 544 544 6817"
P_PRESENTACION:
Button MO, 0, 255, 255, VAR3, 1, MENU_SELECCION
GoTo P_PRESENTACION

MENU_SELECCION:
Print $fe, 1 ' Limpiar la pantalla
Print $fe, 2 ' Posicionar el cursor en el inicio
Print " * EJEMPLO * "
FI:
GoTo FI
End
```

https://www.youtube.com/watch?v=lr6lFw4ra58&feature=youtube_gdata_player  ahí pueden ver lo *que* hace...


----------



## D@rkbytes (Ene 17, 2014)

Quizás estés equivocando los pines de conexión a la pantalla.

Aquí tienes esta configuración...
*Declare* *LCD_ENPin* PORTB.3   ; E line
*Declare* *LCD_RSPin * PORTA.4   ; RS line

Tal vez estás usando el pin *RB4* y no el pin *RA4*, que está del lado contrario del PIC.

*Recomendaciones:*
En PICBasic de proton para borrar la pantalla se escribe tan sólo *Cls*
Para escribir en la pantalla es de esta forma: *Print At Line, Position,*"Hola Mundo"
Dónde el primer parámetro es la línea y el segundo la posición. P.E: *Print At 1, 1, *"Hola Mundo"
También puedes usar la instrucción *Cursor Line, Position* para situar el cursor.

Sobre los fuses de la palabra de configuración:
No es necesario que los coloques todos, algunos tienen un valor por defecto.
Podrías escribir así la palabra de configuración...
*Reminders* = False ; Desactivar advertencias.
*Config1* INTOSCIO, PWRTE_ON, WDT_OFF, LVP_OFF, BOREN_OFF
*Config2* WRT_OFF, BOR40V ; Éstos los puedes omitir, pues son los fuses por defecto.
*Reminders* = True ; Activar advertencias.
*Xtal *= 8MHz ; Oscilador  principal a 8MHz.

Suerte.

PD. En el vídeo no se ve bien lo que ocurre con la pantalla.


----------



## cguerrero1205 (Ene 17, 2014)

D@rkbytes dijo:


> Quizás estés equivocando los pines de conexión a la pantalla.
> 
> Aquí tienes esta configuración...
> *Declare* *LCD_ENPin* PORTB.3   ; E line
> ...



Si ya me funcionó  , le cambié la parte de limpiar la pantalla x cls como dijiste pero entonces la pantalla parpadeaba, entonces lo dejé como lo tenía... Gracias de todas formas :thumbup::thumbup:


----------



## cguerrero1205 (Ene 21, 2014)

Hay alguna forma de hacer que los pines de datos empiecen desde B3 hacia atrás? Es decía qué D4 = Rb3 , D5 = Rb2 y así sucesivamente... Es que al momento de hacer la PCB me equivoqué y lo hice al revés... Pic 16f887 programado en proton ide


----------



## Chico3001 (Ene 21, 2014)

Se puede... pero tendrias que crear una libreria especial para eso con los comandos en los pines correctos...


----------



## cguerrero1205 (Ene 21, 2014)

Chico3001 dijo:


> Se puede... pero tendrias que crear una libreria especial para eso con los comandos en los pines correctos...



Y como hago eso??


----------



## Chico3001 (Ene 21, 2014)

hay que editar la libreria que usas... y cambiar todos y cada uno de los comandos y reasignarlos a los pines que tienes... 

Por ejemplo si para encender el display mandabas '10011100' ahora hay que cambiarlo por '00111001' igual para los caracteres...


----------



## vicbit (Sep 25, 2015)

quiero controlar un display lcd jhd162a con el pic16f690 pero no logro nada solo muestra la segunda línea en negro alguien con experiencia que le pueda echar un vistazo al código y me ayude..

uso mplab x ide y cx8 compiler


----------



## D@rkbytes (Sep 25, 2015)

Tienes definidos para la pantalla los pines RC0 a RC5, pero los pines RC0 a RC3 por defecto funcionan en modo análogo porque tienen ADC.

Debes configurar que esos pines sean digital I/O y eso lo haces configurando el registro ANSEL en 0
Agrega ANSEL = 0x00; en el main de tu programa y haz una prueba.


----------



## vicbit (Sep 28, 2015)

Gracias Darkbytes por el tiempo que te tomaste en revisar el código.
Ya probé con tu sugerencia y no funcionó, ahora no aparece nada en el display.

Seguiré intentando:

```
int main()
{
  unsigned int a;
  TRISC =0x00;
  ANSEL =0x00;
  Lcd_Init();
  while(1)
  {
    Lcd_Clear();
    Lcd_Set_Cursor(1,1);
    Lcd_Write_String("HOLA");
    Lcd_Set_Cursor(2,1);
    Lcd_Write_String("MUNDO");
    __delay_ms(2000);
```


----------



## D@rkbytes (Sep 28, 2015)

OK. Se me hace extraño. Haz una prueba con el .hex del código adjunto.
Ahora está configurado para usar el oscilador interno @ 4 MHz.
Ésto es porque tengo dudas sobre los tiempos de la librería trabajando a 10 MHz.

También adjunto la simulación en donde se muestra el valor de los registros.


----------



## vicbit (Sep 28, 2015)

Sigue sin funcionar.
Ya probé muchas opciones y sigo sin hacerlo funcionar.
Pero seguiré porque creo que no estoy muy lejos de lograrlo con tantas pruebas. Jejeje.


----------



## D@rkbytes (Oct 12, 2015)

vicbit dijo:


> Ya probé muchas opciones y sigo sin hacerlo funcionar.


Espero que hayas logrado hacer funcionar la pantalla JHD-162A con XC8.
Si aún no lo has logrado, te comento que conseguí un PIC16F690 para probar la librería, y funciona bien.
Compilé el programa del post #48 y funciona físicamente sin ningún problema.
A la primera salió mostrando el texto en pantalla.

También realicé la prueba con el cristal de 10 MHz  (FOSC = HS) y funciona correctamente.


----------



## vicbit (Oct 16, 2015)

gracias darkbytes, pero no logro hacerlo funcionar he probado muchos códigos, que raro que ati te funcione y a mi no.


----------



## D@rkbytes (Oct 16, 2015)

OK. Pues sí, como te mencioné, funciona sin problemas.
Y tanto me gustó ese PIC, que decidí comprar una tira con 25. 
Supera en características a otros PIC de gama media y me viene perfecto para un proyecto en desarrollo.

Cuando puedas y si te es posible, adjunta una foto del montaje.
Pero si tienes todo bien conectado, tal cual como en el esquema que adjunté, debería funcionar sin problemas.
Si de plano no logras que funcione, entonces puede estar dañado el PIC o la pantalla.

La pantalla la puedes probar con otro microcontrolador y el PIC lo puedes probar activando todos los puertos.
O sea, puedes hacer que todos los puertos se pongan en 1 y luego en 0 al mismo tiempo durante un segundo.
La lectura de estados la puedes realizar con una punta lógica o con un LED.
Con un LED es más complicado porque lo tienes que estar invirtiendo para comprobar los dos estados.
Al menos con eso puedes comprobar que funcionen bien cómo salidas.


----------



## vicbit (Oct 19, 2015)

darkbytes, probé el pic y el lcd realizando un programa en mikroc y funciona bien, no logro determinar por que no funciona en mplab x, el detalle que me aferre a  hacerlo en mplab x por que en mikroc me dan problemas las funciones aritméticas desestabilizando el display, se me ocurre que si me puedes pasar el archivo .hex para cargarlo al pic?

de antemano gracias...


----------



## D@rkbytes (Oct 19, 2015)

vicbit dijo:


> Se me ocurre que si me puedes pasar el archivo .hex para cargarlo al PIC.


Lo subí en el post _*#48*_.
Está dentro de la carpeta dist\default\*production*\
El archivo se llama: lcd.X.production.hex

Está compilado para usar el oscilador interno a 4 MHz.


----------



## vicbit (Oct 19, 2015)

darkbytes ya funcionó no entiendo por que, pero primero cargue el hex y funcionó y luego ya pude modificar el código y complilarlo y programarlo y ya funciona.

gracias por tu tiempo....


----------



## HugoMart (Oct 21, 2015)

D@rkbytes dijo:


> OK. Se me hace extraño. Haz una prueba con el .hex del código adjunto.
> Ahora está configurado para usar el oscilador interno @ 4 MHz.
> Ésto es porque tengo dudas sobre los tiempos de la librería trabajando a 10 MHz.
> 
> También adjunto la simulación en donde se muestra el valor de los registros.



Buenos días para mi desde Buenos Aires.
He visto los circuítos básicos de simulación de LCD y quiero pasar mi experiencia.
Poner a ground los pines D0, D1, D2 y D3 todo bien para la simulación, incluso para algunos LCD con O.S. Hitachi. Pero ciertos clones de dicho LCD hacen locuras. 
Me ha pasado que un sistema super probado, al hacer la segunda producción (unos 120), algunos andaban y otros no. Solución: *Hay que dejarlos float!.*
Saludos


----------



## TRILO-BYTE (Oct 21, 2015)

jeje nunca vi un LCD pirata si me han dicho que hacen sus patrañas

¿no son los que nisiquiera tienen cuerpo?


----------



## Daniel Meza (Oct 21, 2015)

La hoja de datos del HD44780 aclara en un apartado casi casi con letras chiquitas que las líneas DB0-DB7 incorporan "pull-up's". 
Creo que no son del todo piratas sino son chips de otras marcas que emulan (no del todo por lo que se comenta) al HD44780. 

De allí que se recomienda, en caso de conectar,  DB0-DB7 sea a Vcc y no a GND.

TriloByte, esos que comentas he escuchado que se quejan por que el mapeo de las direcciones no coincide con el del 44780.


----------



## TRILO-BYTE (Oct 21, 2015)

si he oido de esos famosos LCD marca patito que son nadamas un vidrio y sus patitas

nunca los he usado ni se donde los venden pero si , es cierto lo que dices , en la hoja de datos se ve como se configura, algunas data sheets son moderadamente confusas.


----------



## HugoMart (Oct 21, 2015)

Es que los clones son solución de costo/prestación muchas veces. De hecho yo nunca tuve un HD44780 original en mis manos. Siempre clones a veces de marca reconocida, otras no tanto, je.


----------



## D@rkbytes (Oct 21, 2015)

A mi se me quedó como costumbre colocar los pines no usados hacia VSS en el simulador porque usaba un template.
Físicamente no los conecto porque sí he visto que tienen pull-ups. (Hasta los chinos LMG-162-STN)

Creo que son a los que se refieren como clónicos.
La direcciones para la primer línea, son desde 0x84 hasta 0x93
Y para la segunda línea, son desde 0xC4 hasta 03

Funcionan bien y no he tenido problema con ese tipo de pantallas.
Pero nunca he conectado los pines D0, D1, D2 y D3 hacia VSS. (Ground)
Son muy económicas aunque no poseen luz de fondo y seguido compro varios lotes.


Click para agrandar la imagen.​


----------



## vicbit (Feb 25, 2016)

hola darkbytes, tu me has estado ayudando con un pic16f690 y un lcd 20x4, hasta ahorita controlo el lcd, se trata de mostrar en el lcd la presión de una bomba de agua, pero al momento de que enciende la bomba de agua el lcd se desconfigura y muestra caracteres raros, ya intente con capacitor electrolítico de 25v 2200 uf a la salida de la fuente e instalando un ups pero no logro que cuando encienda el motor a través de un arrancador el display se desconfigure, si tienes experiencia en este tema te agradecería me ayudaras, no tengo mucha experiencia en el tema de los displays y pics y siento que e aprendido mucho pero si me falta pulir estos tipos de problemas.


----------



## D@rkbytes (Feb 25, 2016)

vicbit dijo:


> Si tienes experiencia en este tema, te agradecería me ayudaras.


Si, pero debes explicar de qué forma estás controlando la bomba y de qué tipo es.
Puede ser con un transitor, con un scr, un triac, etc. (Esquema requerido)
De eso depende el tipo de medidas a tomar.


----------



## vicbit (Feb 25, 2016)

gracias darkbytes por tomarte un poco de tiempo en leer y responder a mi problema.

la bomba se aciona por un selector eléctrico que este acciona la bobina de 110v ca de un contactor, el pic solo censa la presión en la tubería de descarga y la presenta en el lcd 20x4 (esto marcha perfecto), solo que cuando enciende y para la bomba el display muestra caracteres raros.
ya puse otra fuente y es la misma, lo raro es que con el pic solo senso la presión y manejo el display 20x4.
la bomba es de 220v 60hz 1hp


----------



## D@rkbytes (Feb 25, 2016)

A ver. ¿Cuál es tu selector eléctrico? ¿Qué componente controla a tal selector eléctrico?
¿Cómo es la red o sistema que lo controla?
¿El accionamiento de la bomba es independiente del PIC?


D@rkbytes dijo:


> Puede ser con un transistor, con un scr, un triac, etc.* (Esquema requerido)*
> De eso depende el tipo de medidas a tomar.


Sin un esquema no podemos determinar la causa.


----------



## ruben90 (Feb 25, 2016)

Si el motor es AC me imagino que utilizas un relevador para activarlo (lo más sencillo). Al momento de activarse debe resetear el PIC (o algo parecido) y algo no debe cargarse bien y por eso los símbolos extraños.
Intenta habilitar el Brown-out Reset (reset voltaje bajo) y el Power-on Reset. También coloca un capacitor cerámico de 100nF muy cerca del VCC y VSS del display. Al igual en el pin MCRL después del resistor.
Los relevadores de 5V consumen entre 50-80mA, revisa que tu alimentación proporciona por lo menos el doble de esa corriente.
Espero que lo resuelvas. Saludos

Saludos.


----------



## vicbit (Feb 25, 2016)

adjunto el diagrama d conexión, pero el pic y display no tiene relación con el encendido del motor, nomas comparten línea y neutro la fuente de 5v que alimenta al display y al pic

gracias darkbytes...



ruben90 gracias por interesarte en mi tema, tengo una fuente de 2.5 amperes.
probare con el capacitor que me recomiendas.


----------



## D@rkbytes (Feb 25, 2016)

OK. Entonces el PIC no controla el encendido de la bomba.

Revisa o añade lo siguiente:


 El diseño de la tarjeta de circuito impreso debe tener un buen plano de tierra.
La red de alimentación del microcontrolador debe tener un filtro para E.M.I.
Utilizar un buen sistema de filtraje en la etapa de regulación.
Colocar capacitores de 100 nF cercanos a los pines de VCC del microcontrolador.
Colocar una resistencia de 100Ω 1 W. en serie con un capacitor de 100 nF en la bobina de la bomba.
Distribuir las pistas de entrada de señal correctamente y cercanas al plano de tierra.
Verificar que la tierra física tenga buen soporte negativo.
Con esas notas de diseño ya no debes tener problema por ruidos de línea o inducidos.


----------



## ruben90 (Feb 25, 2016)

Como te comenta D@rkbytes debes colocar un filtro amortiguador en paralelo cerca del motor. El filtro se conforma de un resistor de 100ohms/2W en serie con un capacitor de 100nF/600V.


----------



## vicbit (Feb 26, 2016)

Muchas gracias. Probaré sus recomendaciones y les comentaré los resultados.

---------- Actualizado después de 6 horas ----------

Probé poniéndole capacitores de 0.1 uf en la alimentación del display y  en la alimentación del pic, además puse una resistencia de 100 ohms a 2w  en serie con un capacitor de poliéster de 0.1 uf  630v en paralelo a la  bobina del contactor, y sigue dando el mismo problema, falta checar la  tierra física, ojala y esto sea.


----------



## vicbit (Feb 26, 2016)

ya revise la tierra física y si esta instalada, ahora a seguir investigando que pueda estar ocasionando el problema


----------



## ruben90 (Feb 26, 2016)

Entonces no creo que sea problema del circuito, probablemente sea el software. Sube el código y lo checamos.


----------



## D@rkbytes (Feb 26, 2016)

vicbit dijo:


> Ya revisé la tierra física y si está instalada, ahora a seguir investigando qué pueda estar ocasionando el problema.


Olvídate de la tierra física y preocúpate más por el plano de tierra del circuito impreso.


ruben90 dijo:


> Entonces no creo que sea problema del circuito,  probablemente sea el software. Sube el código y lo checamos.


El problema no puede ser el programa, porque...


vicbit dijo:


> Al momento de  que enciende la bomba de agua el lcd se desconfigura y muestra  caracteres raros.


Obviamente aquí hay algo que no está marchando bien.
Si se atienden bien todas las causas posibles de eliminación de ruidos, el programa debe andar sin problemas.

Otra recomendación. Utiliza un cable corto y de preferencia blindado (Apantallado) en el sensor.


----------



## Scooter (Feb 27, 2016)

Voto por la fuente en primer lugar. Si pruebas con otra igual de mala estamos en las mismas.
La fuente normal de 7805 no es buena
Después lo de siempre, varistores, optoacopladores, bajar impedancias, acortar líneas, usar configuraciones diferenciales etc etc etc.
Es un tema repetido cientos (si no miles) de veces en el foro.
No hay una solución maravillosa y única.
En mi experiencia lo primero de todo la fuente y después varistores l-n l-pe y pe-n. Con el resto no he observado mejorías notables.


----------



## HugoMart (Feb 27, 2016)

Los caracteres "raros" son por lo general el acceso a porciones de memoria del LCD donde no están los caracteres que se pretenden enviar. Eso me ha pasado porque se han corrompido las posiciones de ram del LCD, las posiciones de RAM del uP propiamente dicho o que el micro está por cualquier lado. Sugiero una prueba de software para verificar que el up no está perdido, por ejemplo al momento de encender la bomba, que se juegue con un led en algún puerto libre. Si el micro sigue en curso, bastará con refrescar el contenido del LCD luego de encender el contactor (tener en cuenta que usualmente un contactor "pesado" tarda 18 mSeg en establecer completamente sus contactos). 
Es muy bueno que el lazo del main prog. deje que actúe el watch dog interno si el uP no sigue en control.


----------



## Scooter (Feb 27, 2016)

Además está que el micro lleve al menos un watchdog. En los sistemas que yo hacia usaba tres (llamadme loco).
Hábilmente puedes reiniciar el display por software cada vez que arranca o para el motor y así regenerador el contenido de la pantalla.


----------



## vicbit (Feb 29, 2016)

gracias a todos por el interés y el valioso tiempo que invirtieron en este problema.
instale capacitores cerámicos de 0.1 uf a 50v en la alimentación del pic y del display, además la resistencia de 100 ohms 2 amperes en paralelo con la bobina del contactor, y mejoro el comportamiento ahora solo ocurre de ves en cuando.

también trate de instalar mismos capacitores en los pines de control del display (de terminal negativa a cada pin) pero no c inicializaba, los tuve que retirar.

mil gracias a todos seguiré intentando con software a ver si logro mejorarlo de tal manera que garantice que no ocurra.

de verdad muchas gracias...


----------



## oapv10 (Jun 12, 2017)

Saludos. Tengo un problema para poner a funcionar una pantalla lcd 16x2 con un pic 16f877a, uso el ccs compiler para hacer el código, simulo en proteus y me va todo bien pero a la hora de plasmarlo en físico, no me funciona la pantalla, sale solamente cuadros negros. Ya he probado con varios micro para descartar que esté dañado. La pantalla está conectada al puerto D. Lo que me llama la atención es que cuando mido voltaje en el puerto D, Están todas los pines en 5 V. no hay variación como sino hubiese envío de datos. He probado el pic con otro programa más sencillo como el de apagar y encender un led y todo va bien. Si puedes ayudarme te lo agradecería. Soy de Venezuela


----------



## roberttorres (Jun 12, 2017)

oapv10 dijo:


> Saludos. Tengo un problema para poner a funcionar una pantalla lcd 16x2 con un pic 16f877a, uso el ccs compiler para hacer el código, simulo en proteus y me va todo bien pero a la hora de plasmarlo en físico, no me funciona la pantalla, sale solamente cuadros negros. Ya he probado con varios micro para descartar que esté dañado. La pantalla está conectada al puerto D. Lo que me llama la atención es que cuando mido voltaje en el puerto D, Están todas los pines en 5 V. no hay variación como sino hubiese envío de datos. He probado el pic con otro programa más sencillo como el de apagar y encender un led y todo va bien. Si puedes ayudarme te lo agradecería. Soy de Venezuela



Buenas.
Algún esquema, codigo, algo, aunque lo mas probable es que el contraste del lcd esta al maximo. ¿Haz puesto en el pin 3 del lcd el potenciometro para el contraste?.


----------



## HugoMart (Jun 12, 2017)

Saludos Venezuela, saludos Paraguay!
En este foro, en otros foros, he leído docenas de veces  la frase "en Proteus anda bien". Ni hablar en mi propio taller. Tengamos en cuenta que Proteus no es un debugger profesional, simplemente una herramienta de aproximación.
De mi experiencia puedo aportar lo siguiente:
1) En el caso más común de utilizar el modo 4 bits para establecer comunicación con el LCD, las entradas D4... D7 del lcd *DEBEN* estar floating. Ni se le ocurra ponerlas a ningún potencial.
2) en el caso de no usar la entrada WR (write) del LCD lo cual es muy común, ésta debe estar a GND.
3) como aporta el amigo Robert, debe controlarse el bright (VO) con un potenciómetro de 10K entre GND y VDD.
4) DEBE establecerse el comando "init" al LCD antes de cualquier acceso. 
Reporta resultados!!!



Dije mal:
D4...D7 son las que se usan. D0...D3 dejar floating.


----------



## D@rkbytes (Jun 12, 2017)

oapv10 dijo:


> Saludos. Tengo un problema para poner a funcionar una pantalla LCD 16x2 con un PIC16F877A.
> Uso el CCS Compiler para hacer el código, simulo en proteus y me va todo bien, pero a la hora de plasmarlo en físico, no me funciona la pantalla, salen solamente cuadros negros.
> Ya he probado con varios micros para descartar que esté dañado.
> La pantalla está conectada al puerto D. Lo que me llama la atención es que cuando mido voltaje en el puerto D, están todos los pines en 5 V.
> ...


 *Reglas generales de uso del foro** (Extended Version)
*
*12)* Cuando consultes sobre algún código o esquema sobre el que estás trabajando. *¡Publícalo!*
*NO* presupongas que somos adivinos y conocemos de qué cosa estás hablando.


----------



## oapv10 (Jun 12, 2017)

Conozco las políticas del foro, lamentablemente no contamos en este momento con la mejor conexión banda ancha y se me hizo imposible subir las imágenes para explicarme mejor cuando comenté en el post. Agradezco igualmente la atención y el tiempo que se toman en responder los foros. Aquí les envío unas imágenes para ver si me pueden ayudar


----------



## D@rkbytes (Jun 12, 2017)

Sería más conveniente que subieras el proyecto dentro de un archivo comprimido.


----------



## oapv10 (Jun 12, 2017)

D@rkbytes dijo:


> Sería más conveniente que subieras el proyecto dentro de un archivo comprimido.



Aquí les dejo en un archivo comprimido el archivo del montaje en proteus, el archivo .hex y el archivo editable en CCS. El problema es que cuando lo hago en físico, la pantalla solo me muestra los cuadros negros


----------



## roberttorres (Jun 12, 2017)

oapv10 dijo:


> Aquí les dejo en un archivo comprimido el archivo del montaje en proteus, el archivo .hex y el archivo editable en CCS. El problema es que cuando lo hago en físico, la pantalla solo me muestra los cuadros negros


Buenas
En tu código no declaraste el pin Rw(pin de escritura),en CCs lo tienes que declarar y conectar en físico al lcd para que funcione,o en todo caso tienes que buscar una librería sin RW.

PD: Trata de hacer un programa simple, para la prueba del lcd,como esta:


----------



## oapv10 (Jun 12, 2017)

roberttorres dijo:


> Buenas
> En tu código no declaraste el pin Rw(pin de escritura),en CCs lo tienes que declarar y conectar en físico al lcd para que funcione,o en todo caso tienes que buscar una librería sin RW.
> 
> PD: Trata de hacer un programa simple, para la prueba del lcd,como esta:



Gracias por el interés Roberttorres, lo probaré y comentaré como me va


----------



## oscar0359 (Mar 27, 2020)

Cordial Saludo para todos

Tengo una duda con el codigo para borrar solo la linea dos de una lcd 16*2 dejando la primera linea intacta lo he hecho con *Lcd_cmd(_Lcd_Clear);*
pero me borra toda la pantalla y solo quiero borrar la segunda linea utilizo micro c pro

Gracias a todos y fuerza que vamos a vencer el coronavirus

Oscar Manrique


----------



## Scooter (Mar 27, 2020)

Pues escribes espacios en ella.
No hay un comando para eso y menos en un display tan pequeñito.
Los más grandes, 40×4, por ejemplo, llevan dos controladoras en una sola pantalla, y si que puedes mandar comandos a una de ellas, si es que eso te resulta útil .


----------

