TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: guancho2002 en 23 de Mayo de 2007, 18:24:20

Título: Inicializar un LCD de 4x20 con PIC16F877A
Publicado por: guancho2002 en 23 de Mayo de 2007, 18:24:20
Buenas a todos... ya hacia algun tiempo que no pasaba por aqui y veo que esto sigue adelante. Me alegro mucho por todos.
Tengo el siguiente problema que me lleva loco:
Tengo un circuito montado con un P16F877A y un LCD de 4x20 al que tengo configurado por 4bits en el puerto B. El tema es el siguiente: Con el circuito sin tocar, programo el PIC con un programa que me pasaron en su dia y el LCD funciona sin problemas. Sin embargo, he intentado desarrollar un programa totalmente nuevo y no consigo poner el LCD en marcha, me salen las lineas impares llenas de cuadros.
El problema es que el otro programa que me pasaron está en Hexadecimal y es casi imposible ver como funciona ya que al pasarlo a ensamblador te rellena muchisimas lineas de código sin ningún tipo de nota... en fin, practicamente imposible.
He revisado infinidad de comentarios que haceis por los foros; que si retardos, que si inicializarlo, que si... he probado de todo y esto sigue igual.
¿Se os ocurre alguna idea de lo que puede estar pasando? Lo he comprobado con Proteus y me va genial, sin embargo cuando lo pongo en práctica... ná de ná.
Gracias a todos y ánimo con todo esto que si no fuera por vosotros... :P
Título: Re: Inicializar un LCD de 4x20 con PIC16F877A
Publicado por: micro_cadaver en 24 de Mayo de 2007, 01:44:42
pues si en proteus funciona la parte digital entonces algo en la fuente de alimentación debe esatr fallando, o derepente debe ser por el modelo del lcd en el proteus, por ahi vi que le asignana tiempos de espera distintos que al hitachiXXXXX, si tu codigo aparentemente esta ok sugiero que lo posteees para revisarlo y tambien el hardware tal y como lo estas conectando, es más si quieres darte un tiempo y utiliza el buscador del foro, derepente hallas algo más. exitos!!!!  :-)
pd: tienes el datasheet del LCd que usas?
Título: Re: Inicializar un LCD de 4x20 con PIC16F877A
Publicado por: guancho2002 en 24 de Mayo de 2007, 09:43:36
Gracias por tu pronta respuesta.
La fuente de alimentación no tiene ningún problema porque como he comentado, con el otro programa va bien.
El LCD es un POWERTIP PC2004-A y su datasheet no tiene casi información. Si el código no estuviese bien, no me funcionaría en PROTEUS con lo que creo que tiene que ser un tema de retardos, pero por mas que he probado...nada. :?
Título: Re: Inicializar un LCD de 4x20 con PIC16F877A
Publicado por: micro_cadaver en 24 de Mayo de 2007, 11:05:12
ya entonces como primer paso sube el datasheet que tiene y el programa para revisar que le falta o que le sobra . exitos!!  :-/
Título: Re: Inicializar un LCD de 4x20 con PIC16F877A
Publicado por: guancho2002 en 24 de Mayo de 2007, 15:58:12
Adjunto los dos ficheros que necesitas. Los puertos que utilizo para conectar el LCD son PORTB0,1,2,3 y PORTA0,1
Te adjunto la librería que adjunto para hacer funcionar el LCD, claro está que luego hago un programa en el que inicializo el LCD y envío un caracter.
Por si aclara algo más este tema, utilizo el TMR0 y el TMR1.
Gracias. :)
Título: Re: Inicializar un LCD de 4x20 con PIC16F877A
Publicado por: micro_cadaver en 24 de Mayo de 2007, 16:04:40
ahora los reviso, una cosa mas, puedes subir el archivo de la simulacion en proteus?  :-/

viendo lo que me mandastes es el fichero donde esta todas las rutinas del LCD, lo malo es que no tengo ese tipo de LCD lo voy a simular a ver que me sale ...

