Autor Tema: LCD otra distribucion  (Leído 5809 veces)

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

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
LCD otra distribucion
« en: 04 de Julio de 2007, 13:23:13 »
Hola gente, por como tengo diagramada la plaqueta necesito que la configuracion de las patas sea distinta a la normal y trate de modificar una libreria conocida por ustedes que es la Flex Grid pero no puedo lograr que prenda el display.
Si alguien se da cuenta de que es lo que tengo que cambiar para lograrlo desde ya estaria muy agradecido.

Les paso la libreria y en las primeras lineas van a ver como necesito conectarlo. Muchas gracias.

// flex_lcd.c

#define LCD_LINEA1 0x80 // Direccion de memoria para la 1 linea
#define LCD_LINEA2 0xc0 // Direccion de memoria para la 2 linea
#define LCD_LINEA3 0x94 // Direccion de memoria para la 3 linea
#define LCD_LINEA4 0xd4 // Direccion de memoria para la 4 linea

// Change these pins to fit your own board.

#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B3
#define LCD_DB6 PIN_B2
#define LCD_DB7 PIN_B1

#define LCD_RS PIN_B7
#define LCD_RW PIN_B6
#define LCD_E  PIN_B5


// 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

//========================================

#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM address for the 2nd line


int8 const LCD_INIT_STRING[4] =
{
  0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
  0xc, // Display on
  1, // Clear display
  6 // Increment cursor
};


//-------------------------------------
void lcd_send_nibble(int8 nibble)
{
  // Note: !! converts an integer expression
  // to a boolean (1 or 0).
  output_bit(LCD_DB4, !!(nibble & 1));
  output_bit(LCD_DB5, !!(nibble & 2));
  output_bit(LCD_DB6, !!(nibble & 4));
  output_bit(LCD_DB7, !!(nibble & 8));
 
  delay_cycles(1);
  output_high(LCD_E);
  delay_us(2);
  output_low(LCD_E);
}

//-----------------------------------
// This sub-routine is only called by lcd_read_byte().
// It's not a stand-alone routine. For example, the
// R/W signal is set high by lcd_read_byte() before
// this routine is called.

#ifdef USE_LCD_RW
int8 lcd_read_nibble(void)
{
  int8 retval;
  // Create bit variables so that we can easily set
  // individual bits in the retval variable.
  #bit retval_0 = retval.0
  #bit retval_1 = retval.1
  #bit retval_2 = retval.2
  #bit retval_3 = retval.3

  retval = 0;

  output_high(LCD_E);
  delay_cycles(1);

  retval_0 = input(LCD_DB4);
  retval_1 = input(LCD_DB5);
  retval_2 = input(LCD_DB6);
  retval_3 = input(LCD_DB7);

  output_low(LCD_E);

  return(retval);
}
#endif

//---------------------------------------
// Read a byte from the LCD and return it.

#ifdef USE_LCD_RW
int8 lcd_read_byte(void)
{
  int8 low;
  int8 high;

  output_high(LCD_RW);
  delay_cycles(1);

  high = lcd_read_nibble();

  low = lcd_read_nibble();

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

//----------------------------------------
// Send a byte to the LCD.
void lcd_send_byte(int8 address, int8 n)
{
  output_low(LCD_RS);

#ifdef USE_LCD_RW
while(bit_test(lcd_read_byte(),7)) ;
#else
delay_us(60);
#endif

  if(address)
  output_high(LCD_RS);
  else
  output_low(LCD_RS);

  delay_cycles(1);

#ifdef USE_LCD_RW
output_low(LCD_RW);
delay_cycles(1);
#endif

  output_low(LCD_E);

  lcd_send_nibble(n >> 4);
  lcd_send_nibble(n & 0xf);
}

//----------------------------
void lcd_init(void)
{
  int8 i;

  output_low(LCD_RS);

#ifdef USE_LCD_RW
output_low(LCD_RW);
#endif

  output_low(LCD_E);

  delay_ms(15);

  for(i=0 ;i < 3; i++)
  {
    lcd_send_nibble(0x03);
    delay_ms(5);
  }

  lcd_send_nibble(0x02);

  for(i=0; i < sizeof(LCD_INIT_STRING); i++)
  {
    lcd_send_byte(0, LCD_INIT_STRING);

    // If the R/W signal is not used, then
    // the busy bit can't be polled. One of
    // the init commands takes longer than
    // the hard-coded delay of 60 us, so in
    // that case, lets just do a 5 ms delay
    // after all four of them.
#ifndef USE_LCD_RW
delay_ms(5);
#endif
}

}

//----------------------------
void lcd_gotoxy( byte x, byte y) {
byte dir;
if(y == 1)
   dir=LCD_LINEA1;
else if(y == 2)
   dir=LCD_LINEA2;
else if(y == 3)
   dir=LCD_LINEA3;
else if(y == 4)
   dir=LCD_LINEA4;

//if(y!=1)
//dir=LCD_LINEA2;
//else
//dir=0;

dir+=x-1;
lcd_send_byte(0, 0x80 | dir);
}
//-----------------------------
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;
  }
}

