Autor Tema: lcd_init() --> No me funciona, desesperado  (Leído 12940 veces)

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

Desconectado elnina

  • PIC10
  • *
  • Mensajes: 35
Re: lcd_init() --> No me funciona, desesperado
« Respuesta #15 en: 02 de Junio de 2009, 05:43:06 »
CONSEGUIDO !!!!!!!!!!!!!!!!!!!!!!!!!!   :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/

El pin del contraste va a masa, y no al potenciometro

Gracias chicos me habeis ayudado a conseguirlo   :mrgreen: :mrgreen: :mrgreen: :mrgreen:

De echo pone que a veces hay que poner -7V, como consigo esto ????
« Última modificación: 02 de Junio de 2009, 08:41:25 por elnina »

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: lcd_init() --> No me funciona, desesperado
« Respuesta #16 en: 02 de Junio de 2009, 09:51:57 »

:z) por que nunca me hacen caso  :8}.........

o que quiero decir, bajale la resistencia esa en serie y tenés que ver los cuadraditos si es que tu lcd funciona correctamente y seguis los pasos correctamente (sin pic) después es cuestion de conectar todo nuevamente.
 se me ocurren 3 cosas por las cuales no ves los cuadrados:

1- El contraste está muy bajo (hay que bajar la tensión vee).

Con Vee a masa vas a tener mucho constraste y no vas a ver los caracteres.... ese pin va al punto medio del potenciómetro a una tensión baja con resistencias mas bajas. Me alegro que lo consiguieses
 saludos!!
LAS MALVINAS SON ARGENTINAS!

Desconectado elnina

  • PIC10
  • *
  • Mensajes: 35
Re: lcd_init() --> No me funciona, desesperado
« Respuesta #17 en: 03 de Junio de 2009, 18:57:13 »
He puesto un diodo y un pot de 100 K en serie, y ahora va de lujo.  :mrgreen:

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: lcd_init() --> No me funciona, desesperado
« Respuesta #18 en: 05 de Agosto de 2009, 23:33:39 »
tengo problemas con el lcd, hace tiempo venia simulando en proteus con la libreria flex_lcd y  todo bien, pero ahora pruebo en hardware y no funciona el lcd, sale lleno de cuadros en la primera fila, el pin de contraste lo tengo a tierra (siempre lo he usado asi). decidi probar algo sencillo como poner un hola, el pic esta bueno y estoy probando en una entrenadora, monitoreo la actividad del puerto con leds y si esta sacando datos por el puerto q le asigno, me asegure de poner XT en el fuse para un cristal de 4Mhz+..pero no se que pasa..

saludos
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: lcd_init() --> No me funciona, desesperado
« Respuesta #19 en: 06 de Agosto de 2009, 19:40:26 »
pon el programa para poder orientarte mejor, que libreria usas para el control del lcd? 4bits o 8 bits trabajando el lcd?
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado tinchogrosman

  • PIC10
  • *
  • Mensajes: 1
Re: lcd_init() --> No me funciona, desesperado
« Respuesta #20 en: 08 de Agosto de 2009, 15:17:21 »
Estimados:

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: lcd_init() --> No me funciona, desesperado
« Respuesta #21 en: 09 de Agosto de 2009, 22:09:47 »
 :shock: :shock: :shock:

 :huh: :huh: :huh:
El papel lo aguanta todo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: lcd_init() --> No me funciona, desesperado
« Respuesta #22 en: 09 de Agosto de 2009, 23:52:38 »
 :D :D :D

