Autor Tema: Problema configuración Flex_lcd  (Leído 3147 veces)

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

Desconectado sha

  • PIC10
  • *
  • Mensajes: 28
Problema configuración Flex_lcd
« en: 28 de Enero de 2011, 05:25:33 »
Hola a todos.
Tengo un problemilla con un programa.
cuando meto tensión al pic aveces se inicia y otras no, y esto pasa cuando meto en el programa lo relacionado con pantalla lcd.
El programa es este:

#include   <18f4550.h>
#include   <STRING.h>

#fuses   HS,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOVREGEN,NOPBADEN
#use   delay   (clock=8000000)
#use      rs232   (baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8)   //manejo del RS232



#use standard_io(a)
#use standard_io(e)
#define use_porta_lcd TRUE
#define use_porte_lcd TRUE
#include   <flex_lcd.h>

void   main()
{
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_spi(FALSE);
   setup_psp(PSP_DISABLED);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   port_b_pullups(FALSE);   
   
   set_tris_a(0x00);
   set_tris_b(0xff);
   set_tris_c(0b00000000);
   set_tris_d(0x00);
   set_tris_e(0x00);
   
   lcd_init();
   
   lcd_putc("Esperar");
   
   delay_ms(1000);   
   printf("AT+CPIN=2805\r\n");
   
while(true)
   {
      output_high(PIN_D7);
      delay_ms(1000);
      output_low(PIN_D7);
      delay_ms(1000);
   }   
}

Se que es algún tema relacionado con configuración. Pero...
Los pines de LCD son:
RS--->RA0
RW--->RA1
E----->RA2
D4--->RA3
D5--->RA5
D6--->RE0
D7--->RE1

Gracias antes de nada

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Problema configuración Flex_lcd
« Respuesta #1 en: 30 de Enero de 2011, 19:12:15 »
Hola compañero,

¿Que es lo que no se inicia el pic o el LCD?

Podria ser un problema de una falsa conexion, suele ocurrir en placas de pruebas.

Tambien podria ser que alimentas con las misma fuente el pic y el LCD y la fuente
no da suficiente chicha para todo el circuito.

Tambien podría ser una mala conexión fijate si pusiste bien las conexiones del LCD o del pic.

fijate si tienes algún cortocircuito.

Fijate si las conesiones del circuito coinciden con la del codigo fuente.

Un saludo

Desconectado mariano_pic

  • PIC18
  • ****
  • Mensajes: 498
    • Software Electronica Microncontroladores
Re: Problema configuración Flex_lcd
« Respuesta #2 en: 30 de Enero de 2011, 20:46:55 »
A mi me ha pasado tambien, el problema puede estar en la configuracion del reloj.
Te recomiendo que leas el siguiente articulo para que tengas una mejor idea como se hace
  Consiguiendo 4 Mhz para los 48 Mhz necesarios en los PIC's con USB 2.0
  Aunque no se si estes trabajando con el usb, la explicacion es valida para configurar el reloj

  Tambien si no tienes bien regulada la fuente de alimentacion suele suceder, el hecho de que funcione al menos una ves
nos dice que el programa esta bien, y el problema esta en otro lado.

  Para salir de dudas, coloca un condensador de 1000 uf/16v a la fuente de alimentacion, mide la tencion usando el voltimetro y mira si el voltaje es constante, todo el tiempo.
« Última modificación: 30 de Enero de 2011, 20:57:44 por mariano_pic »
Necesitas ayuda para tu proyecto electronico?
buscame, tal ves pueda colaborarte.
Blog: http://electronicosembebidos.blogspot.com.co/
mail: electronicosembebidos@gmail.com
Mi grupo de facebook: https://www.facebook.com/groups/ProgramandoPics/

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Problema configuración Flex_lcd
« Respuesta #3 en: 30 de Enero de 2011, 21:09:08 »
Hola sha, esta definición de pines:
Citar
Se que es algún tema relacionado con configuración. Pero...
Los pines de LCD son:
RS--->RA0
RW--->RA1
E----->RA2
D4--->RA3
D5--->RA5
D6--->RE0
D7--->RE1
debe estar declarada antes o en el encabezado de #include   <flex_lcd.h>

estando asi, elimina estas líneas:
Citar
#define use_porta_lcd TRUE
#define use_porte_lcd TRUE
y estas también:
Citar
set_tris_a(0x00);
set_tris_e(0x00);

El uso de printf para LCD lo debes hacer así:
Citar
printf(lcd_putc, "AT+CPIN=2805\r\n");

Saludos!

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Problema configuración Flex_lcd
« Respuesta #4 en: 31 de Enero de 2011, 10:03:12 »
Qué tal todos!

