Autor Tema: caso extraño con LCD 16x2  (Leído 8509 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
caso extraño con LCD 16x2
« en: 01 de Enero de 2012, 22:11:36 »
hola.estoy trabajando con una LCD en modo 4bit.y quiero testear el bit busy.dicen que no hace falta,y que con una temporizacion es mas que suficiente.
esto ya lo he probado y funciona bien.el caso es que estoy empeñado en testearlo.
para ello hay que leer los dos nibles de la LCD.priemero leo el nible alto y extraigo la informacion del bit7 (busy) y luego leo el nble bajo para la finlizacion de
la secuencia de lectura.esto funciona bien.

el caso es que cuando regresa del testado,la LCD deja de enviar caracteres.he estado desmenuzando el codigo hasta que di con un error.y es que aunque
en el proteus se ven las E/S de color azul/rojo segun el estado de cada pin.si no se ponen unas resistencias a positivo adecuadamente.el pic no lee el valor correcto.
esto lo he arreglado tambien.pero ahora hay algo que se me escapa de mi comprension.

resulta que programando la LCD para que mende un mensage con desplazamiento,este se ve perfectamente.pero si en medio del codigo pongo a 1 RS
y luego lo vuelvo a poner a 0.la LCD deja de enviar caracteres.
he mirado los nibles que le mando a la LCD y en los dos casos son exactamente los mismos.

es como si al poner RS a 1 y posteriormente  0.la LCD estubiera esperando a que hubiera hecho algo.se supone que solo es la conmutacion para
el envio/recepcion de datos o instrucciones.no se si sera un fallo del proteus.o las LCD funcionan de esta manera.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado JBQ

  • PIC16
  • ***
  • Mensajes: 118
Re: caso extraño con LCD 16x2
« Respuesta #1 en: 02 de Enero de 2012, 22:52:40 »
No comprendo exactamente a que te refieres cuando dices que la LCD deja de enviar caracteres. Supongo que te debes de referir a que la LCD ya no imprime o visualiza los datos que se envia.

Yo trabajo de la forma de la que estas haciendo tus pruebas, testeo el bit busy para poder saber si la LCD esta ocupada o no, y no ha habido porblemas de error de comunicaciòn ni necesidad de pull-ups en los pines de control del LCD. De repente la falla de comunicaciòn se da por que olvidadas reconfigurar los pines de datos (D7-D4 del LCD) de entrada a salida, como estabas en modo lectura, ahora tienen que ser salidas para poder estar em modo escritura.

Ahora, eso de cambiar el pin RS no tendrìa efecto, siempre y cuando, no realizes el pulso de enable en el LCD... saludos.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: caso extraño con LCD 16x2
« Respuesta #2 en: 06 de Enero de 2012, 16:25:21 »
gracias por la respuesta.exactamente es lo que quiero decir.
este es el codigo para el testeo del flag busy:

Código: [Seleccionar]
LCD_BUSYN               READ
LCD_BUSY2   ENABLE
call retardo1us
btfss   PORTB,3  
goto busy3
DISABLE
call retardo1us
ENABLE
call retardo1us
DISABLE
goto LCD_BUSY2
busy3 DISABLE
ENABLE
call retardo1us
DISABLE
frt WRITE
return


Código: [Seleccionar]
READ MACRO
movlw 0x0f
iorwf TRISB
bsf PORTA,1
ENDM
WRITE MACRO
movlw 0xf0
andwf TRISB
bcf PORTA,1
ENDM

#define ENABLE bsf PORTA,2 ;habilita LCD
#define DISABLE bcf PORTA,2 ;deshabilita LCD



la comunicacion con la LCD la hago por el nible bajo de portb.

RA0=RS
RA1=R/W
RA2=ENABLE
« Última modificación: 06 de Enero de 2012, 16:29:33 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: caso extraño con LCD 16x2
« Respuesta #3 en: 07 de Enero de 2012, 08:26:58 »
Yo siempre la hice por el nible alto del LCD, nunca por el bajo. :lol: :lol:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: caso extraño con LCD 16x2
« Respuesta #4 en: 07 de Enero de 2012, 14:15:57 »
al principio tambien lo hize asi.pero uso un teclado matricial de 4x4 en el mismo puerto.para aprobechar las resistencias pull-up y la interrupcion por cambio de estado de PB4 A PB7.
y tenia conflicto entre la LCD y el teclado.asi que tube que cambiar la configuracion del portb.


Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado JBQ

  • PIC16
  • ***
  • Mensajes: 118
Re: caso extraño con LCD 16x2
« Respuesta #5 en: 08 de Enero de 2012, 03:38:23 »

Código: [Seleccionar]
LCD_BUSYN                READ
LCD_BUSY2   ENABLE
call retardo1us
btfss   PORTB,3 
goto busy3
DISABLE
call retardo1us
ENABLE
call retardo1us
DISABLE
goto LCD_BUSY2
busy3 DISABLE
ENABLE
call retardo1us
DISABLE
frt WRITE
return


Hola groundman... te comento que yo lo hago de forma diferente. En mi caso, yo leo el byte completo y lo guardo en un registro temporal, y recien en ese registro testeo el bit busy. Podrìas intentar de esa forma, y si obtienes mejores resultados, quizas ahi radicaba el problema; de todas maneras probare tu metodo (aprovechando que estoy actualizando mis librerias) y te comentare como me fue a mi,... saludos.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: caso extraño con LCD 16x2
« Respuesta #6 en: 08 de Enero de 2012, 13:07:36 »
gracias por tu atencion.probare de la forma que tu lo haces.aunque se supone que deberia funcionar de las dos maneras.ya sea testeando el flag en ese instante o despues.
creo que de la forma que yo lo hago es mas rapida.pero da paso a que por un evento indeterminado se produzca la lectura del nible equivocado.y esto conlleve
a un error.lo tendre que revisar muy bien.

aunque ya estoy mosqueado.no se si provar el programa en una LCD fisicamente.porque cuando se dejan de ver el mensage en la LCD es cuando le da la gana.
igual pasan 4 mensages que 25.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: caso extraño con LCD 16x2
« Respuesta #7 en: 09 de Enero de 2012, 10:55:31 »
he estado analizando el programa al milimetro y no veo ningun fallo.cada vez estoy mas seguro de que es un problema del proteus.
como aquella vez que no me funcionaba y tube que cambiar la frecuencia de la LCD.

ya solo me falta comprovarlo fisicamente.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: caso extraño con LCD 16x2
« Respuesta #8 en: 12 de Febrero de 2012, 18:05:56 »
ya consegui semanas atras que me funcionara el testeo del bit busy.pero como era de esperar,se tenia que solucionar el problema creando otro.
resulta que yo escribo los caracteres en los 40 byutes de la DDRAM para visualizarlos en la LCD para mensages largos y vuelvo a cargar la DDRAM con los caracteres que falten.y esto funciona muy bien si no paso por el subprograma de testeo del bit BUSY.
ya que cuando paso por este subprograma,al tener que habilitar y desabilitar dos veces la LCD para la lectura de los dos nibles,el contador de direcciones
se incrementa y al escribir el siguiente caracter,se intercalan espacios entre letra y letra.

se supone que este incremento solo se realiza al escribir un dato en la LCD pero no cuando se lee.almenos en los documentos que he leido.
que cosas mas raras.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: caso extraño con LCD 16x2
« Respuesta #9 en: 26 de Febrero de 2012, 16:12:14 »
 :5] ya estoy arto del testeo del bit busy de la LCD en el modo de 4bit.esto es imposible  :x 

