# No funciona display LCD 16x2



## jabc88 (Oct 5, 2009)

Buenas a todos, estoy utilizando un atmega16 para controlar un display lcd 16x2, segùn la simulacion del Vmlab, si funciona bien trabajando a 8Mhz, resulta que al momento de armarlo en proto, en el display me salen puros rectangulos negros en cada caracter, mas no las letras, he revisado las conexiones y todas estan bien, estas las he hecho con un cable flat. que otra cosa podria ser?


----------



## the_invader (Oct 9, 2009)

fijate la pata de contraste.. bajaselo y aver como queda.. SALU2!


----------



## felipealmanza1 (Oct 18, 2009)

mira si los cuadros negros te aparecen en las dos filas o en una sola; si es en las dos filas quiere decir que si configuraste en display por medio del micro pero te esta fallando el contraste o la logica pero ya esta listo para recibier información y lo mejor no esta danado, si solo es la linea de arriba quiere decir que el micro no esta configurando y tienes error en el cableado y en la rutina de inicializacion del display en el micro suerte


----------



## kaká_2008 (Feb 26, 2010)

hola amigos hice un frecuenciometro y mi problema es que el display 16x1 me muestra los cuadritos negros :S...
alguien sabe cual puede ser el problema?
ya revise el circuito y esta bien..nose si sera el pic...
si lo necesitan les pongo el HEX para que me digan..
saludos!


----------



## cerebroo (Feb 27, 2010)

Verifica las patas de tu LCD si le llega alimentacion, y tambien haber conectado la pata de Anodo (A) y Catodo (K) respectivamente a sus valores de Fuente.


----------



## kaká_2008 (Feb 28, 2010)

verifique las patas de alimentacion y le llegan 5V a la pata 2 y 15...
te paso el codigo HEX asi lo ves capas que sea el codigo que esta mal...


----------



## antiworldx (Feb 28, 2010)

Son de los LCD con microcontrolador hitachi incorporado? de las mas comunes? Es la pura pantalla de cristal y estas haciendo los refrescos por un microcontrolador?

Si es la de microcontrolador incorporado y solo mandas comandos y caracteres por el bus, pues tus problemas pueden ser dos. Mala inicializacion de la pantalla, pero primero empezaria ajustando el contraste jajaja... 
Salu2!


----------



## kaká_2008 (Feb 28, 2010)

amigo antiworldx es ese display que decis vos..el comun que tiene ese chip en forma de gota...
ya le ajuste el contraste y solo se ven unos cuadritos negros...
tampoco se ilumina :S...


----------



## antiworldx (Feb 28, 2010)

Quise revisar tu codigo, y efectivamente mandaste el .hex... Puedo considerar que tengo un buen nivel de programacion, pero no tanto como para descifrar al vuelo un codigo en formato hexagesimal. 
Bueno, lo que quiero decir, es que pongas el codigo ensamblador, o c con el que estas tratando de utilizar la pantalla para tratar de encontrar el problema, tambien postea un diagrama del conexionado.
Como te dije anteriormente, lo mas probable es un error en la inicializacion de la pantalla. 
salu2!


----------



## kaká_2008 (Feb 28, 2010)

amigaso de aqui lo saque al proyecto
http://kl7r.ham-radio.ch/ik3oil/index.html
revisalo pero creo que no esta el ASM :S...

edit: mi display no tiene blacklight pero si tiene las patitas...voy a ver si le pongo un led para iluminarlo


----------



## antiworldx (Feb 28, 2010)

> edit: mi display no tiene blacklight pero si tiene las patitas...voy a ver si le pongo un led para iluminarlo


Negativo, olvidate del back light, de todas formas no creo que lo uses en la obscuridad.
Efectivamente, solo te dieron el hex para programar el micro, entonces tu problema es, suponiendo que las conexiones estan correctas, que no tienes cortos o lineas abiertas, entonces tu microcontrolador no esta arrancando. 
Ya revisaste los fusibles del AVR para cersiorarte que si esta activado el oscilador interno?
Tu problema es del AVR y no del display.


----------



## kaká_2008 (Mar 2, 2010)

hola amigo antiworldx ya lo hice funcionar  !!!
era una resistencia que estaba flojita ..
muchisimas gracias por tu ayuda...