El uso de printf para LCD lo debes hacer así:
Citar
printf(lcd_putc, "AT+CPIN=2805\r\n");

bmb, me parece que en esa línea sha lo que desea es mandar algo por puerto serial, no para el LCD -cualquier cosa corrige sha-, así que sí estaría bien tal como está ahí:
Código: C
  1. printf("AT+CPIN=2805\r\n");

Por otro lado -corrijan los maestros si estoy equivocado- para enviar caracteres al lcd sí se puede usar sin el printf, tal como lo colocó sha acá:
Código: C
  1. lcd_putc("Esperar");

La ventaja de hacerlo con el printf como tú muy bien lo colocaste, es que permite trabajar con las demás funcionalidades del printf, como reconocer los símbolos especiales "\r", "\n" y definir el tipo de variable numérica a usar, la cantidad de decimales, etc... sobre todo si lo que se está mandando al LCD son variables numéricas, la forma que tú colocas es la mejor. Pero si sólo se está enviando una cadena de caracteres, la forma de sha es válida también.

Sha, lo de las definiciones de pines antes del #include <flex_lcd.h> si es crítico... posiblemente ese sea el problema...
Ojalá puedas resolverlo pronto...

Saludos a todos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado sha

  • PIC10
  • *
  • Mensajes: 28
Re: Problema configuración Flex_lcd
« Respuesta #5 en: 31 de Enero de 2011, 13:05:46 »
Hola a todos y gracias por contestar.
Ahora estoy probando con este mini programa:

#include <18f4550.h>  //archivo de cabecera
#fuses HS,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOVREGEN,NOPBADEN
#use delay(clock=20000000)

#define LCD_DB4   PIN_A3
#define LCD_DB5   PIN_A5
#define LCD_DB6   PIN_E0
#define LCD_DB7   PIN_E1


#define LCD_RS      PIN_A0
#define LCD_RW      PIN_A1
#define LCD_E      PIN_A2

#include   <flex_lcd.h>

void main()
{
   SETUP_TIMER_0(RTCC_DIV_256|RTCC_INTERNAL|RTCC_8_BIT);
   Port_B_Pullups(FALSE);
   Setup_ADC_Ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_spi(FALSE);
   setup_psp(PSP_DISABLED);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   port_b_pullups(FALSE);
   
   delay_ms(5000);
         
   lcd_init();
   
   lcd_putc("esperar");
   
   delay_ms(1000);
   
   lcd_putc("esp");

   while(true)
      {
         delay_ms(1000);
         output_high(PIN_D7);
         delay_ms(1000);
         output_low(PIN_D7);
      }
}


Todavía no lo he podido solucionar.
Pero he echo pruebas.
Para llegar a este cto y este pic comencé haciendo un programa con 16f876 con una paca de agujeritos y con ella el lcd me funciona. por lo que no creo sea fuente alimentación.
Luego he probado a conectar los pines del lcd de esa placa ( la del 16f876) al zocalo de la placa que he hecho para el 18f4550 y funciona el lcd. por lo que la conexión del lcd a la placa del 18F4550 no es.
Y por último probé a conectar el 16f876 a la placa del 18f4550 y me hace lo mismo que antes. hay veces que arranca y otras que no, es decir, hay veces que metes tensión y no hace nada el pic, ni siquiera apagar y envender salida. otras escribe algo, no todo. y otras funciona bien.
Y si, lo que quería con printf era comunicarme con puerto serie.
Gracias.

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Problema configuración Flex_lcd
« Respuesta #6 en: 31 de Enero de 2011, 20:25:59 »
Hola, me parece que asi como está debería funcionar.  No se que versión de tantas que hay de flex_lcd.h estás usando.  Las últimas versiones del CCS permiten la configuración de pines para el LCD.  Fijate en la librería LCD.C del CCS y si tu versión es reciente, verás que te permite configurar también los pines.  Si es asi, te recomiendo la propia que trae CCS.  Las pullups por defecto están dehabilitadas, asi que las dos líneas: port_b_pullups(FALSE); (la tienes repetida) te sobran.  También podrías formatear un poco lo que va a mostrar el LCD con lcd_gotoxy(x,y) y lcd_putc(c) usando \a, \f, \n por ejemplo, o con printf() y sus opciones de formateo como te indiqué antes (cuando es para el LCD, claro).    Por lo demás, todo parece indicar que tienes problemas en las conexiones del circuito o con la fuente o tal vez no le tienes condensador de desacoplo en la entrada de alimentación del PIC.

Saludos!
« Última modificación: 31 de Enero de 2011, 21:56:41 por bmb »

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Problema configuración Flex_lcd
« Respuesta #7 en: 01 de Febrero de 2011, 07:38:00 »
Qué tal todos!