Como que falto algo!
No contesto mensajes privados, las consultas en el foro

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: lcd_init() --> No me funciona, desesperado
« Respuesta #23 en: 10 de Agosto de 2009, 13:00:00 »
Bueno ... eh ...... mhhh ...... Bienvenido al foro tinchogrosman.
El papel lo aguanta todo

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: lcd_init() --> No me funciona, desesperado
« Respuesta #24 en: 19 de Agosto de 2009, 17:23:29 »
tengo problemas con el lcd, hace tiempo venia simulando en proteus con la libreria flex_lcd y  todo bien, pero ahora pruebo en hardware y no funciona el lcd, sale lleno de cuadros en la primera fila, el pin de contraste lo tengo a tierra (siempre lo he usado asi). decidi probar algo sencillo como poner un hola, el pic esta bueno y estoy probando en una entrenadora, monitoreo la actividad del puerto con leds y si esta sacando datos por el puerto q le asigno, me asegure de poner XT en el fuse para un cristal de 4Mhz+..pero no se que pasa..

saludos

Hola amigos
A mi me pasa lo mismo con un lcd nuevo, en la tienda me aseguraron que era compatible con el standar de hoy dia Hitachi.
El simulador de proteus se traga todo, pero en la realidad sobre placa entrenadora es otro cantar.

Se inicializa el LCD pero de forma erronea es decir la 1 y tercera linea, ya que el lcd es de 4 lineas.

El circuito lo montado varias veces y de formas diferntes, pero el resultado simpre fue el mismo.

pic16F877A +LCD4x20

en modo 4 lineas más altas, por el puerto b del pic, uso la libreia lcd420 de ccs.

que le ocurrira al dichoso montaje?ya no se que pude ser parece ilogico.

Un saludo.

« Última modificación: 20 de Agosto de 2009, 15:52:43 por pajaro »

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: lcd_init() --> No me funciona, desesperado
« Respuesta #25 en: 21 de Agosto de 2009, 12:02:01 »
hola pajaro

[me respondo a mi mismo]

Una vez más tiene que ver las lineas de control, y los despiste menudos, si en la libreria esta definida con el RW y tu no lo pones da esto, la primera linea y la tercera.  Si dentro de tu proyecto tu crees que estas usando tu propia libreria personalizada del LCD  y no es asi el ccs cogera la suya por defecto.

Moraleja cambiale el nombre a la libreria para que en caso de no encontrarla se queje y tu te enteres y no pierdas el tiempo volviendote loco .


(Solucionado)

Un saludo.

Desconectado mrk992

  • PIC10
  • *
  • Mensajes: 26
Re: lcd_init() --> No me funciona, desesperado
« Respuesta #26 en: 23 de Agosto de 2009, 19:49:17 »
yo no soy capaz de utilizar el LCD del micropic trainer y he utilizado la libreria LCD.h y la Flexlcd y no me funciona ya puse un post y no me dijisteis nada esera que os le pongo haber que me podeis decir http://www.todopic.com.ar/foros/index.php?topic=27211.0
graciass

Desconectado wichooox

  • PIC10
  • *
  • Mensajes: 3
Re: lcd_init() --> No me funciona, desesperado
« Respuesta #27 en: 10 de Diciembre de 2010, 23:28:42 »
buenas amigos, tengo un problema parecido, estoi usando el pic18f2525, la cuestion es que realice un programa y en proteus corre perfecto, muestra la lcd y todo bien, (la lcd esta bien conectada, no es problema de conccion de lcd), el problema se presenta q al pasar el programa al pic simplemente no responde a nada, realice otro programa q solo encienda y apague un led para tratar de verificar en que parte del programa se queda la corrida, segun lo q hice se queda en alguna parte de la rutina de lcd que esta en la libreria de CCS, esto lo deduje porque al comentar en comando //lcd_init() el programa corre perfecto, es decir enciende y apaga el led sin problemas, al descomentarlo no hace absolutamente nada, aca le dejo el codigo de programa que uso para probar en q parte se queda el programa.

#include <18F2525.h>
#device adc=10

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES INTRC                    //Internal RC Osc
#FUSES NOPROTECT                //Code not protected from reading
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES NOBROWNOUT               //No brownout reset
#FUSES BORV20                   //Brownout reset at 2.0V
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES NOSTVREN                 //Stack full/underflow will not cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES LVP                      //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOCPB                    //No Boot Block code protection
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOFCMEN                  //Fail-safe clock monitor disabled
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET
#FUSES LPT1OSC                  //Timer1 configured for low-power operation
#FUSES MCLR                     //Master Clear pin enabled