algo no va bien en el proteus.tiene un fallo que no le veo explicacion.

como es posible que al configurar PA0 como salida y poniendolo a cero.y conectado a RS.la LCD visualiza los caracteres.y sin haberlo pasado a 1,lo vuelvo a poner a cero.y ya no visualiza los caracteres.
yo pensaba que estaba haciendo algo mal.pero esto no tiene ni pies ni cabeza.supongo que tiene algo que ver con la inicializacion interna de la LCD.
pero ya no pierdo mas tiempo.
pondre unas pausas para que le de tiempo a escribir en la memoria interna y a otra cosa.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: caso extraño con LCD 16x2
« Respuesta #10 en: 12 de Febrero de 2014, 20:11:17 »
hola.se me presento un proyecto basado en un termostato.y ahora he puesto a funcionar el proyecto con un mensage con desplazamieto.

por lo visto el proyecto funciona perfectamente en el isis.pero en la parte fisica el desplazamiento lo hace al reves.asi que el comando de izquierdas
la lcd rota a derecha y viceversa.

he simulado con el ICD2 y las señales son correctas.almenos los bits de datos.en el modo de 4 bit.

las palabras fijas se visualizan correctamente.asi que supongo que todos los cables estan correctamnte puestos.yo creo que estos comandos
son compatibles para la LCD PC1602 1c7.he probado con dos LCDs y hacen lo mismo.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado JBQ

  • PIC16
  • ***
  • Mensajes: 118
Re: caso extraño con LCD 16x2
« Respuesta #11 en: 13 de Febrero de 2014, 09:16:00 »
que comando estas usando para hacer rotar el display del lcd, "entry mode display" o " Display shift"...

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: caso extraño con LCD 16x2
« Respuesta #12 en: 13 de Febrero de 2014, 16:55:47 »
uso Display shift.ya que guardo el mensage en memoria y luego lo desplazo. el valor es: movlw   B'00011100'    rotacion a izquierdas.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado JBQ

  • PIC16
  • ***
  • Mensajes: 118
Re: caso extraño con LCD 16x2
« Respuesta #13 en: 13 de Febrero de 2014, 23:39:49 »
tu dices que el comando de izquierda hace rotar hacia la derecha, pero la instruccion movlw   B'00011100', lo que hace es desplazar el display una posicion hacia la derecha. Parece que tienes ahi un error de conceptos, nada mas.

Por cierto, se que es algo tarde, pero como veo que no lo solucionastes te lo comento por si acaso. para leer el bit busy flag de la forma en testeo como tenias planeado, es necesario hacer un constante enable al lcd. Esto por que los datos a leer o escrobir en el lcd, se hacen en el flanco de bajada del enable.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: caso extraño con LCD 16x2
« Respuesta #14 en: 14 de Febrero de 2014, 20:19:38 »
muchas gracias por tu informacion.tienes razon el comando es de rotacion a derechas.no me di cuenta.asi que tengo que descartar el fallo en la LCD fisica.
y hecharle la culpa al isis.ya que en este si que se produce el fallo de la rotacion al reves.lo comprobare mejor.vaya a ser un error de tiempos.

respecto a lo del busy volvere a intentar hacerlo funcionar.
Montando mi primera impresora 3D (Raprep Prusa i3)