m.. tio falta las rutinas de los tiempos... :(
Título: Re: Inicializar un LCD de 4x20 con PIC16F877A
Publicado por: guancho2002 en 25 de Mayo de 2007, 17:00:41
lo siento, no puedo enviarte el del proteus porque no lo tengo en estos momentos... te adjunto el de retardos y en cuanto pueda subo el de proteus.
Si puedes ir adelantando con esto te lo agradecería.
Gracias.
Título: Re: Inicializar un LCD de 4x20 con PIC16F877A
Publicado por: MGLSOFT en 25 de Mayo de 2007, 21:35:57
Creo, mirando tu codigo, que el error esta en estas lineas:
Código: [Seleccionar]
LCD_EnviaComando
bcf LCD_PinRS ; Activa el Modo Comando, poniendo RS=0.
goto LCD_Envia
LCD_Caracter
bsf LCD_PinRS ; Activa el "Modo Dato", poniendo RS=1.
call LCD_CodigoCGROM ; Obtiene el código para correcta visualización.
LCD_Envia
movwf LCD_GuardaDato ; Guarda el dato a enviar.
call LCD_EscribeLCD ; Primero envía el nibble alto.
swapf LCD_GuardaDato,W ; Ahora envía el nibble bajo. Para ello pasa el
; nibble bajo del dato a enviar a parte alta del byte.
call LCD_EscribeLCD ; Se envía al visualizador LCD.
btfss LCD_PinRS ; Debe garantizar una correcta escritura manteniendo
call Retardo_2ms ; 2 ms en modo comando y 50 µs en modo cáracter.
call Retardo_50micros
return

Normalmente de un LCD a otro, aun del mismo fabricante, varian los tiempos de inicializacion o mejor dicho de aceptacion de las tramas enviadas.
Por lo tanto si lees bien en las hojas de datos recomiendan revisar si se ha escrito correctamente en el antes de enviar nuevamente a escribir...
Para ello debes pasar los pines de datos a inputs y leer el byte de status, donde el bit 7 del mismo te indica si esta correctamente ejecutado el comando anterior.

Si quieres evitarte todo esto deberas incrementar los valores de las temporizaciones, ya que los ejemplos que circulan en la red estan hechos casi todos para micros trabajando a 4 MHz, por lo tanto si tu micro trabaja a 20 MHz debes darle 5 veces mas tiempo...sino no funcionara!!
Título: Re: Inicializar un LCD de 4x20 con PIC16F877A
Publicado por: guancho2002 en 26 de Mayo de 2007, 16:59:55
Hola MGLSOFT,
el micro es un 16F877A pero lo tengo funcionando a 4Mhz. ¿Se te ocurre alguna otra cosa? Ya probé en su momento el incrementar los tiempos y nada.
Gracias.
Título: Re: Inicializar un LCD de 4x20 con PIC16F877A
Publicado por: guancho2002 en 27 de Mayo de 2007, 06:56:20
Los ficheros que faltaban. No consigo dar con el problema. :(
Título: Re: Inicializar un LCD de 4x20 con PIC16F877A
Publicado por: guancho2002 en 28 de Mayo de 2007, 12:08:06
Una ayudilla?  :(
Título: Re: Inicializar un LCD de 4x20 con PIC16F877A
Publicado por: MGLSOFT en 28 de Mayo de 2007, 13:43:19
realmente no encuentro que puede estar pasandote, sigo creyendo que debes tener mal los tiempos de inicializacion.
Por otro lado, estas seguro que sin usar la linea R/W esa rutina anda bien??
Título: Re: Inicializar un LCD de 4x20 con PIC16F877A
Publicado por: guancho2002 en 28 de Mayo de 2007, 17:04:42
Que tal MGLSOFT?
Te adelanto cosas porque yo alucino... lo he probado en el PORTB 4,5,6,7 y funciona, sin embargo modificando el fichero LCD_4BIT.INC como os he adjuntado para que funcione en el PORTB 0,1,2,3 no me funciona. He probado con otro 16F877A por si estuviese algún puerto mal y me hace lo mismo, es decir, no funciona. ¿Que puede estar ocurriendo en esas puertas? ¿hay que configurarlas de algún modo para que sean simplemente I/O?
El problema es que necesito configurarlo en las puertas 0,1,2,3... :?
Para volverse loco.

Un saludo
Título: Re: Inicializar un LCD de 4x20 con PIC16F877A
Publicado por: guancho2002 en 28 de Mayo de 2007, 19:07:49
 :-/ :-/Por finnnnnnnnnnnnnn :-/ :-/
Ya he dado con el problema... esto me va a costar el matrimonio...
El problema radicaba en que la patilla RB3 tiene que ser desconectada del LVP, o sea, que si iniciamos el micro y no anulamos la opción LVP nuestra amiga la RB3 nos puede jugar malas pasadas como la que me ha ocurrido a mi durante estos dias... y la cosa es que ahora recuerdo que ya me ocurrió en su día y lo descubrí pero después de tanto tiempo... en fin, cosas del oficio. :-/ :-/
Gracias a MGLSOFT y micro_cadaver por haberme aguantado todo este rollo y por escucharnos en estos momentos tan angustiosos en los que necesitamos de personas comprometidas como vosotros.
Un saludo
Título: Re: Inicializar un LCD de 4x20 con PIC16F877A
Publicado por: micro_cadaver en 28 de Mayo de 2007, 20:08:32
 :5] por eso te pedia tu codigo completo!!!!! (lo sospeche desde un principio...  :D)

 :mrgreen: jijiji pero lo mejor de todo es que lo ha hecho por tu propia cuenta, ves cuan importante es tener todos lo parámetros a regla del pic? mucha gente no le da importancia, ahora ya tienes tus alitas para poder progresar y encaminarte solo a lo que quieras conseguir!!!  :-/ :-/ :-/ :-/ :-/
Título: Re: Inicializar un LCD de 4x20 con PIC16F877A
Publicado por: MGLSOFT en 28 de Mayo de 2007, 21:35:29
Bueno, en el dia del cumpleaños del foro es muy bueno que encuentres una buena solucion!!
Te felicito!!
Y no debes agradecernos, en la medida que sepas mas lo que debes hacer es ayudar a los que comienzan... :mrgreen: :mrgreen:

Esa es la forma de agradecer aqui !!! :D :D
Título: Re: Inicializar un LCD de 4x20 con PIC16F877A
Publicado por: guancho2002 en 29 de Mayo de 2007, 09:08:01
Eso está hecho...
Felicidades a todos!!!