#use delay(clock=4000000)
//#define LCD_DATA_PORT getenv("SFR:PORTB")


#define LCD_ENABLE_PIN PIN_B0
#define LCD_RS_PIN PIN_B1
#define LCD_RW_PIN PIN_B2
#define LCD_TYPE 2
#define LCD_DATA4 PIN_B4                                   
#define LCD_DATA5 PIN_B5                                   
#define LCD_DATA6 PIN_B6                                   
#define LCD_DATA7 PIN_B7
#include <lcd.c>

int seguir;
void main()
{
   lcd_init();
   seguir=0;
   setup_adc_ports(AN0_TO_AN1|VSS_VDD);
   setup_adc(ADC_CLOCK_INTERNAL|ADC_TAD_MUL_2);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_oscillator(OSC_4MHZ|OSC_INTRC|OSC_PLL_OFF);
   set_tris_a(0x03);
do{
output_low(pin_a2);
delay_ms(300);
output_high(pin_a2);
delay_ms(300);
}
while (seguir==0);

}





Y la rutina de la lcd de la libreria es esta (es la que trae CCS) que al activar lcd_init() no corre el programa





typedef struct 
{                            // This structure is overlayed
   BOOLEAN enable;           // on to an I/O port to gain
   BOOLEAN rs;               // access to the LCD pins.
   BOOLEAN rw;               // The bits are allocated from
   BOOLEAN unused;           // low order up.  ENABLE will
   int     data : 4;         // be LSB pin of that port.
  #if defined(__PCD__)       // The port used will be LCD_DATA_PORT.
   int    reserved: 8;
  #endif
} LCD_PIN_MAP;

#if defined(__PCB__)
   // these definitions only need to be modified for baseline PICs.
   // all other PICs use LCD_PIN_MAP or individual LCD_xxx pin definitions.
/*                                    EN, RS,   RW,   UNUSED,  DATA  */
 const LCD_PIN_MAP LCD_OUTPUT_MAP =  {0,  0,    0,    0,       0};
 const LCD_PIN_MAP LCD_INPUT_MAP =   {0,  0,    0,    0,       0xF};
#endif

////////////////////// END CONFIGURATION ///////////////////////////////////

#ifndef LCD_ENABLE_PIN
   #define lcd_output_enable(x) lcdlat.enable=x
   #define lcd_enable_tris()   lcdtris.enable=0
#else
   #define lcd_output_enable(x) output_bit(LCD_ENABLE_PIN, x)
   #define lcd_enable_tris()  output_drive(LCD_ENABLE_PIN)
#endif

#ifndef LCD_RS_PIN
   #define lcd_output_rs(x) lcdlat.rs=x
   #define lcd_rs_tris()   lcdtris.rs=0
#else
   #define lcd_output_rs(x) output_bit(LCD_RS_PIN, x)
   #define lcd_rs_tris()  output_drive(LCD_RS_PIN)
#endif

#ifndef LCD_RW_PIN
   #define lcd_output_rw(x) lcdlat.rw=x
   #define lcd_rw_tris()   lcdtris.rw=0
#else
   #define lcd_output_rw(x) output_bit(LCD_RW_PIN, x)
   #define lcd_rw_tris()  output_drive(LCD_RW_PIN)
#endif

#ifndef LCD_DATA_PORT
   #if defined(__PCB__)
      #define LCD_DATA_PORT      0x06     //portb
      #define set_tris_lcd(x)   set_tris_b(x)
   #elif defined(__PCM__)
      #define LCD_DATA_PORT      getenv("SFR:PORTB")     //portd
   #elif defined(__PCH__)
      #define LCD_DATA_PORT      getenv("SFR:PORTB")    //portd
   #elif defined(__PCD__)
      #define LCD_DATA_PORT      getenv("SFR:PORTB")    //portd
   #endif   
#endif