Para llegar a este cto y este pic comencé haciendo un programa con 16f876 con una paca de agujeritos y con ella el lcd me funciona. por lo que no creo sea fuente alimentación.
Luego he probado a conectar los pines del lcd de esa placa ( la del 16f876) al zocalo de la placa que he hecho para el 18f4550 y funciona el lcd. por lo que la conexión del lcd a la placa del 18F4550 no es.
Y por último probé a conectar el 16f876 a la placa del 18f4550 y me hace lo mismo que antes. hay veces que arranca y otras que no, es decir, hay veces que metes tensión y no hace nada el pic, ni siquiera apagar y envender salida. otras escribe algo, no todo. y otras funciona bien.

Sha, ahora si tienes la configuración del flex_lcd como Dios manda!   ;-)  :D
Entonces dices que cuando pruebas insertando el PIC en la placa que tienes para el 18F4550 es que no funciona -ni el 18F ni tampoco el 16F-, entonces eso descartaría que fuera un problema de software... al parecer la cosa es por hardware como bien dijo bmb... creo que el siguiente paso es revisar las pistas y soldaduras, capaz que haya algo en cortocircuito en la parte del zócalo del PIC o lo que te dijo bmb:
todo parece indicar que tienes problemas en las conexiones del circuito o con la fuente o tal vez no le tienes condensador de desacoplo en la entrada de alimentación del PIC.

Ánimo Sha, ya estás cerca de resolverlo!  :)
Nos avisas por aquí eh! Saludos y nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado sha

  • PIC10
  • *
  • Mensajes: 28
Re: Problema configuración Flex_lcd
« Respuesta #8 en: 01 de Febrero de 2011, 07:59:57 »
Buenas a todos.
Por fin lo he conseguido.
Cambie la configuración y cambie el cristal y ya funciona siempre en la placa que hice.
Este programa esta hecho para un cristal de 4 MHz.
He hecho un programa, ya puestos, para que valga para todo el mundo que empieza, para lcd, con interrupción de tmr0 y comunicacion con ordenador por puerto serie rs232.

#include <18f4550.h>  //archivo de cabecera
#fuses HS,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOPBADEN,NOLVP,NOCPD,NODEBUG,NOWRT,NOVREGEN,CPUDIV1

#use      delay(clock=4000000)
#use      rs232   (baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8)

#include   <flex_lcd.h>

char    rcvchar=0x00;
long   con_tim=0x00;
short   seg_si=0;
short   enc_si=0;

#INT_TIMER0
void   timer0()      //Interrupción del timer 0
{   
   SET_TIMER0(0xC2);      //Ponemos el valor 0x87 en el TIMER0
   con_tim++;         //Incrementamos la variable intermedia con_tim
   if   (con_tim>=300)      //Comprobamos el valor de con_tim
      {
         seg_si=1;      //Si es mayor o igual que 250 ponemos a uno seg_si
         con_tim=0x00;   //Y además ponemos a cero con_tim
      }
}
#int_rda
void serial_isr()
{
   disable_interrupts( INT_Timer0 );
   if(kbhit())
      {
         rcvchar=getc();
         putc(rcvchar);
         lcd_putc(rcvchar);
      }
   enable_interrupts( INT_Timer0 );
}

void main()
{
   SETUP_TIMER_0(RTCC_DIV_256|RTCC_INTERNAL|RTCC_8_BIT);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   Setup_ADC_Ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_spi(FALSE);
   setup_psp(PSP_DISABLED);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   port_b_pullups(FALSE);
   setup_wdt(WDT_OFF);
   setup_oscillator(False);
   
   SET_TIMER0(0xC2);
   enable_interrupts( INT_Timer0 );
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   
   delay_ms(5000);
         
   lcd_init();
   
   lcd_putc("esperar");
   
   delay_ms(1000);
   
   lcd_putc("esp");

   while(true)
      {
         delay_ms(1000);
         output_high(PIN_D7);
         delay_ms(1000);
         output_low(PIN_D7);
      }
}

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Problema configuración Flex_lcd
« Respuesta #9 en: 01 de Febrero de 2011, 08:43:36 »
Hola sha, debes cambiar el fuse HS por XT para 4Mhz.  Me alegra mucho que hayas logrado hacer funcionar el circuito!

Saludos!

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Problema configuración Flex_lcd
« Respuesta #10 en: 01 de Febrero de 2011, 08:50:39 »
Felicitaciones Sha!! Enhorabuena!  :-/  :-/  :-/

Entonces era el cristal... Bueno excelente que hayas podido resolverlo... y muchas gracias por el aporte al foro!  :)
Seguro le servirá a otra persona que esté haciendo algo parecido a lo que tú hiciste.

De nuevo felicidades y esperamos seguirte viendo por acá..
Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web