tenes algun circuito simplecito para probar el frecu???


----------



## rolomaro (Dic 17, 2010)

felipealmanza1 dijo:


> mira si los cuadros negros te aparecen en las dos filas o en una sola; si es en las dos filas quiere decir que si configuraste en display por medio del micro pero te esta fallando el contraste o la logica pero ya esta listo para recibier información y lo mejor no esta danado, si solo es la linea de arriba quiere decir que el micro no esta configurando y tienes error en el cableado y en la rutina de inicializacion del display en el micro suerte



hola amigoas.  soy  nuevo en el foro y toy tratando de hacer un termostato electronico con el pic 16f870, pero en la pantalla de 16x2 solo me aparece una sola fila y con cuadritos negros en el citado,  se refiere a que no ta configurado el pic??  o  cual seria la rutina de iniciacion del  display ......esta se encuentra en el  pic ?......

ayuda porfavor ya no caxo q mas hacer......y es como un examen.

pd:lo simule en proteus y fusiona de hay lo saque.
http://www.pablin.com.ar/electron/circuito/mc/termost/index.htm


----------



## el-rey-julien (Dic 17, 2010)

lo primero  que tenes que verificar es el contastre del  lcd ,las coneciones etc etc

ay donde esta el preset de 10 k mobelo  aver si los cuadraditos desaparecen  y  aparecen  los caracteres

es la patita 3  el contraste


----------



## antiworldx (Dic 18, 2010)

Que proteusss no sirve! cuantas veces tengo que repetirlo? Y la rutina de inicializacion la tienes que hacer tu... sigue buscando en el foro, ahi hay ya rutinas trabajando para que las revises. Esa pantalla trabaja bastante bien, no tiene errores que yo conozca. Y ya tengo unos años usandola.


----------



## rolomaro (Dic 21, 2010)

hice unas pruebas mas  donde cargue un programa para ver el funionamiento del relé y no hubo problema haci q creo q puede ser programa se los dejo para q le hechen una miradita porfavor , este lo saque de de una pagina sale compilado y con codigo de fuente pero trate de compilarlo yo y sale puro errores.....




porfavor si alguien le pega, me hecha una manito, y lo compíla nuevamente 
   le adjunto los codigos fuente y el compilado .....

ha el potenciometro en pin3  funciona con normalidad
gracias...


----------



## baterod3 (Nov 12, 2011)

Para modular el contraste en el lcd hay q colocar resistores del pin 3 del lcd a la puesta a tierra osea al polo negativo del circuito, yo he probado con una resistencia de 10K....prueben colocando resistores, si colocas directo el pin3 a negativo se ven los cuadros y no las letras que envias.....


----------



## BKAR (Nov 12, 2011)

baterod3 dijo:


> Para modular el contraste en el lcd hay q colocar resistores del pin 3 del lcd a la puesta a tierra osea al polo negativo del circuito, yo he probado con una resistencia de 10K....prueben colocando resistores, *si colocas directo el pin3 a negativo se ven los cuadros y no las letras que envias*.....



claro, eso es para controlar el contraste


----------



## antiworldx (Nov 15, 2011)

Ya vieron de cuando es la ultima respuesta???? De hace casi dos anios!!! Aporte cierto, pero poco util al dia de hoy... Ha y tambien habia quedado claro que el contraste no fue el problema.


----------



## diego666 (Nov 16, 2011)

Hola te dejo este video espero que te ayude con tu problema con el lcd:
http://www.youtube.com/user/diegosarango?feature=mhee#p/u/11/fU1YYviZxlU


----------



## devol (Nov 22, 2011)

antiworldx


tengo una duda compre el lcd para verificar *que* la pantalla esta bien solo conecte los pines 1 2 3  y solo me aparece la linea de arriba eso significa *que* esta bien? ose sin necesidad de conectar a un circuito o pic solo alimentar el lcd?


----------



## felipeyeah (Jun 5, 2012)

felipealmanza1 dijo:


> mira si los cuadros negros te aparecen en las dos filas o en una sola; si es en las dos filas quiere decir que si configuraste en display por medio del micro pero te esta fallando el contraste o la logica pero ya esta listo para recibier información y lo mejor no esta danado, si solo es la linea de arriba quiere decir que el micro no esta configurando y tienes error en el cableado y en la rutina de inicializacion del display en el micro suerte