#if defined(__PCB__)
   LCD_PIN_MAP lcd, lcdlat;
   #byte lcd = LCD_DATA_PORT
   #byte lcdlat = LCD_DATA_PORT
#elif defined(__PCM__)
   LCD_PIN_MAP lcd, lcdlat, lcdtris;
   #byte lcd = LCD_DATA_PORT
   #byte lcdlat = LCD_DATA_PORT
   #byte lcdtris = LCD_DATA_PORT+0x80
#elif defined(__PCH__)
   LCD_PIN_MAP lcd, lcdlat, lcdtris;
   #byte lcd = LCD_DATA_PORT
   #byte lcdlat = LCD_DATA_PORT+9
   #byte lcdtris = LCD_DATA_PORT+0x12
#elif defined(__PCD__)
   LCD_PIN_MAP lcd, lcdlat, lcdtris;
   #word lcd = LCD_DATA_PORT
   #word lcdlat = LCD_DATA_PORT+2
   #word lcdtris = LCD_DATA_PORT-0x02
#endif

#ifndef LCD_TYPE
   #define LCD_TYPE 2           // 0=5x7, 1=5x10, 2=2 lines
#endif

#ifndef LCD_LINE_TWO
   #define LCD_LINE_TWO 0x40    // LCD RAM address for the second line
#endif

BYTE const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};
                             // These bytes need to be sent to the LCD
                             // to start it up.

// original version of this library incorrectly labeled LCD_DATA0 as LCD_DATA4,
// LCD_DATA1 as LCD_DATA5, and so on.  this block of code makes the driver
// compatible with any code written for the original library
#if (defined(LCD_DATA0) && defined(LCD_DATA1) && defined(LCD_DATA2) && defined(LCD_DATA3) && !defined(LCD_DATA4) && !defined(LCD_DATA5) && !defined(LCD_DATA6) && !defined(LCD_DATA7))
   #define  LCD_DATA4    LCD_DATA0
   #define  LCD_DATA5    LCD_DATA1
   #define  LCD_DATA6    LCD_DATA2
   #define  LCD_DATA7    LCD_DATA3
#endif

BYTE lcd_read_nibble(void);

BYTE lcd_read_byte(void)
{
   BYTE low,high;

 #if defined(__PCB__)
   set_tris_lcd(LCD_INPUT_MAP);
 #else
  #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7))
   output_float(LCD_DATA4);
   output_float(LCD_DATA5);
   output_float(LCD_DATA6);
   output_float(LCD_DATA7);
  #else
   lcdtris.data = 0xF;
  #endif
 #endif
       
   lcd_output_rw(1);
   delay_cycles(1);
   lcd_output_enable(1);
   delay_cycles(1);
   high = lcd_read_nibble();
     
   lcd_output_enable(0);
   delay_cycles(1);
   lcd_output_enable(1);
   delay_us(1);
   low = lcd_read_nibble();
     
   lcd_output_enable(0);

 #if defined(__PCB__)
   set_tris_lcd(LCD_INPUT_MAP);
 #else
  #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7))
   output_drive(LCD_DATA4);
   output_drive(LCD_DATA5);
   output_drive(LCD_DATA6);
   output_drive(LCD_DATA7);
  #else
   lcdtris.data = 0x0;
  #endif
 #endif

   return( (high<<4) | low);
}

BYTE lcd_read_nibble(void)
{
  #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7))
   BYTE n = 0x00;

   /* Read the data port */
   n |= input(LCD_DATA4);
   n |= input(LCD_DATA5) << 1;
   n |= input(LCD_DATA6) << 2;
   n |= input(LCD_DATA7) << 3;
   
   return(n);
  #else
   return(lcd.data);
  #endif
}

void lcd_send_nibble(BYTE n)
{
  #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7))
   /* Write to the data port */
   output_bit(LCD_DATA4, BIT_TEST(n, 0));
   output_bit(LCD_DATA5, BIT_TEST(n, 1));
   output_bit(LCD_DATA6, BIT_TEST(n, 2));
   output_bit(LCD_DATA7, BIT_TEST(n, 3));
  #else     
   lcdlat.data = n;
  #endif
     
   delay_cycles(1);
   lcd_output_enable(1);
   delay_us(2);
   lcd_output_enable(0);
}

