TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: MISTRELO en 10 de Marzo de 2005, 22:30:00
-
Hola, me estoy iniciando en lo de los PIC"s, y conforme avanzo en su estudio y aplicación
me surgen nuevas dudas que hasta ahora había podido resolver. Sin embargo lo que les voy a
plantear no he podido encontar la razón por lo que sucede, espero que alguno de ustedes me
pueda decir que es lo que pasa, y darme una solución al respecto.
Tengo un LCD de 2 líneas con 16 caracteres por línea lo he inicializado de la siguiente forma:
(estoy usando un PIC16F873, con un reloj de 4 MHz.)
*****************************************************************************************
inicDSP call pausa
call pausa
call pausa
movlw 0x38
movwf PORTC
call HabilitaLCD
call pausa
movlw 0x38
movwf PORTC
call HabilitaLCD
call pausa
movlw 0x38
movwf PORTC
call HabilitaLCD
call pausa
movlw 0x0E
call comdoLCD
movlw 0x06
call comdoLCD
return
*********************************************************
pausa clrf DELAY1
movlw 0X07
movwf DELAY2
bucle decfsz DELAY1,1
goto bucle
decfsz DELAY2,1
goto bucle
return
***********************************************************
comdoLCD
bcf PORTA,0 ; LCD MODO COMANDOS
movwf BUFFER
movwf PORTC
call HabilitaLCD
return
;*******************************************************
HabilitaLCD
bsf PORTA,1
nop
call pausa
bcf PORTA,1
return
;*******************************************************
datoLCD
bsf PORTA,0
movwf PORTC
call HabilitaLCD
return
********************************************************
Y pretendo que aparezca el siguiente mensaje
(así es como lo tengo)
mensaje1
movlw 0x01 ;limpia el LCD y regresa el cursor a la primera posición
call comdoLCD
movlw 0x80 ;es la primera dirección de la línea superior
call comdoLCD
movlw 0x7F
call datoLCD
movlw "P"
call datoLCD
movlw "R"
call datoLCD
movlw "O"
call datoLCD
movlw "G"
call datoLCD
movlw "."
call datoLCD
movlw " "
call datoLCD
movlw " "
call datoLCD
movlw "A"
call datoLCD
movlw "R"
call datoLCD
movlw "R"
call datoLCD
movlw "A"
call datoLCD
movlw "N"
call datoLCD
movlw "C"
call datoLCD
movlw "A"
call datoLCD
movlw 0x7E
call datoLCD
movlw 0xC0 ;aquí inicia la línea inferior, es la primera dirección
call comdoLCD
movlw " "
call datoLCD
movlw "M"
call datoLCD
movlw "E"
call datoLCD
movlw "D"
call datoLCD
movlw "I"
call datoLCD
movlw "D"
call datoLCD
movlw "A"
call datoLCD
movlw "="
call datoLCD
movf Dato3,W
addlw 0x30
andlw 0x3F
call datoLCD
movf Dato2,W
addlw 0x30
andlw 0x3F
call datoLCD
movf Dato1,W
addlw 0x30
andlw 0x3F
call datoLCD
movlw " "
call datoLCD
movlw "C"
call datoLCD
movlw "m"
call datoLCD
movlw "."
call datoLCD
return
*************************************************************
La llamo con un call (call mensaje1) inmediatamente después de que
se inicializa el LCD.
Sin embargo aparece el mensaje pero cortado del lado izquierdo.
O sea que debería verse:
<-PROG. ARRANCA->
MEDIDA=136 Cm.
y aparece así
G. ARRANCA->
IDA=136 Cm.
Es decir no aparecen las primeras 4 direcciónes de las dos líneas
o el "display real" está desplazado hacia la derecha con respecto
al "display Virtual" 4 posiciónes.
Una forma de resolver este problema sería colocando en la dirección
de inicio de la primera línea en lugar de 0x80 poner 0x84 y en lugar
de 0xC0 poner 0xC4 para la línea inferior. Pero creo que no es la mejor
manera de hacerlo, creo que algo me falta para configurar adecuadamente
el LCD.
Mucho agradeceré cualquier comentario y ayuda al respecto
Saludos a todos y de antemano ¡Gracias!
-
Hola, algunas sugerencias al inicializar el display, envia el primer 38h como un comando, es decir movlw 038h, call comdoLCD. no lo envies tres veces, y agrega al final de la configuración: movlw 02h, call comdoLCD (cursor y "display" a casa, es decir, si el problema es un desplazamiento de ram, esto debería solucionarlo)
Espero que esto te sirva, comentanos luego que paso. Saludos
-
Gracias fer_zone por contestarme y te comento que hice lo que me sugeriste pero el resultado fue el mismo, es decir sigue el desplazamiento.
Agradezco tu sugerencia
Saludos
-
Hola amigos como estan queria saber si me podrian ayudar soy un estudiante de secundaria que necesito terminar mi tesis y no se como hacer.
Mi tesis consiste en el manejo de un LCD 240 x 128B con un pic 16f871 el problema es que yo no conozco mucho de programación en Pic y menos con este LCD. Les agradeceria un mundo si me ayudaran por favor. Nesecito la inicialización del LCD.
Mi tesis es la de manejar con este LCD un dispositivo de votación electronica.