TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: groundman 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:
;************************************************** 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
-
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.
-
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.
;************************************************** 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
-
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.
-
: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:
-
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?
-
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.
-
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!!!!!
-
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. ;-)
-
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.
-
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
-
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!!
-
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.