Autor Tema: Problema con lcd y pic16f873  (Leído 6190 veces)

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

Desconectado zarain

  • PIC10
  • *
  • Mensajes: 1
Problema con lcd y pic16f873
« en: 25 de Mayo de 2006, 14:16:22 »
Mi problema es el siguiente: en su dia realice una aplicación con un pic16f84a y una lcd 2x16 utilizando la libreria lcd2.c y funcionaba correctamente, cuando cambie al 16f873 manteniendo los mismos pines de control y datos la sorpresa es que no aparecia nada por la lcd solamente la primera fila totalmente iluminada. Si alguien tiene alguna sugerencia se lo agradeceria

Saludos

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Problema con lcd y pic16f873
« Respuesta #1 en: 25 de Mayo de 2006, 14:18:47 »
Yo te recomendaria que verificases bien el conexionado de la lcd y si puede ser postea el codigo


Suerte!!! :wink:
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado Vanesa

  • PIC10
  • *
  • Mensajes: 29
Re: Problema con lcd y pic16f873
« Respuesta #2 en: 25 de Mayo de 2006, 15:07:08 »
Hola Zarain!!

Me alegro de leer tu post para comprobar que no soy la única que tiene ese problema... estoy en las mismas que tú, hice un programa para el 16f84 con la librería lcd2.c que funcionaba perfectamente con la lcd de hitachi lm016 (2x16) pero al aumentar el programa y quedarme corta de rom pasé a un 873.

Al hacer la simulación en proteus, conectando los pines igual que para el 84 funciona perfectamente, sin ningún tipo de problema pero a la hora de montar el hardware y comprobarlo no funciona. Únicamente se enciende la primera fila con cuadraditos negros...

Según mi profesor puede ser problema de las librerías, que tengan cambios de direcciones o algo así, pero he probado con otras librerías que me ha pasado y tampoco iba así que no hay nada claro. A ver si tenemos suerte y alguien nos puede decir qué ocurre. Y si consigo llegar a una respuesta y descubro qué pasa lo postearé, vale??

Mucha suerte!!!!

Por cierto vszener, el código dle programa que quiero meter en el 873 es muy largo así que yo te pongo uno que con el 84 iba muy bien y con el 873 tampoco funciona y que es lo más simple del mundo:

#include <16f873.h>
#use delay (clock = 4000000)
#include <lcd2.c>

main ()
{
lcd_init();
while (1)
{
lcd_putc ("\f Hola");
delay_ms (1000);
lcd_putc ("\f Adios");
delay_ms (1000);
}
}

Desconectado Vanesa

  • PIC10
  • *
  • Mensajes: 29
Re: Problema con lcd y pic16f873
« Respuesta #3 en: 25 de Mayo de 2006, 15:39:47 »
Estoy aquí de nuevo...

He encontrado otro mensaje posteado hace más de dos años sobre el mismo tema. El link es este... http://www.todopic.com.ar/foros/index.php?topic=10279.0

Tampoco dice gran cosa, solo lo que mi profesor nos había comentado que podían ser los fallos: 1, que hay que configurar el puerto A como digital y 2, que las posiciones de memoria reservadas ( o algo así) en el 84 empiezan en 0 y en el 873 en 20...

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Problema con lcd y pic16f873
« Respuesta #4 en: 25 de Mayo de 2006, 16:09:18 »
En que puertos está conectado el LCD en el 16F873?.

Saludos.
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Vanesa

  • PIC10
  • *
  • Mensajes: 29
Re: Problema con lcd y pic16f873
« Respuesta #5 en: 25 de Mayo de 2006, 16:22:03 »
En mi caso (bueno, y supongo que en el de zarain puesto que esta utilizando la lcd2.c también) estoy utilizando el puerto B para enviar los datos a la LCD y las líneas 0,1 y 2 del puerto A para el control.

Adjunto la librería lcd2.c que uso, por si sirve de algo o alguien puede ayudarme a modificarla  adecuadamente.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problema con lcd y pic16f873
« Respuesta #6 en: 25 de Mayo de 2006, 20:09:07 »
En mi caso (bueno, y supongo que en el de zarain puesto que esta utilizando la lcd2.c también) estoy utilizando el puerto B para enviar los datos a la LCD y las líneas 0,1 y 2 del puerto A para el control.

Adjunto la librería lcd2.c que uso, por si sirve de algo o alguien puede ayudarme a modificarla  adecuadamente.

He visto el código y te digo lo que veo como 'para revisar'

1) Utiliza el puerto A el cual al encender el pic se inicializa como entradas analógicas.  Esto no presentará problemas para usarlo como 'salida' (al momento de escribir un dato) pero sí al momento de usarlo como entrada.  (aunque esta función por ahora no la estas usando).

2) La funcion lcd_putc está declarada de la siguiente forma

Código: C
  1. void lcd_putc( char c) {
  2.    switch (c) {
  3.      case '\f'   : lcd_enviar(LCD_COMANDO,0x01);
  4.                    delay_ms(2);
  5.                    break;
  6.      case '\n'   : lcd_gotoxy(1,2);               break;
  7.      case '\b'   : lcd_enviar(LCD_COMANDO,0x10);  break;
  8.      default     : lcd_enviar(LCD_DATO,c);        break;
  9.    }
  10. }

Es decir que está esperando un 'char', un simple byte y no un string como le estas enviando en

Código: C
  1. lcd_putc ("\f Hola");

Prueba simplemente hacer

Código: C
  1. lcd_putc ("a");


