TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Tholkiem en 27 de Mayo de 2008, 15:57:47

Título: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: Tholkiem en 27 de Mayo de 2008, 15:57:47
El caso es que quiero conectar sobre el puerto C un LCD, desde las patillas C0 a C6. googeleando un poco por internet he visto que hay una libreria flex_lcd.c que sirve para mi proposito.
He definido sobre los pines que va el LCD, dejando el de RW a masa. y comentandolo en la libreria el USE_LCD_RW

#define LCD_DB4 PIN_C2
#define LCD_DB5 PIN_C3
#define LCD_DB6 PIN_C4
#define LCD_DB7 PIN_C5

#define LCD_E PIN_C0
#define LCD_RS PIN_C1

//#define LCD_RW PIN_A2//No usado

// If you only want a 6-pin interface to your LCD, then
// connect the R/W pin on the LCD to ground, and comment
// out the following line.

//#define USE_LCD_RW 1

--- EN el main.c
#include "flex_lcd.c"

void main(void)
{
    printf("Inicializando..");
         lcd_init();
    do{   
      lcd_putc("h");
     delay_ms(1000);
    }while(TRUE==TRUE);//bucle infinito
 }


Una manita, para un pobre diablo. plis
Salu2 y Gracias
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: Tholkiem en 27 de Mayo de 2008, 17:19:28
Por si puede dar alguna pista más , si pruebo ha hacer  en el bucle del main:

    do{   
         lcd_putc("\f\fhola");
         delay_ms(1000);
         lcd_putc("h");
         delay_ms(1000);
    }while(TRUE==TRUE);//bucle infinito

Se ve como se enciende el lcd, cuando esta ejecutando lcd_putc("h");
He revisado las conexiones y son las correctas.
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: pablo en 27 de Mayo de 2008, 21:41:16
Proba con


while(true) {
    printf(lcd_putc,"\fHola");
}
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: jfh900 en 27 de Mayo de 2008, 21:57:54
No puedes definir los pines de forma externa en la librería flex_lcd. Prueba a modificarlos dentro de la librería.

Un saludo
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: Tholkiem en 28 de Mayo de 2008, 06:51:18
Gracias por vuestras respuestas.

Pablo he probado con prinft(lcd_putc,"/fhola");   y no ha funcionado. compila ok, pero no hace nada el LCD.
Sobre la respuesta de  jfh900 los defines los realizo dentro de la libreria.

Salu2.
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: Tholkiem en 28 de Mayo de 2008, 15:23:19
He probado con el codigo de la pagina de RedPic:
http://picmania.garcia-cuervo.com/PICC.htm#FLEXLCD
Adaptando unicamente los pines.

#define LCD_DB4 PIN_C2
#define LCD_DB5 PIN_C3
#define LCD_DB6 PIN_C4
#define LCD_DB7 PIN_C5

#define LCD_RS PIN_C0
//#define LCD_RW PIN_C1
#define LCD_E PIN_C1

El lcd se trata de un powertip pc1602F . Pero el pinout es similar a los que he visto por internet.El datasheet del aparato en cuestion es:
http://www.datasheetarchive.com/pdf/2700717.pdf


Dejo un par de fotos de los caracteres que muestra al arrancar, y los que muestra cuando se hace cualquier lcd_putc
Ya no se que probar...
Alguna idea¿?




Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: jfh900 en 28 de Mayo de 2008, 15:53:59
Sobre la respuesta de  jfh900 los defines los realizo dentro de la libreria.

#define LCD_DB4 PIN_C2
#define LCD_DB5 PIN_C3
#define LCD_DB6 PIN_C4
#define LCD_DB7 PIN_C5

#define LCD_E PIN_C0
#define LCD_RS PIN_C1

//#define LCD_RW PIN_A2//No usado

// If you only want a 6-pin interface to your LCD, then
// connect the R/W pin on the LCD to ground, and comment
// out the following line.

//#define USE_LCD_RW 1

--- EN el main.c
#include "flex_lcd.c"

