# proyecto PIC16F84 lcd... consultilla...



## skan (Jun 8, 2006)

SIGO CON EL PROYECTO FINAL...
ya tengo el lcd, monte todo y carge un programilla que tengo (1 interruptor en RA4 y 1 da abierto y 0 cerrado en el lcd..) tengo varios de ejemplo que nos ha dado el profesor...

EL PROBLEMA...

DEL MENSAJE "    abierto" (inclusive espacios) solo se ven las 4 primeras letras...el visor LCD queda como "partido" este es el modelo CMC116x01, de 1 línea,16chars... consulte su esquema y el bus de 8bits DB0-DB7 se divide y cada uno ataca a 40 segmentos del LCD.. lo que me ha llevado a pensar que necesito 8 bits para el control de este LCD..
intenté modificar el programa..y me di cuenta que todos los programas ejemplo que tengo usan la libreria "LCD_4BIT.INC" y al quitarla y ponerlo a 8 bits...me faltan etiquetas que eran de esa libreria LCD_linea1, LCD_inicializa...

Conecto bien los demas cables (BUS DB7-DB4 y RS, R/W, ENABLE...al PIC..) para su programación utilizo unas librerias de un CD de un libro del pic16f84.. ((LCD_4BIT.INC, RETARDOS.INC, LCD_MENSAJE.INC...

-alguien tiene una libreria para el control de 8 bits...parecida a la que aqui adjunto?
-alguna otra solucion a este problema?
-ade+ no tendre suficientes patillas.. 8DB, 3 de control son 11 y necesito 4 para 4 sensores..

gracias por su rápida CONTESTACION.


----------



## tiopepe123 (Jun 8, 2006)

No es culpa de los 8/4 bits. El sistema de 4 bits se basa en enviar primero un trozo del byte y despues el otro.
Pero en ningun caso implica multiplexion directa del cristal liquido.
Todo el trabajo de visualizacion lo hace un pequeño circuito inteligente especializado en el control de pantallas LCD alfanumericas.

Resumiendo es sistema de cuatro bits solo sirve para ahorrarte unas patillas de tu pic16f84.

Posibles causas:

- puede ser culpa de los retardos que son demasiado pequeños, es un dispositivo relativamente lento, mira en el datasheet. Cambialos por valores mucho mas grandes

-Tienes interrupciones? que no modifique nada mientras se atienden.

-El perro guardian lo tienes actvado wathdog, desactivar fusibles

Espero haberte ayudado


----------



## skan (Jun 8, 2006)

despues de haberlo probado.. ya me temia q ese no era el problema, en parte me alegro pq me ahorro patillas  . coji y quite espacios de el texto y en media pantalla se veia el mensaje estandar,,, y en el otro trozo el mensaje cerrado.. asi que la comunicacion con el lcd era buena..

-el watchdog si lo ponia como activo.. lo quitare..
-interrupciones: uso RB0-RB4 para 4 sensores.. no se si esto puede influir, y en las librerias supongo que usará el TMR0 también...
-los retardos son ejemplos de los apuntes que tengo, debería funcionar...

-TODO ESTO LO PROBARÉ MAÑANA, y ya te diré cosas... ahora estoy finalizando el circuito de un MOTOR PAP y instalandolo en la maketa..

--------------------
gracias por tu atención, espero seguir en contacto (10 días para entregar proyecto).. la electrónica me encanta...pero la educación pública...prff todo de golpe en un mes y a buscarse la vida.. espero estudiar industriales de electrónica este mundo es fascinante..
JEJE.
saludos.


----------



## skan (Jun 13, 2006)

segui tus insrucciones.
-desactive el watchdog 
cargando una parte de mi programa, llege a ver algo asi como un mensaje ("puente elevadizo.." "barco.." entre caracteres raros) no se si eso es por que no le doy los impulsos bien en la board (la patilla de los interruptores las conecto a masa, y para dar valor positivo 1, la desconecto, o paso a +).. 

-interrupciones no hay ninguna..

-el tema temporizaciones, consulte el datsheet y las que usaba estaban muy por debajo, asi y todo modifique las librerias y le subi *3 las temporizaciones...y el LCD se quedaban todos los segmentos encendidos.. esa fue la ultima prueba...

---hacia donde tirar para llegar a dar con la solución??--
-las librerias que utilizo son de el libro "microcontrolador pic16f84A"
-los ejemplos tb...
-el programa es sencillo y creo q esta bien realizado.
-las conexiones del LCD: bus db7-db4 a RB7-RB4 del pic. RS  a RA0, R/W a RA1, E a RA2... tal y como esta definido en esas librerias, y ejemplos.. las incluyo todas "LCD_4BIT.inc, RETARDOS.INC, LCD_MENS...
....

debo entregar el proyecto este martes,,, me da igual las noches sin dormir que tenga q usar... pero es dificil hacerlo cuando no sabes hacia donde tirar... 

(adjunto mi programa control del LCD..pa q echeis un ojo...))

THKS POR VUESTRA ATENCIÓN


----------



## skan (Jun 15, 2006)

PORFIN pude visualizar algo coherente y bien escrito en el LCD!!!!!!!...
lo conseguí mandando yo caracter a caracter, sin utilizar la libreria para enviar la palabra entera como hacia antes...esta es un poco la estructura...
--------------
ORG	0
Inicio
	call	LCD_Inicializa
Principal
	movlw	'H'
	call	LCD_Caracter
	call	Retardo_500ms
	movlw	'o'
	call	LCD_Caracter
	call	Retardo_500ms
	movlw	'l'
	call	LCD_Caracter
	call	Retardo_500ms
	movlw	'a'
	call	LCD_Caracter
	call	Retardo_500ms
	call	LCD_Borra		; Borra la pantalla.
	call	Retardo_500ms
	goto	Principal
-----------------
EL PROBLEMA QUE PERSISTE:: sigo controlando tan solo la parte izquierda de la pantalla... e probado de subir temporizaciones, desactivar el watchdog, verificar que no hay ninguna interrupción activa que altere el programa...y nada sigue igual..

Recuerdo que el control lo realizo de DB7-DB4 del LCD a RB7-RB4 del pic, RS=RA0, R/W=RA1, E=RA2...

alguna idea¿¿ al- ya es algo lo que puedo enseñar..!


----------



## tiopepe123 (Jun 15, 2006)

te hablo de memoria, ya que yo utilizo el C que es mas practico.

Si no me equivoco debes configurar la LCD para que avance automaticamente una posicion automaticamente, esto esta en la rutina de inicializacion.

Prueba de hacer un "gotoxy o locate" o sea meter el cursor en la posicion que tu quieras.
Recuerda de la 0 a 39 es la primera fina y de la 40 la segunda.
Ojo hablo dememoria.

Recuerda que la lcd es un dispositivo lento, puedes meterle delay's gordos que no pasa nada, luego ya lo arreglaras.
Los retardos  son los que hay DENTRO de la rutina de la LCD, deberias mirar dentro de "LCD_Caracter ". Omejor si hay dentro de la libria algun #define clock o frec o algo asi y modificar solo eso


----------



## skan (Jun 15, 2006)

probe de colocarme en la posición 9 del visor LCD... pero los diagramas que tengo con las direcciones del lcd es de un visor 16x2.. no se si serán las mismas...
supuse que van de 00 a 0F. intento colocarme en la posicion 8, es decir '08' y carge al registro el literal b'00001000' despues llame a una libreria "LCD_PosicionLinea1" cuyo contenido es :

LCD_PosicionLinea1	; Cursor a posición de la Línea 1, a partir de la
	iorlw	b'10000000'; dirección 00h de la DDRAM más el valor del
	goto	LCD_EnviaComando	; registro W.

pero no pasa a esa posición, sino que vuelve a empezar a escribir en la posicion 00, pero si muestra todo el mensaje...

¿cargo bien la posición?
presiento que ya estoy muy cerca..y alfinal parece que todo estará apunto y al nivel que me exigí! THKS...por su atención.


----------