Veo que este post es viejo y no tiene actividad, espero que alguién pueda ayudarme.. 
Amigos, en mi LCD aparecen cuadros negros en la fila de abajo.. qué creen que sea?
Sé que se rumora que se rumora que proteus no sirve, pero iwall lo simulé y aparecen perfecto los mensajes.. 

Salu2 !


----------



## Mane13 (Mar 24, 2013)

antiworldx dijo:


> Ya vieron de cuando es la ultima respuesta???? De hace casi dos anios!!! Aporte cierto, pero poco util al dia de hoy... Ha y tambien habia quedado claro que el contraste no fue el problema.



antiworldx: urgente necesito ayuda con mi LCD solo me muestra los cuadritos negros que comentan, estoy haciendo un sensor de temperatura con el lm35 y un pic16f877a y ya lo programe y todo pero la LCD no me muestra letras solamente los cuadros negros


----------



## tiago (Mar 24, 2013)

Mane13 dijo:


> antiworldx: urgente necesito ayuda con mi LCD solo me muestra los cuadritos negros que comentan, estoy haciendo un sensor de temperatura con el lm35 y un pic16f877a y ya lo programe y todo pero la LCD no me muestra letras solamente los cuadros negros



Publica tu montaje.
¿Has leido los comentarios anteriores?


----------



## JOETECNOLOGY (Jul 16, 2013)

tiago dijo:


> Publica tu montaje.
> ¿Has leido los comentarios anteriores?



*H*ola *QU*isiera apoyo con un lcd soy nuevo e*N* programacion, *QU*isiera ayuda mi problema es casi el mismo de este po*S*t yo programo en mikro c igual solo me sale el c*UA*dro de arriba y nada de letras que dias estas en linea para encontrarnos y comentarte mi*-*problem*A*


----------



## Steron (Jul 16, 2013)

Hola.. Pues te diré que realmente rearme mi circuito como 3 veces.. Si en tu simulador funcionó, checa bien tu protoboard, el mio tenía mucho falso y aparte tenía unos cables medios fracturados. Descarta todo lo posible. Esto si en tu simulación funciona. ¿Qué pic y simulador usas?


----------



## OrtegaMicros (Abr 16, 2014)

Hola, a mi se me está presentando ese problema con un sensor de temperatura que tiene que visualizar la temperatura en la LCD, pero solo me aparecen los cuadros de la primera linea, entonces, no configuré bien la LCD? D;
Cabe destacar que ya cheque que salgan datos de los pines y ya regulé la intensidad de la LCD, pero no sé que mas pueda ser D;


----------



## TRILO-BYTE (Abr 16, 2014)

no se que lenguaje uses o si tu escribiste tu propia libreria del display

pero cuando los datos salen y todo el algoritmo es correcto
la falla es el tiempo de espera para el display , hay que respetar los tiempos marcados por el fabricante por que el display solo puede no mostrar nada

eso me paso que se me olvido poner un retardo de 60 us y nadamas por eso no mostraba nada 

saludos


----------



## OrtegaMicros (Abr 16, 2014)

Pues lo estoy haciendo en ensamblador, pero eso de los tiempos no estoy seguro de como verlo.
Es mi primera vez con una LCD y realmente no sé como usarla, según yo el programa va algo así:

```
;;*********************************************Programa 6*********************************************************
;Programa: Sensor de Temperatura con una LCD.
;Materia: Microprocesadores y Microcontroladores
;Catedrático: Dr. Alexandro Castellanos Mier
;Escuela: Universidad Veracruzana
;Integrantes:    -Luis Felipe Landa Perea
;                -Alejandro Ortega Trejo
;                -Gustavo Pedro Sánchez Guillen
;                -Daniel Alberto Vazquez Lorenzana
;*******************************************************************************************************************
list p=18f4550;                                    Selección de lo que serían las librerías
#include <P18F4550.INC>

                CONFIG FOSC=HS
                CONFIG PWRT=ON
                CONFIG BOR=OFF
                CONFIG WDT= OFF
                CONFIG MCLRE=OFF
                CONFIG PBADEN=OFF
                CONFIG LVP=OFF
                CONFIG DEBUG=OFF
                CONFIG XINST=OFF
                            
#define LCD_RS PORTB,0; Se están poniendo los siguientes nombrs con la finalidad de que a la
#define LCD_RW PORTB,1; a la hora de escribir el codigo, sea mucho mas facil saber en que parte
#define LCD_E PORTB,2; podría estar el error, si es que lo hay.                            
                            
CBLOCK    0x00
Centenas 
Decenas
Unidades
ENDC

BCD equ 0x20
ASCIIH equ 0x21
ASCIIL equ 0x22

Inicio        org 0
            
            bsf    TRISA,0;                        Se configura el pin 0 de puerto A como entrada
            clrf    TRISD;                            Se configuran todos los pines del puerto D como salidas
            clrf    PORTD;                        Nos aseguramos de que los datos del puerto D sean 0
            clrf    TRISB
            clrf    PORTB            
            movlw    0x0E;                        Se carga en el registro w una literal
            movwf    ADCON1;                    Se pasa la literal cargada en w a lo que sería ADCON1
            movlw 0x31;                         Se carga una literal a w
            movwf    ADCON2;                     Se carga en ADCON2 la configuración guardada en w
            movlw 0x01;                         Se carga la literal a w
            movwf    ADCON0;                     Se hace la configuración de ADCON0
            call LCD_Inicializada
            bcf LCD_E                        
;**************************Programa Principal********************************************************************            
Programa        
                clrf        ADRESH; Se limpia lo que es ADRESH
                bsf        ADCON0,1; Se busca poner en alto el bit Go/Done
Conversor        btfsc    ADCON0,1; Si el bit Go/Done se vuelver 0 se salta la instrucción
                goto    Conversor; El programa se regresa a la etiqueta Conversor
                movf    ADRESH, w; 
                addwf    ADRESH
                call        BINaBCD
                call        BCDaASCII
                call        Temperatura
                goto    Programa; El programa se regresa a la etiqueta Programa
                
;************************************Binario a BCD***************************************************************
BINaBCD
                clrf        Centenas
                clrf        Decenas
                movf    ADRESH, w
                movwf    Unidades
BCD_Resta        
                movlw    d'10'
                subwf    Unidades, w
                btfss    STATUS, C
                goto    BIN_BCD_FIN
Incremento_Dec
                movwf    Unidades
                incf    Decenas, F
                movlw    d'10'
                subwf    Decenas, w
                btfss    STATUS, C
                goto    BCD_Resta
Incremento_Cen
                clrf        Decenas
                incf    Centenas, F
                goto    BCD_Resta
BIN_BCD_FIN    
                swapf    Decenas, w
                addwf    Unidades, w
                movwf    BCD
                return
;****************************************BCD a ASCII*************************************************************            
BCDaASCII
                movlw    b'00001111'
                andwf    BCD, f
                movff    BCD, ASCIIL
                movlw    d'48'
                addwf    ASCIIL, f
                movff    ASCIIL, PORTB
                call        BINaBCD    
                movlw    b'00001111'
                swapf    BCD
                andwf    BCD, f
                movff    BCD, ASCIIH
                movlw    d'48'
                addwf    ASCIIH,f
                movff    ASCIIH, PORTD
                return
;**************************************Temperatura***************************************************************
Temperatura
                call Retardo1
                movlw 'L'
                call LCD_Caracter
                movlw 'a'
                call LCD_Caracter
                movlw ' '
                call LCD_Caracter
                movlw 'T'
                call LCD_Caracter
                movlw 'e'
                call LCD_Caracter
                movlw 'm'
                call LCD_Caracter
                movlw 'p'
                call LCD_Caracter
                movlw 'e'
                call LCD_Caracter
                movlw 'r'
                call LCD_Caracter
                movlw 'a'
                call LCD_Caracter
                movlw 't'    
                call LCD_Caracter
                movlw 'u'
                call LCD_Caracter
                movlw 'r'
                call LCD_Caracter
                movlw 'a'    
                call LCD_Caracter
                call Retardo1
                call LCD_Borrar
                call Retardo1
                movlw 'd'
                call    LCD_Caracter
                movlw    'e'
                call    LCD_Caracter
                movlw    'l'
                call    LCD_Caracter
                movlw    ' '
                call    LCD_Caracter
                movlw 'S'
                call    LCD_Caracter
                movlw    'a'
                call    LCD_Caracter
                movlw    'l'
                call    LCD_Caracter
                movlw    'o'
                call    LCD_Caracter
                movlw 'n'
                call    LCD_Caracter
                movlw    ' '
                call    LCD_Caracter
                movlw    'F'
                call    LCD_Caracter
                movlw    '-'
                call    LCD_Caracter
                movlw '1'
                call    LCD_Caracter
                movlw    '4'
                call    LCD_Caracter
                call Retardo1
                call LCD_Borrar
                call Retardo1
                movlw    'e'
                call    LCD_Caracter
                movlw 's'
                call    LCD_Caracter
                movlw    ':'
                call    LCD_Caracter
                movlw    ' '
                call    LCD_Caracter
                movf    ASCIIH, w
                call    LCD_Caracter
                movf    ASCIIL, w
                call    LCD_Caracter
                movlw    0xA7
                call    LCD_Caracter
                movlw 'C'
                call    LCD_Caracter    
                call    Retardo1
                call    LCD_Borrar
                return
;*****************************LCD Inicio***************************************************************************
LCD_Inicializada
                call Retardo_20ms
                bsf    LCD_E    
                bcf    LCD_RS
                movlw 0x38
                movwf    PORTD
                bcf    LCD_E
                call Retardo_5ms
                bsf    LCD_E
                bcf    LCD_RS    
                movlw 0x0F
                movwf    PORTD
                bcf    LCD_E
                call Retardo_50us    
                call     Retardo_50us
                bsf    LCD_E
                bcf    LCD_RS
                movlw 0x02
                movlw PORTD
                bcf    LCD_E
                call Retardo_5ms
                call    Bienvenida
                return
Bienvenida
                call Retardo1
                movlw    'B'
                call LCD_Caracter
                movlw    'u'
                call    LCD_Caracter
                movlw    'e'
                call    LCD_Caracter
                movlw    'n'
                call LCD_Caracter
                movlw    'a'
                call    LCD_Caracter
                movlw    's'
                call    LCD_Caracter
                movlw ' '
                call    LCD_Caracter
                movlw 'N'
                call LCD_Caracter
                movlw    'o'
                call LCD_Caracter
                movlw    'c'
                call LCD_Caracter
                movlw 'h'
                call LCD_Caracter
                movlw    'e'
                call    LCD_Caracter
                movlw 's'
                call LCD_Caracter
                call Retardo1
                call    LCD_Borrar
                call Retardo1
                movlw 'D'
                call    LCD_Caracter
                movlw    'r'
                call    LCD_Caracter
                movlw    '.'
                call    LCD_Caracter
                movlw    ' '
                call LCD_Caracter
                movlw 'C'
                call    LCD_Caracter
                movlw 'a'
                call    LCD_Caracter
                movlw    's'
                call    LCD_Caracter
                movlw    't'
                call    LCD_Caracter
                movlw    'e'
                call LCD_Caracter
                movlw 'l'
                call    LCD_Caracter
                movlw 'l'
                call    LCD_Caracter
                movlw    'a'
                call    LCD_Caracter
                movlw    'n'
                call    LCD_Caracter
                movlw    'o'
                call LCD_Caracter
                movlw 's'
                call    LCD_Caracter
                call Retardo1
                call    LCD_Borrar
                return
LCD_Caracter
                bsf    LCD_RS
                bsf    LCD_E
                movwf    PORTD
                call Retardo_50us
                bcf    LCD_E
                call    Retardo1
                return
LCD_Borrar
                movlw 0x01
                call LCD_Comando
LCD_Comando
                bsf LCD_E
                bcf    LCD_RS
                movwf PORTD
                bcf    LCD_E    
                call Retardo_50us
                return
CBLOCK
        Conta1
        Conta2
        Conta3
ENDC
;******************************Creación del retardo de 20ms***************************************************
Retardo_20ms
                movlw .247
                movwf    Conta1
                movlw    .26
                movwf    Conta2
Re_20ms
                decfsz    Conta1, F
                bra    Re_20ms
                decfsz    Conta2, F
                bra Re_20ms
                return
;*****************************Creación del retardo de 5ms*******************************************************
Retardo_5ms
                movlw .146
                movwf    Conta1
                movlw  .7
                movwf    Conta2
Re_5ms
                decfsz    Conta1, F
                bra    Re_5ms
                decfsz    Conta2, F
                decfsz Conta1, F ;Salta cuando Conta1 llega a 0
                    Return
 
;Retardo_200us *********************
Retardo_200us
                    movlw  .65
                    movwf  Conta1
Re_200us
                    decfsz  Conta1, F ;Salta cuando Conta1 llega a 0
                        bra     Re_200us  ;Salta a Repeat para Decrementar Conta1
                        Return
 
;Retardo_2ms *********************
Retardo_2ms
                    movlw  .151
                    movwf  Conta1
                    movlw  .3
                    movwf  Conta2
Re_2ms
                    decfsz  Conta1, F ;Salta cuando Conta1 llega a 0
                    bra     Re_2ms    ;Salta a Repeat para Decrementar Conta1
                    decfsz  Conta2, F ;Salta cuando Conta2 llega a 0
                    bra     Re_2ms    ;Salta a Repeat
                    Return
 
;Retardo_50us *********************
Retardo_50us
                    movlw  .15
                    movwf  Conta1
Re_50us
                    decfsz Conta1, F ;Salta cuando Conta1 llega a 0
                    bra    Re_50us   ;Salta a Repeat para Decrementar Conta1
                    Return
 
Retardo1
                    clrf   Conta1
                    clrf   Conta2
                    movlw  .3
                    movwf  Conta3
Re_Delay
                    decfsz Conta1, F ;Salta cuando Conta1 llega a 0
                    bra    Re_Delay  ;Salta a Repeat para Decrementar Conta1
                     decfsz Conta2, F ;Salta cuando Conta2 llega a 0
                    bra    Re_Delay  ;Salta a Repeat
                     decfsz Conta3, F
                    bra    Re_Delay
                     Return
                end
```