void main(void)
{

Me parece que según el código que pusiste las modificaciones o los "define" estan fuera de la librería o yo no tengo ni idea de "C".

Un saludo
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: Tholkiem en 28 de Mayo de 2008, 15:57:13
Sorry, igual no me explique bien ..
En el codigo puse:

--- EN el main.c <-- aqui queria decir que apartir de ahi era el fichero del main.
#include "flex_lcd.c"

void main(void)
{

Pero vamos que ni dentro ni fuera, no carbura la cosa ...
Ya no se si tirarme al tren.. o al maquinista jejeje
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: jfh900 en 28 de Mayo de 2008, 16:12:55
Haber si me explico mejor. Si creas un define fuera de la librería con el fin de modificar el valor, esto no funcionará, tienes que modificar directamente el define contenido dentro de la librería.

Un saludo
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: Tholkiem en 28 de Mayo de 2008, 16:25:19
Me ha quedado claro como el agua..
Pero al menos en el ANSI C convencional si declaras un define  y posteriormente lo usas en una cabecera (*.h) si que rula.
De echo RedPic en su ejemplo del display asi lo hace. http://picmania.garcia-cuervo.com/PICC.htm#FLEXLCD

Pero para salvarme las espaldas lo hice como tu me comentas. Pero el resultado sigue siendo el mismo. :(
EL pin 3 que es el de contraste hay q conectarlo a masa con una resitencia de 10k. ¿?
Perdona por darte tanto la chapa jfh900.

Salu2
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: jfh900 en 28 de Mayo de 2008, 16:48:00
No te preocupes por preguntar para eso estamos. Respecto a la patilla de contraste, debes de poner un potenciometro para poder regularlo, ya que este contraste o brillo se regula variando la tensión aplicada a dicha patilla. Si no polarizamos la patilla no saldrá nada en el LCD.

Un saludo
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: Tholkiem en 28 de Mayo de 2008, 16:58:39
Pues va a ser eso lo que me esta dando tanto quebradero de cabeza.
Porque estoy probando con resistencias normales. pero no tendria el mismo efecto¿?
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: jfh900 en 28 de Mayo de 2008, 17:25:07
No. Si pones la patilla a masa con una resistencia, la tensión de la patilla será cero voltios y si la conectas a 5 V prácticamente tendrás los 5 V. Por eso necesitas un potenciometro para poder regular la tensión y ajustarlo a su contraste exacto.

Un saludo
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: Tholkiem en 28 de Mayo de 2008, 17:54:36
Pero si esa patilla solo ajusta el contraste, a mis los 'cuadros' se me ven bien. de echo puedes fijarte en las fotos que he adjuntado.
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: jfh900 en 28 de Mayo de 2008, 18:19:40
No veo la foto.

Un saludo
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: Tholkiem en 29 de Mayo de 2008, 13:28:38
Ahi te las vuelvo a subir las foto
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: MGLSOFT en 29 de Mayo de 2008, 15:37:02
Tendrias que hacer varias cosas, para probar de donde vienen tus problemas.
Hazlas en este orden:
Código: C
  1. void lcd_send_byte(int8 address, int8 n)
  2. {
  3.   output_low(LCD_RS);
  4.  
  5. #ifdef USE_LCD_RW
  6. while(bit_test(lcd_read_byte(),7)) ;
  7. #else
  8. delay_us(60);              <<<<<<<<<<<<<<< Sube este tiempo a 800 y luego ve probando donde funciona
  9. #endif
  10.  
  11.   if(address)
  12.   output_high(LCD_RS);
  13.   else
  14.   output_low(LCD_RS);
  15.  
  16.   delay_cycles(1);
  17.  
  18. #ifdef USE_LCD_RW
  19. output_low(LCD_RW);
  20. delay_cycles(1);
  21. #endif
  22.  
  23.   output_low(LCD_E);

Espero haber ayudado :mrgreen: :mrgreen:
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: Tholkiem en 29 de Mayo de 2008, 16:08:45
La prueba de subir delays no ha resultado satisfactoria..
mañana ire a por algun otro display a la tienda haber si es que este esta cascado, porque ya no se que mas probar...
Salu2
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: jfh900 en 30 de Mayo de 2008, 06:15:36
Según las fotos parece que tienes conectado en el display los pines D0..D3 y deberías conectar los pines D4..D7.

Un saludo
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: Tholkiem en 30 de Mayo de 2008, 07:03:38
Ahi te paso una foto con la conexion de pines. haber si encuentras algo incorrecto.
Cuando he salido del curro, me he pasado por un par de tiendas de electrónica. Para pillar un lcd y algun potenciómetro. El caso que no ha habido suerte con el lcd pero si he conseguido el potenciometro. Lo he enchufado y he ido regulando desde 0 hasta los 5 v los cuadros se han difulminado conforme le he ido metiendo mas tension por el pin3... pero de las palabras que envio desde el pic ni rastro. :(

Por lo menos ahora ya se que no es por lo del potenciometro, aunque eso ya me lo esperaba.


Cagon mi pena negra....
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: pablo en 31 de Mayo de 2008, 20:15:32
Trato de ayudar desde mi poca experiencia.
Lo que me parece o es que no entendi bien el dibujo es que pones como que los pines van del 14 al 1, despues 15 y 16.
Y por lo que yo se de haber usado un LCD los pines siempre van del 1 al 16. Creo que esta mal conectado.

Suerte, espero haber aportado algo.
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: firepic en 31 de Mayo de 2008, 21:54:09
Saludos!
No es eso amigo pablo, fíjate en la datasheet que colocó Tholkiem al principio. A mí también me pareció que había un error allí pero según el manual es correcto. Una configuración un poco fuera de lo común.
Una pregunta Tholkiem, no has probado simularlo en proteus?
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: firepic en 31 de Mayo de 2008, 22:17:57
Ey Tholkiem, qué tal si intentas cambiando los pines del bus de datos?
En vez de asignar a partir de RC2, hazlo a partir de RC4.
Es decir, conectarías de la siguiente forma:
RC4:D4
RC5:D5
RC6:D6
RC7:D7
RS y E los puedes dejar igual.
Pero eso haría que el compilador pudiera usar la sentencia "swapf" al transmitir el dato a cuatro bits. No sé cómo trabajará C en este caso, pero sé que en Pic Basic sólo se pueden declarar los buses de datos comenzando de 0 (primeros 4 bits del puerto) o de 4 (últimos cuatro bits del puerto).
Pruébalo a ver qué tal.
Y nos avisas los resultados eh?
Ok nos leemos!  :mrgreen:
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: Tholkiem en 01 de Junio de 2008, 04:51:39
Gracias por las respuestas. Pablo, firepic.

Como bien dice firepic en el datasheet viene el pin out y es el siguiente 15-16-1 al 14. de eso estoy seguro ya que en el circuito van impresos los numeros de pines y es ese.

Sobre simularlo en proteus lo he hecho y funciona perfectamente.
Puerto D no tiene el pic, ya que se trata de un 16f876 que es de 28 pines, tiene  a,b,c .
Lo he probado desde los tres (abc) obteniendo el mismo resultado me da = ponerlo desde el 0 como desde el 4.

El lcd es nuevo y no ha tenido uso por lo que se supone  que esta en perfecto estado. Pero empiezo a pensar que esta cascado.
Salu2.
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: firepic en 01 de Junio de 2008, 11:55:29
Tholkiem cuando te mencioné:
RC4:D4
RC5:D5
RC6:D6
RC7:D7
RS y E los puedes dejar igual.

RC4,RC5,RC6,RC7 son los pines del pic y D4,D5,D6,D7 los pines del bus de datos en el lcd.
Bueno si te funciona en proteus debería funcionar en la realidad.
Pero una cosa, dices que lo has probado comenzando desde el 0 y desde el 4.. Pero lo has probado en proteus con la configuración que tienes actualmente? Porque me parece que como lo estás declarando en el flex_lcd tienes conectado el bus de datos comenzando desde portc2... no es así?
Prueba en la realidad conectándolo de esta forma, comenzando desde el pin 4 o desde el 0, y haciendo los ajustes en el programa.
Por otro lado, has probado conectandole la alimentación al backlight, entre los pines 15 y 16?
Bueno prueba eso a ver qué tal.
Y por cierto, no creo que sea problemas del lcd. Es muy raro que vengan dañados.
Generalmente el problema está en el código y en los tiempos de RS y E que a veces varían de un lcd a otro.
Te diré que a mí me pasó lo mismo, cuando trabajé por primera vez con un lcd me tardó bastante en poder hacer que mandara un mensaje.
Sigue probando, y sobre todo el valor de Vee es importantísimo.... debes tener conectado un potenciómetro para ajustar el contraste, pues de lo contrario no verás nada, solo cuadritos negros.
Ok sigue haciendo tus pruebas y ya nos contarás.
Nos leemos!  :mrgreen:
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: Menta en 06 de Junio de 2008, 14:47:23
Estás seguro que el pic esta corriendo??? por ahí puede ser que la pantalla esté ok y sea el pic el dañado o que se yo, por ahí hay algo raro en la alimentación.
Se que puede sonar muy tonto, pero son las cosas sencillas que se nos suelen pasar por alto, los fuses del pic, la resistencia a positivo del Mclr.

Saludos

PD. la primera pantalla que usé y aún la tengo tiene la misma configuración de pines que la tuya.
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: Tholkiem en 23 de Junio de 2008, 17:10:58
El pic esta correctamente alimentado ya que el puerto serie lo uso como debug y responde a las mil maravillas.
Alguna otra idea¿?
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: firepic en 23 de Junio de 2008, 17:47:07
Tendrias que hacer varias cosas, para probar de donde vienen tus problemas.
Hazlas en este orden:
  • Cambia el tiempo del delay en la espera de escritura, ya que no es una constante para todos los modelos y marcas de displays.

Código: C
  1. void lcd_send_byte(int8 address, int8 n)
  2. {
  3.   output_low(LCD_RS);
  4.  
  5. #ifdef USE_LCD_RW
  6. while(bit_test(lcd_read_byte(),7)) ;
  7. #else
  8. delay_us(60);              <<<<<<<<<<<<<<< Sube este tiempo a 800 y luego ve probando donde funciona
  9. #endif
  10.  
  11.   if(address)
  12.   output_high(LCD_RS);
  13.   else
  14.   output_low(LCD_RS);
  15.  
  16.   delay_cycles(1);
  17.  
  18. #ifdef USE_LCD_RW
  19. output_low(LCD_RW);
  20. delay_cycles(1);
  21. #endif
  22.  
  23.   output_low(LCD_E);
    [/li]
    [li]Cambia todos los
    Delay_cycles(1);
    por:
    Delay_us(1);   
    esto es porque segun el cristal puedes estar funcionando a mas velocidad y un delay_cicles equivale a 1 microsegundo para 4 MHz, pero la misma instruccion equivale a 0,2 microsegundos para 20 MHz.....
    El uso de la libreria esta hecho para 4 MHz, nadie asegura que funcione en otro cristal...
    [/li]

Yo lo aseguro! Tiempo después de ver este post me dió curiosidad y trabajé con una lcd.
La usé con la librería flexlcd.c, en el puerto B de un PIC16F876. Le cambié lo que dijo arriba MGLSOFT y funcionó de lo lindo!

Tholkiem, podrías postear el código completo que estás grabando en el pic, así como el esquemático y cómo tienes configurada la librería flexlcd.c?
A ver si alguien encuentra la falla.
Saludos, nos leemos!  :mrgreen:
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: Tholkiem en 25 de Junio de 2008, 02:38:31
firepic, Ahi va el esquema y una de las muchas versiones de pruebas del programa que he echo, el proyecto es para el CCS con la que he intentado mostrar algo por el  lcd.
En el archivo de simulacion de proteus que incluyo el lcd funciona perfectamente, unicamente que al presionar el teclado matricial solo van las teclas 1,4,7,# pero en la protoboard el teclado funciona correctamente, pero el lcd no...

Saludos, y muchas gracias
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: MGLSOFT en 25 de Junio de 2008, 08:11:38
Lastima que tuvo que pasar casi un mes para que lo probaran... :? :?
Para resolver problemas DEBEN utilizar METODOS.
Cada uno debera adecuar sus METODOS segun sus necesidades, pero algo queda claro, esta es una ciencia (aunque para mi es tambien un Hobby) por lo tanto hay que trabajar en orden y con un checklist en la mano, descartando las posibilidades de error...

Me alegro que finalmente lo solucionaran... :mrgreen:
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: Tholkiem en 25 de Junio de 2008, 08:18:30
MGLSOft.. no se ha solucionado, firepic ,dice que probo a subirle los delays como tu indicaste y a el le funcionó , pero yo segui tu recomendacion a las pocas horas que escribieses ese mensaje, y no me funciono, :(. De todas maneras cuando llegue a casa volvere a intentar a probar con dicho metodo pero.. si no funciono antes .. no creo que lo haga ahora.

Un saludo
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: firepic en 25 de Junio de 2008, 13:32:00
Tholkiem, pero el lcd de tu circuito sí que funciona!  :)
Envía perfectamente el mensaje inicial... ahora lo que mencionas de que algunos caracteres del teclado no se ven... eso tiene que ser un error de hard o soft por algún lado... no le eches la culpa al pobre lcd hombre!  :D
Sería bueno que colocaras el código aquí en el foro... no como archivo sino en un post... así es más cómodo que todos puedan verlo y tratar de conseguir el error.
Saludos, nos leemos!  :mrgreen:
Título: Re: LCD SOBRE PUERTO C, con 6 PINES
Publicado por: Tholkiem en 25 de Junio de 2008, 13:38:08
Firepic, en proteus, funciona Ok. Pero sobre la protoboard ni caso.
Lo que pasa que el codigo que te envie no es la version final, porque me encontre con el problema del lcd y no segui codificando. Por eso los caracteres del teclado no se ven .. sencillamente porque desde soft no los muestro. Ya que cuando estaba implementando eso probe en la protoboard y ya me he quedado atascado con el lcd que no me muestra nada.
El codigo lo reduje en su momento, hasta su minima expresion.. un 'hola mundo'  solo con las llamadas tipicas .. lcd_init(); lcd_putc.. porque el resto no tiene nada que ver con el lcd y sigue sin funcionar.