void lcd_send_byte(BYTE address, BYTE n)
{
   lcd_output_rs(0);
   while ( bit_test(lcd_read_byte(),7) ) ;
   lcd_output_rs(address);
   delay_cycles(1);
   lcd_output_rw(0);
   delay_cycles(1);
   lcd_output_enable(0);
   lcd_send_nibble(n >> 4);
   lcd_send_nibble(n & 0xf);
}

void lcd_init(void)
{
   BYTE i;

 #if defined(__PCB__)
   set_tris_lcd(LCD_OUTPUT_MAP);
 #else
  #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7))
   output_drive(LCD_DATA4);
   output_drive(LCD_DATA5);
   output_drive(LCD_DATA6);
   output_drive(LCD_DATA7);
  #else
   lcdtris.data = 0x0;
  #endif
   lcd_enable_tris();
   lcd_rs_tris();
   lcd_rw_tris();
 #endif

   lcd_output_rs(0);
   lcd_output_rw(0);
   lcd_output_enable(0);
   
   delay_ms(15);
   for(i=1;i<=3;++i)
   {
       lcd_send_nibble(3);
       delay_ms(5);
   }
   
   lcd_send_nibble(2);
   for(i=0;i<=3;++i)
      lcd_send_byte(0,LCD_INIT_STRING);
}

void lcd_gotoxy(BYTE x, BYTE y)
{
   BYTE address;

   if(y!=1)
      address=LCD_LINE_TWO;
   else
      address=0;
     
   address+=x-1;
   lcd_send_byte(0,0x80|address);
}

void lcd_putc(char c)
{
   switch (c)
   {
      case '\f'   :  lcd_send_byte(0,1);
                     delay_ms(2);
                     break;
                     
      case '\n'   : lcd_gotoxy(1,2);        break;
     
      case '\b'   : lcd_send_byte(0,0x10);  break;
     
      default     : lcd_send_byte(1,c);     break;
   }
}
 
char lcd_getc(BYTE x, BYTE y)
{
   char value;

   lcd_gotoxy(x,y);
   while ( bit_test(lcd_read_byte(),7) ); // wait until busy flag is low
   lcd_output_rs(1);
   value = lcd_read_byte();
   lcd_output_rs(0);
   
   return(value);
}


de ante mano gracias a todos, y espero q me puedan ayudar :)

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: lcd_init() --> No me funciona, desesperado
« Respuesta #28 en: 10 de Diciembre de 2010, 23:50:45 »
Hola wichooox, bienvenido al foro.  Está algo extenso el código, pero veo que tienes el lcd en el puerto B, entonces comienza por cambiar este fuse:

#FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET

por este:

#FUSES NOPBADEN                 //PORTB pins are configured as digital I/O on RESET

Si veo algo más te cuento.

Saludos!

EDITO:  No me habia dado cuenta que lo extenso es la librería del lcd  :oops:
« Última modificación: 10 de Diciembre de 2010, 23:55:16 por bmb »

Desconectado wichooox

  • PIC10
  • *
  • Mensajes: 3
Re: lcd_init() --> No me funciona, desesperado
« Respuesta #29 en: 11 de Diciembre de 2010, 00:27:22 »
Hola wichooox, bienvenido al foro.  Está algo extenso el código, pero veo que tienes el lcd en el puerto B, entonces comienza por cambiar este fuse:

#FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET

por este:

#FUSES NOPBADEN                 //PORTB pins are configured as digital I/O on RESET

Si veo algo más te cuento.

Saludos!

EDITO:  No me habia dado cuenta que lo extenso es la librería del lcd  :oops:



hola gracias por la bienvenida, pues te cuento que acomode ese detalle y nada :/ no se porque no quiere andar


 

anything