Autor Tema: caso extraño en inicializacion de LCD  (Leído 3552 veces)

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

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
caso extraño en inicializacion de LCD
« en: 22 de Abril de 2014, 16:55:17 »


hola.como dice el titulo,el tema esta en la inicializacion de una LCD16x2 compatible HD44780.

estoy en un proyecto que controla esta LCD en modo a 4bit.y el caso es que cunando alimento la LCD,esta visualiza correctamente el mensage.
en el caso mas basico lo que hago es imprimir en pantalla el caracter 'A' antes del mensage. y esto se visualiza bien en cualquier reinicio siempre y cuando
desconecte la alimentacion de la LCD.

el caso es que si el reinicio es provocado por la instruccion reset,que salte el WDT.o cualquier reinicio que no implique la desconectacion
de la alimentacion de la LCD.
en la pantalla salen caracteres que estan en la memoria de la LCD aunque en diferente linea y un poco desordenados.

y no entiendo que si durante el reinicio se ha vuelto a configurar la LCD.como es que no sale el caracter 'A' precedido al mensage.

asi es como inicializo la LCD:

Código: [Seleccionar]
;************************************************** INICIALIZACION LCD *************************************************************
LCDINI    COMANDOS ;selecciona el modo comando para la LCD

movlw 0x01 ;CLEAR DISPLAY
call BYTE
movlw .40 ;temporizacion de 5ms
call retardo_ms

movlw 0x38 ;buss de 8 bit,2 lineas,5x7 puntos
call BYTE
movlw .40 ;temporizacion de 5ms
call retardo_ms
movlw 0x38 ;buss de 8 bit,2 lineas,5x7 puntos
call BYTE
movlw .40 ;temporizacion de 5ms
call retardo_ms
movlw 0x38 ;buss de 8 bit,2 lineas,5x7 puntos
call BYTE
movlw .40 ;temporizacion de 5ms
call retardo_ms

movlw 0x01 ;CLEAR DISPLAY
call BYTE
movlw .40 ;temporizacion de 5ms
call retardo_ms

movlw 0X02 ;HOME. posicion 0 de la DD RAM.
call    BYTE
movlw .40 ;temporizacion de 5ms
call retardo_ms

movlw  0X28 ;FUNCTION SET. bus 4bit,LCD 2 linea.
          call    BYTE
movlw .40 ;temporizacion de 5ms
call retardo_ms
          movlw   0X0C ;DISPLAY ON/OFF. display on.
          call    BYTE
movlw .40 ;temporizacion de 5ms
call retardo_ms
          movlw   0X06 ;ENTRY MODE.sin incremento del cursor
          call    BYTE
movlw .40 ;temporizacion de 5ms
call retardo_ms
          movlw   0X01  ;CLEAR DISPLAY. borra display y activa incremento del cursor
          call    BYTE
movlw .40 ;temporizacion de 5ms
call retardo_ms

return
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: caso extraño en inicializacion de LCD
« Respuesta #1 en: 23 de Abril de 2014, 19:34:00 »
se me ha pasado por la cabeza de que quizas la LCD no se deba inicializar dos veces.sobretodo si esta cambiado al modo 4bit.quizas sea este el problema.
mañana lo pondre en practica.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: caso extraño en inicializacion de LCD
« Respuesta #2 en: 24 de Abril de 2014, 18:54:48 »
por fin encontre el fallo.toda la semana haciendo pruebas.

el problema estaba en que para enviar los comandos a la LCD.lo hacia con una rutina que el byte a enviar los divide en dos nibles.
y en la inicializacion de las LCDs.hay que enviar un byte.aunque los cuatro bits altos no se interpretan en la conexion de 4bits.

esta es la inicializacion el el modo 4bit.aunque yo lo tengo mas compactado.pero asi esta mas claro para los menos experimentados.

   
Código: [Seleccionar]
;************************************************** INICIALIZACION LCD *************************************************************
LCDINI     COMANDOS ;selecciona el modo comando para la LCD


movlw 0xf0
andwf LATB ;borra el nible bajo de LATB
movlw 0x03 ;funcion SET en modo 8bit por nible bajo de LATB
iorwf LATB ;mete valor de w en el nible bajo de LATB
PULSO
movlw .40 ;temporizacion de 5ms
call retardo_ms

movlw 0xf0
andwf LATB ;borra el nible bajo de LATB
movlw 0x03 ;funcion SET en modo 8bit por nible bajo de LATB
iorwf LATB ;mete valor de w en el nible bajo de LATB
PULSO
movlw .40 ;temporizacion de 5ms
call retardo_ms

movlw 0xf0
andwf LATB ;borra el nible bajo de LATB
movlw 0x03 ;funcion SET en modo 8bit por nible bajo de LATB
iorwf LATB ;mete valor de w en el nible bajo de LATB
PULSO
movlw .40 ;temporizacion de 5ms
call retardo_ms







