Autor Tema: Inicializar un LCD de 4x20 con PIC16F877A  (Leído 7262 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado guancho2002

  • PIC16
  • ***
  • Mensajes: 113
Inicializar un LCD de 4x20 con PIC16F877A
« 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

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Inicializar un LCD de 4x20 con PIC16F877A
« Respuesta #1 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?
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado guancho2002

  • PIC16
  • ***
  • Mensajes: 113
Re: Inicializar un LCD de 4x20 con PIC16F877A
« Respuesta #2 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. :?

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Inicializar un LCD de 4x20 con PIC16F877A
« Respuesta #3 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!!  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado guancho2002

  • PIC16
  • ***
  • Mensajes: 113
Re: Inicializar un LCD de 4x20 con PIC16F877A
« Respuesta #4 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. :)

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Inicializar un LCD de 4x20 con PIC16F877A
« Respuesta #5 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... :(
« Última modificación: 24 de Mayo de 2007, 17:04:33 por micro_cadaver »
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado guancho2002

  • PIC16
  • ***
  • Mensajes: 113
Re: Inicializar un LCD de 4x20 con PIC16F877A
« Respuesta #6 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.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Inicializar un LCD de 4x20 con PIC16F877A
« Respuesta #7 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!!
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado guancho2002

  • PIC16
  • ***
  • Mensajes: 113
Re: Inicializar un LCD de 4x20 con PIC16F877A
« Respuesta #8 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.
« Última modificación: 26 de Mayo de 2007, 17:02:29 por guancho2002 »

Desconectado guancho2002

  • PIC16
  • ***
  • Mensajes: 113
Re: Inicializar un LCD de 4x20 con PIC16F877A
« Respuesta #9 en: 27 de Mayo de 2007, 06:56:20 »
Los ficheros que faltaban. No consigo dar con el problema. :(
« Última modificación: 27 de Mayo de 2007, 17:25:11 por guancho2002 »

Desconectado guancho2002

  • PIC16
  • ***
  • Mensajes: 113
Re: Inicializar un LCD de 4x20 con PIC16F877A
« Respuesta #10 en: 28 de Mayo de 2007, 12:08:06 »
Una ayudilla?  :(

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Inicializar un LCD de 4x20 con PIC16F877A
« Respuesta #11 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??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado guancho2002

  • PIC16
  • ***
  • Mensajes: 113
Re: Inicializar un LCD de 4x20 con PIC16F877A
« Respuesta #12 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

Desconectado guancho2002

  • PIC16
  • ***
  • Mensajes: 113
Re: Inicializar un LCD de 4x20 con PIC16F877A
« Respuesta #13 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

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Inicializar un LCD de 4x20 con PIC16F877A
« Respuesta #14 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!!!  :-/ :-/ :-/ :-/ :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com


 

anything