TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Peliparado en 05 de Abril de 2005, 14:24:00
-
Holas, los saludo !!!
Pues resulta que me he comprado un LCD modelo YJ-162A Backlight de 2x16. Primero que todo en internet "no existe" este display, nadie tiene datasheets, ni siquiera se sabe quien es el que lo fabrica, despues de 1 semana de busqueda de info, nada de nada.
Me dicen que siga los estandares de HITACHI 44780, y bueno, programo mis rutinas de inicio del LCD, otras cuantas mas (respetando los tiempos) y lo pongo a correr y este es el problema:
1. Cuando muestro numeros, solo me muestra los impares
2. Cuando muestro letras, solo me muestra las impares.
No entiendo que puede estar pasando, por favor, ayudenme, me voy a volver loco con este LCD, les voy mostrar como manejo mi LCD "ojo a los comentarios" :
; GENERA EL PULSO E
LCD_E E_POSITIVO
NOP
E_NEGATIVO
CALL E40US
RETURN
; aqui me dicen que espere 40 micro seg, porque segun una pagina de x-robotics, los LCDs baratos (el mio supongo) requieren que se mantenga E en 0 durante este tiempo.
; ESPERAR AL LCD OCUPADO
LCD_BUSY RS_NEGATIVO
RW_POSITIVO
BSF STATUS,5
MOVLW 0xFF
MOVWF TRISD
BCF STATUS,5
E_POSITIVO
NOP
L_BUSY BTFSC PORTD,7
GOTO L_BUSY
E_NEGATIVO
CALL E40US
BSF STATUS,5
CLRF TRISD
BCF STATUS,5
RW_NEGATIVO
RETURN
; entiendo que RD7 es para el flag busy, pero no entiendo porque se genera un pulso E en este paso de averiguar si esta o no ocupado.
; ENVIO DE COMANDOS
LCD_REG MOVWF WSAVE
CALL LCD_BUSY
MOVF WSAVE,0
RS_NEGATIVO
MOVWF PORTD
CALL LCD_BUSY
GOTO LCD_E
RETURN
; aqui todo OK, aunque uno nunca sabe que pueda estar malo.
; ENVIO DE DATOS A MOSTRAR
LCD_DATOS MOVWF WSAVE
CALL LCD_BUSY
MOVF WSAVE,0
RS_POSITIVO
RW_NEGATIVO
MOVWF PORTD
CALL LCD_BUSY
RS_POSITIVO
GOTO LCD_E
RETURN
; aqui tambien, todo bien, aunque uno nunca sabe ...
; EL PELIGROSO - EL INICIO DEL LCD
LCD_INI CALL E5MS
CALL E5MS
CALL E5MS
RS_NEGATIVO
RW_NEGATIVO
MOVLW b"00111001"
CALL LCD_REG
CALL E5MS
RS_NEGATIVO
RW_NEGATIVO
MOVLW b"00111001"
CALL LCD_REG
CALL E160US
RS_NEGATIVO
RW_NEGATIVO
MOVLW b"00111001"
CALL LCD_REG
RS_NEGATIVO
RW_NEGATIVO
CALL LCD_BUSY
MOVLW b"00000001"
CALL LCD_REG
RS_NEGATIVO
RW_NEGATIVO
CALL LCD_BUSY
MOVLW b"00001111"
CALL LCD_REG
CALL LCD_BUSY
RS_NEGATIVO
RW_NEGATIVO
MOVLW b"00000110"
CALL LCD_REG
CALL LCD_BUSY
RS_NEGATIVO
RW_NEGATIVO
MOVLW b"00010100"
CALL LCD_REG
CALL LCD_BUSY
RETURN
; aqui segui estrictamente los tiempos del datasheet de Hitachi, pero no estoy muy seguro de su orden (quien va primero). Y de nuevo, me quedo en las mismas, cualquier cosa puede estar mal.
Esto es todo, por favor si alguien encuenta un error, que me ayude, por favor.
Mi PIC es el 16F877A, uso el puerto D para los datos y el C (0,1,2) para el control.
Solo necesito saber si estas rutinas estan bien elaboradas.
-
Esto tiene la pinta de tener la patilla DB0 del LCD SIN conectar al micro. ¿No es verdad?.