movlw 0xf0
andwf LATB ;borra el nible bajo de LATB
movlw 0x02 ;funcion SET en modo 4bit por nible bajo de LATB
iorwf LATB ;mete valor de w en el nible bajo de LATB
PULSO
movlw .40 ;temporizacion de 5ms
call retardo_ms


movlw 0xf0
andwf LATB ;borra el nible bajo de LATB
movlw 0x02 ;funcion SET en modo 4bit por nible bajo de LATB
iorwf LATB ;mete valor de w en el nible bajo de LATB
PULSO
movlw .40 ;temporizacion de 5ms
call retardo_ms


movlw 0xf0
andwf LATB ;borra el nible bajo de LATB
movlw 0x0A ;funcion SET.LCD de dos lineas y caracter de 5x10
iorwf LATB ;mete valor de w en el nible bajo de LATB
PULSO
movlw .40 ;temporizacion de 5ms
call retardo_ms





; movlw 0xf0
; andwf LATB ;borra el nible bajo de LATB
; movlw 0x00 ;cero
; iorwf LATB ;mete valor de w en el nible bajo de LATB
; PULSO
; movlw .40 ;temporizacion de 5ms
; call retardo_ms


; movlw 0xf0
; andwf LATB ;borra el nible bajo de LATB
; movlw 0x0C ;DISPLAY ON/OFF. display on,cursor off,parpadeo off.
; iorwf LATB ;mete valor de w en el nible bajo de LATB
; PULSO
; movlw .40 ;temporizacion de 5ms
; call retardo_ms

; movlw 0xf0
; andwf LATB ;borra el nible bajo de LATB
; movlw 0x00 ;cero
; iorwf LATB ;mete valor de w en el nible bajo de LATB
; PULSO
; movlw .40 ;temporizacion de 5ms
; call retardo_ms


; movlw 0xf0
; andwf LATB ;borra el nible bajo de LATB
; movlw 0x01 ;CLEAR DISPLAY
; iorwf LATB ;mete valor de w en el nible bajo de LATB
; PULSO
; movlw .40 ;temporizacion de 5ms
; call retardo_ms

; movlw 0xf0
; andwf LATB ;borra el nible bajo de LATB
; movlw 0x00 ;cero
; iorwf LATB ;mete valor de w en el nible bajo de LATB
; PULSO
; movlw .40 ;temporizacion de 5ms
; call retardo_ms
;
;
; movlw 0xf0
; andwf LATB ;borra el nible bajo de LATB
; movlw 0x04 ;ENTRY MODE. no incremento,modo normal.
; iorwf LATB ;mete valor de w en el nible bajo de LATB
; PULSO
; movlw .40 ;temporizacion de 5ms
; call retardo_ms


return

PULSO MACRO ;pulso en terminal E de la LCD
ENABLE_LCD ;habilita LCD (activa E de la LCD)
movlw 0x08
call retardo_ms ;retardo 1ms
  DISABLE_LCD ;deshabilita LCD (desactiva E de la LCD)
ENDM

#define COMANDOS     bcf PORTA,RS ;Desactiva RS (modo comando)                 RS de la LCD
   #define DATOS     bsf PORTA,RS ;Activa RS (modo datos) RS de la LCD

Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: caso extraño en inicializacion de LCD
« Respuesta #3 en: 25 de Abril de 2014, 12:52:58 »
Me alegro que dieras con el fallo Grounman  :-/ :-/ :-/ pero por otro lado me preocupas porque te respondes a ti mismo, es decir hablas solo, eso es peligroso, es el primer paso hacia la locura  :D :D :D de todos estar un poco loco no tiene nada de malo.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: caso extraño en inicializacion de LCD
« Respuesta #4 en: 25 de Abril de 2014, 16:22:00 »
 :D que remedio.nadie me daba ninguna pista.asi que me he puesto a escribir solo.supongo que alguna de las dos neuronas que tengo.estaba durmiendo. :mrgreen:
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: caso extraño en inicializacion de LCD
« Respuesta #5 en: 28 de Abril de 2014, 15:37:17 »

Veo que estas montando una Prusa (impresora 3D) aunque supongo que ya conoceras estos videotutoriales te los pongo por si acaso, a lo mejor a alguien mas le interesan, explica paso a paso en 63 videotutoriales todo el montaje:

http://www.iearobotics.com/wiki/index.php?title=Guia_de_montaje_de_la_Prusa_2

¿Vas a hacer tu propia electronica? ¿O lo vas a hacer con Arduino?

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: caso extraño en inicializacion de LCD
« Respuesta #6 en: 29 de Abril de 2014, 15:56:57 »
por el momento he pedido los materiales por ebay.he buscado por diferentes vendedores.y de los mas economicos que he encontrado.
ya me han llegado diferentes materiales.pero me faltan algunos mas.

he pedido las ramps 1.4 que inclullen los 5 drivers A4958 con radiadores por 21,53€,y el arduino Mega 2560 por 11,38.
los 5 motores con todos los cables,rodamientos,correa y piñones por unos 86€.las varillas por 16€.los marcos de metraquilato por 40€.
y las piezas de plastico incluyendo partes del extrusor por 22€.la cama caliente por 7,22€.los 6 sensores magneticos para los topes por 11€.
tornillos y varillas roscadas por unos 15€.