//------------------------------
#ifdef USE_LCD_RW
char lcd_getc(int8 x, int8 y)
{
  char value;

  lcd_gotoxy(x,y);

  // Wait until busy flag is low.
  while(bit_test(lcd_read_byte(),7));

  output_high(LCD_RS);
  value = lcd_read_byte();
  output_low(lcd_RS);

  return(value);
}
#endif

void lcd_setcursor_vb(short visible, short blink) {
  lcd_send_byte(0, 0xC|(visible<<1)|blink);
}

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: LCD otra distribucion
« Respuesta #1 en: 04 de Julio de 2007, 14:58:26 »
Casi seguro que tu problema no está en la librería, ya que está muy probada y funciona perfectamente. El problema está en le resto de elementos que utilizas. Puedes postear tu programa completo? y el esquema completo de tu circuito?

A partir de estos datos podremos buscar el fallo.

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 pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: LCD otra distribucion
« Respuesta #2 en: 04 de Julio de 2007, 17:01:43 »
No el soft esta probado con la libreria y funciona perfecto pero el tema es que yo necesito modificarle la posicion de las patas.

Antes estaba asi
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7

#define LCD_RS PIN_B1
#define LCD_RW PIN_B2
#define LCD_E  PIN_B3

Ahora lo necesito de esta forma ahi es donde deja de funcionar.
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B3
#define LCD_DB6 PIN_B2
#define LCD_DB7 PIN_B1

#define LCD_RS PIN_B7
#define LCD_RW PIN_B6
#define LCD_E  PIN_B5


Gracias.
Pablo

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: LCD otra distribucion
« Respuesta #3 en: 04 de Julio de 2007, 17:12:04 »
Te sigo diciendo lo mismo con la información que das no podemos decirte mucho.

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 pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: LCD otra distribucion
« Respuesta #4 en: 04 de Julio de 2007, 17:33:31 »
Te cuento que con la libreria flex grid funciona perfecto desde hace mas de un año el tema es que quiero modificar la placa y esto cambiaria la disposicion de la coneccion del LCD al pic. Para eso trate de modificar la libreria porque los pines no quedarian como estaban originalmente. Si queres yo te paso el soft pero tiene 1500 lineas, todo funciona bien el tema es que ahora modifique la placa y necesito conectar el display alrevez de como esta conectado originalmente en la libreria.

No se si me pude explicar bien, me cuesta un poco tratar de explicarlo.

Si necesitas el soft decime como te lo paso, pero lo tengo funcionando y no tiene problemas, el tema es que necesito conectar el LCD de otra forma para eso tengo que cambiar la libreria y ahi es donde no funciona.

Gracias por la ayuda.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: LCD otra distribucion
« Respuesta #5 en: 04 de Julio de 2007, 19:22:17 »
Según lo que comentas parece que el problema es de conexión del LCD. Asegúrate que todas las patillas están bien puestas (Alimentación y Brillo), así como el resto de las patillas. Coge un polímetro y mide desde el pín de conexión del LCD hasta la patilla correspondiente del integrado haber si alguna conexión falla o esta cambiada.

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 pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: LCD otra distribucion
« Respuesta #6 en: 04 de Julio de 2007, 20:52:27 »
Si eso lo medi y esta bien, el tema es que estoy invirtiendo todos los pines y no se si solo cambiando las variables que cambie deberia funcionar. Vos te acordas quien es el que hizo esta funcion? Me parece que era alguien del foro.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: LCD otra distribucion
« Respuesta #7 en: 04 de Julio de 2007, 20:56:29 »
Claro que tiene que funcionar, está pensado para que se pueda poner los pines que queramos.

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 pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: LCD otra distribucion
« Respuesta #8 en: 04 de Julio de 2007, 22:31:11 »
Acabo de probar varias configuraciones y cuando pongo los pines RS, RW y E despues de los de datos ahi no funciona.
Ahora cuando los pongo antes por ejemplo RS, RW, E y datos ahi funciona.

No me doy cuenta que puede ser.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: LCD otra distribucion
« Respuesta #9 en: 04 de Julio de 2007, 22:33:46 »
¿Qué microcontrolador estas usando? Haber si es un problema de polarización del puerto B.

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 pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: LCD otra distribucion
« Respuesta #10 en: 04 de Julio de 2007, 22:36:58 »
Estoy usando el 18f452 y lo estoy simulando en el proteus con el mismo.

Perdoname si no te sigo en algo pero no se electronica, lo hice de hobby para poder controlar una pecera.

Gracias.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: LCD otra distribucion
« Respuesta #11 en: 04 de Julio de 2007, 22:44:55 »
Tienes activadas las resistencias de polarización internas del pic?. Si utilizas CCS puedes pones al principio del programa:

port_b_pullups(TRUE);

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 pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: LCD otra distribucion
« Respuesta #12 en: 04 de Julio de 2007, 22:57:25 »
Lo acabo de poner pero no pasa nada.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: LCD otra distribucion
« Respuesta #13 en: 04 de Julio de 2007, 23:00:32 »
Puedes poner el fichero de la simulación y el programa en .Hex, para simularlo y ver que es lo que pasa?

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 pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: LCD otra distribucion
« Respuesta #14 en: 04 de Julio de 2007, 23:09:49 »
No se como colgarlo, si queres te lo paso por mail.
Si no decime como puedo colgarlo.
mi mail es pablofiscella@yahoo.es

Gracias.