No funciona display LCD 16x2

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?
 
Última edición por un moderador:
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 !
 
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 :(
 
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?
 
Última edición:
Publica tu montaje.
¿Has leido los comentarios anteriores?

Hola QUisiera apoyo con un lcd soy nuevo eN programacion, QUisiera ayuda mi problema es casi el mismo de este poSt yo programo en mikro c igual solo me sale el cUAdro de arriba y nada de letras que dias estas en linea para encontrarnos y comentarte mi-problemA
 
Última edición por un moderador:
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?
 
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;
 

Adjuntos

  • 2014-04-16 00.37.50.jpg
    2014-04-16 00.37.50.jpg
    28.3 KB · Visitas: 48
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
 
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í:
Código:
;;*********************************************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
 
Última edición por un moderador:
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
 
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
 
Última edición:
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
 
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
 
Atrás
Arriba