----------



## TRILO-BYTE (Abr 16, 2014)

bueno no es por ser mala onda pero:
¿si estas usando un 4550 por que no lo haces directo en C?

bueno la idea principal en un lcd
es 
iniciar con el puerto en 0x00 
despues hacer un retardo de 15ms

despues poner el comando 0x30 retardo de 3ms y repetir 3 veces

luego enviar un 0x20 

"si trabajas a 4 bits no envies el 0 solo el 2" 

continuando "aqui si debes enviar los 2 nibles"

envias el comando 0x38 "para trabajar con 4 bits"

y terminamos con un comando encender display que es el 0x0C

para enviar comandos
debes jugar con los nibles es decir envias el de mas peso y despues el de menos peso rotandolo 4 veces
esperas 60us 
entre cada nible
haciendo uso del  pin enable


ese es mas o menos el algoritmo no te lo pongo en ASM por que no programo en asm

pero puedes apoyarte de un diagrama de flujo del lcd16x2 por que ahi marca los tiempos de escritura
y puedes simularlo en proteus anque ojo

en la vida real proteus es ideal

para borrar el display despues del comando limpiar espera 10us por que si no tendras basura en el display

suerte con tu proyecto


----------



## OrtegaMicros (Abr 17, 2014)

Creeme que lo quiero hacer en C, pero me exigen que sea en ensamblador u.u y pues simulado si me sale, pero una vez que lo paso a físico, pues.... solo veo recuadros en lugar de texto u.u


----------



## Daniel Meza (Abr 17, 2014)

Veo raro en tu rutina de enviar comando:

LCD_Comando
                bsf LCD_E
                bcf    LCD_RS
                movwf PORTD
                bcf    LCD_E    
                call Retardo_50us
                return

Primero pones EN en alto y luego modificas RS, debe de ser al revés


----------



## TRILO-BYTE (Abr 17, 2014)

cuando en la simulacion funciona y en la vida real se ve raro es por los tiempos de retardo

debes configurar bien los fusibles del 4550 por que usando los pll cambias la frecuencia de los tics del 4550
eso hace que no trabaje a la velocidad que programaste

ahora revisa si en la simulacion dice demaciado para este CPU , o si dice que el lcd podria estar ocupado mientras envia instruccion


----------