llevo gastados un total de 230€.todabia me falta el extrusor,el rollo de ABS,y la fuente de alimentacion.no se si me faltara algo mas.
la fuente usare la de un PC viejo.

tengo entendido de que una montada sale por unos 450€.asi que espero ahorrar algo.


quiero montarlo con el arduino porque el proyecto esta ya hecho.y quiero hacer las piezas para las proximas que pudiera montar.
y cuando ya sepa como funciona todo.es posible que diseñe una con un PIC.
pero me falta bastante para eso.ya que son muchas cosas las que aprender.tambien estoy estudiando Blender para hacer el modelado
de las piezas que quisiera realizar para diferentes proyectos de control de mecanismos.

uno de ellos es el control para el angulo de las palas de una elize de un generador eolico.
« Última modificación: 30 de Abril de 2014, 15:54:34 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado diego10

  • PIC10
  • *
  • Mensajes: 17
Re: caso extraño en inicializacion de LCD
« Respuesta #7 en: 09 de Junio de 2014, 20:23:45 »
Buenas soy nuevo en este foro!!! Mi problema es el siguiente a ver si alguien me puede dar una mano!!! Estoy trabajando con un pic16f877a un lcd 16x2 comun un clock de 4mhz... lo que quiero hacer es algo basico como hacer aparecer el mensaje HOLA en la pantalla del lcd para luego poder hacer otro proyecto mucho mas complejo para la universidad.. el tema es que siempre me aparecen cuadros negros en el lcd... he probado todo todo!! he visto preguntas en este foro y no puedo slucionarlo... las rutinas estas sacadas del libro por eso es que me extraña que no funcionen. Espero que alguien me pueda ayudar ya que me estoy volviendo loco!! Adjunto los codigos en asm Gracias a todos!!!!!   

Desconectado viggiani1975

  • PIC10
  • *
  • Mensajes: 4
Re: caso extraño en inicializacion de LCD
« Respuesta #8 en: 10 de Junio de 2014, 16:24:10 »
Sería bueno que subieras la simulación en proteus, si es que la tienes, para que puedan darte una mejor ayuda, eso es lo más recomendable me parece a mi. ;-)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: caso extraño en inicializacion de LCD
« Respuesta #9 en: 10 de Junio de 2014, 16:33:13 »
yo me volvi loco con algunos problemas con las lcd.hay dos cosas muy importantes que tienes que comprobar.lo primero es como inicializas la LCD.
ya sea en el modo 4bit o en el modo 8bit.y lo segundo es que compruebes que el pic no se te este reiniciando.

leete muy bien el datasheet de la LCD.y comprueba los tiempos de retardo.sobretodo el pulso de eneble.si no le das tiempo a la lcd a gestionarse,vas ha tener muchos
problemas.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: caso extraño en inicializacion de LCD
« Respuesta #10 en: 10 de Junio de 2014, 16:57:08 »
Buenas soy nuevo en este foro!!! Mi problema es el siguiente a ver si alguien me puede dar una mano!!! Estoy trabajando con un pic16f877a un lcd 16x2 comun un clock de 4mhz... lo que quiero hacer es algo basico como hacer aparecer el mensaje HOLA en la pantalla del lcd para luego poder hacer otro proyecto mucho mas complejo para la universidad.. el tema es que siempre me aparecen cuadros negros en el lcd... he probado todo todo!! he visto preguntas en este foro y no puedo slucionarlo... las rutinas estas sacadas del libro por eso es que me extraña que no funcionen. Espero que alguien me pueda ayudar ya que me estoy volviendo loco!! Adjunto los codigos en asm Gracias a todos!!!!!   
te salen las dos líneas a cuadros, o sólo la superior?
Puesto que podría ser el contraste
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado diego10

  • PIC10
  • *
  • Mensajes: 17
Re: caso extraño en inicializacion de LCD
« Respuesta #11 en: 10 de Junio de 2014, 18:39:39 »
Buenas!! El contraste no es porque ya lo probe con un pote... Me aparecen las dos lineas con cuadraditos negros... lo que me llama mas la atencion es que use el codigo sacado de un libro... alguien sabe bien los tiempos de retardo para la inicializacion o si tiene esa rutina se los agradeceria!!!! Desde ya muchas gracias!!

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: caso extraño en inicializacion de LCD
« Respuesta #12 en: 10 de Junio de 2014, 18:59:39 »
Bajate el datasheet de la lcd.allí estan los tiempos.y para saber si el pic esta funcionando a la frecuencia que tu crees.
Enciende un LED cada segundo.a mi me ha pasado que creía funcionar a una
Frecuencia.y luego hera otra.sobretodo cuando se trabaja con simuladores.
Montando mi primera impresora 3D (Raprep Prusa i3)