También dale más tiempo antes del lcd_init , unos 200mseg antes de ejecutar el lcd_init para garantizar que el display se haya iniciado correctamente.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Problema con lcd y pic16f873
« Respuesta #7 en: 25 de Mayo de 2006, 20:23:48 »
Hola maunix, no conosco muy bien el C, pero no creo que el problema sea ese, a mi me a pasado lo mismo pero en .asm y el problema era la configuracion del puerto A, por lo tanto a estos colega le recomendaria que confuguren bien el puerto A (ya sea en la libreria o el inicion del programa) o que cambien los pines usados en el puerto a a otro puerto, como el puerto C.

Espero puedan solucionar su problema, un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Problema con lcd y pic16f873
« Respuesta #8 en: 25 de Mayo de 2006, 20:51:06 »
De todas formas la forma correcta de utlizar lcd_putc es:

Código: C
  1. printf(lcd_putc,"\f Hola");

Ya que lcd_putc es admite como argumento un char.

Un saludo.
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problema con lcd y pic16f873
« Respuesta #9 en: 25 de Mayo de 2006, 21:16:39 »
Hola maunix, no conosco muy bien el C, pero no creo que el problema sea ese, a mi me a pasado lo mismo pero en .asm y el problema era la configuracion del puerto A, por lo tanto a estos colega le recomendaria que confuguren bien el puerto A (ya sea en la libreria o el inicion del programa) o que cambien los pines usados en el puerto a a otro puerto, como el puerto C.


Por lo que leí del código, utiliza los pines A para lectura (cuando los usa en la funcion de leer un dato de la memoria del display) .  Pero usar un pin como A/D como salida no representa inconveniente.  Si uno lo pone en 1, se pondrá en 1. Si lo pone en 0, se pondrá en 0.

La función está mal empleada y la forma correcta de mandar un string es la que puso jfh900

De todas formas, me quedan mas dudas al respecto:

Vanesa nos puedes contar como conectaste el display al PIC? que señal del display va a que pin del pic?
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Vanesa

  • PIC10
  • *
  • Mensajes: 29
Re: Problema con lcd y pic16f873
« Respuesta #10 en: 26 de Mayo de 2006, 03:41:59 »
a ver, organizacion...

el problema no está en el programa, ya que lcd_putc se puede usar con strings  directamente igual que lo he usado yo, al menos con el 16f84 funciona sin ningún problema.

Después de buscar información he llegado a la conclusión de que, como ya habéis dicho vosotros y como puse en un post anterior, el problema está con las señales analógicas y con las posiciones de memoria reservadas. La cuestión es que no sé cómo se modificaría la librería para que funcionase correctamente.

El pic está conectado de la siguiente manera a la LCD:

D0-D7  -->   B0-B7
E -->
RS -->    A0
RW -->   A2

Desconectado Vanesa

  • PIC10
  • *
  • Mensajes: 29
Re: Problema con lcd y pic16f873
« Respuesta #11 en: 26 de Mayo de 2006, 03:56:50 »
vaya con el foro, que no me deja modificar el mensaje....

Vuelvo a copiar la conexion de patillaje de forma correcta:

D0-D7 -->  B0-B7
E --> A2
RS --> A0
RW --> A1

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Problema con lcd y pic16f873
« Respuesta #12 en: 26 de Mayo de 2006, 04:02:02 »
Hola Vanesa, es lo que yo estaba diciendo, pro si modificas la libreria ya no te servira para el PIC16F84A por ejemplo, yo lo que haria seria configurar de la menera adecuada el puerto al iniciar el programa.

Y si deseas modificar la libreria lo deberias hacer en este sector (void lcd_init()), que es primero en ejecutar el programa y solo lo hace una sola ves.

Un saludo.

Atte. CARLOS.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Vanesa

  • PIC10
  • *
  • Mensajes: 29
Re: Problema con lcd y pic16f873
« Respuesta #13 en: 26 de Mayo de 2006, 04:35:40 »
Hola Chaly,

Sí, tengo claro que si modificas la librería ya no te servirá para el 16f84
pero eso no es problema, yo ahora necesito manejar el 873.

Hemos probado a modificar la librería declarando el puerto A como digital con la instrucción de CCS "setup_adc_ports (no_analogs). Hemos puesto esta instrucción cada vez que aparecía un set_tris_a pero aún así sigue sin funcionar.

En cuanto a que la memoria empiece en la dirección 20 en lugar de la 00 como en el 84 no sé cómo podría modificarse ni si será ese el problema que tenemos.

Creo que probaremos si no a cambiar los pines de control de la LCD al puerto C, aunque el problema es que tenemos una placa de pruebas para comprobar el funcionamiento y está conectada al puerto A sin posibilidad de modificación.

Muchas gracias por todo

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Problema con lcd y pic16f873
« Respuesta #14 en: 26 de Mayo de 2006, 05:51:55 »
Hola Vanesa, se que en C se puede incluir rutinas en .asm, por lo que si deseas incluir esta rutina que te envio calculo que te resolvera el problema:

   bcf        STATUS,RP0
   bcf        STATUS,RP1
   clrf        PORTA
   bsf        STATUS,RP0
   movlw   B'00000110'
   movwf   ADCON1
   movlw   B'11111000'         ; A0, A1, A2 configurados como salida, el resto entrada
   movwf   TRISA
   bcf        STATUS,RP0

Esta rutina la e sacado de un programa que tambien estaba manejando un display por eso se que funciona, es la encargada de configurar el puerto A como salidas digitales, incluso el programa completo funciona bien simulandolo en el proteus 6.9.
Yo te recomendaria que la coloques en el ancabezado del programa de ser posible, y luego de cualquier manejo que hagas con el puerto A (no creo sea necesario si solo lo usas como digital).

Un saludo.

Atte. CARLOS.

« Última modificación: 26 de Mayo de 2006, 05:56:16 por Chaly29 »
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.