Autor Tema: Como inicializar LCD Winstar 1602??  (Leído 11298 veces)

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

Desconectado sebastian 100

  • PIC12
  • **
  • Mensajes: 58
Re: Como inicializar LCD Winstar 1602??
« Respuesta #15 en: 24 de Agosto de 2009, 23:12:52 »
gracias por colaborar en mi causa,
Suky: ya habia probado con algo asi pero los tiempos un poco mas grandes, las instrucciones las mismas, y no funcionó, por las dudas pegué el mismo codigo que me sugeris y tampoco.

ante tanta duda, el ejemplo que puse antes en asm, lo habia probado hace unos meses, y pense que se habia roto el
LCD, pero lo probé ayer de vuelta y anda de primera.

diganme si estoy en lo correcto.. al igual que la sugerencia de suki, estoy tratando de cambiar solo la parte de LCD_INIT(), esta bien o tengo que adaptar otra parte de la libreria??

ya no se que mas dar vuelta!

Desconectado sebastian 100

  • PIC12
  • **
  • Mensajes: 58
Re: Como inicializar LCD Winstar 1602??
« Respuesta #16 en: 28 de Agosto de 2009, 01:04:38 »
perdonen que refloto este post que ya esta casi agotado, pero no puedo hacer funcionar el lcd con programas en CCS

nadie tiene una libreria que funcione con este controlador (KS0066), realmente probe mil formas de implementar el codigo en asm que me funciona, y en todas me falló. agregue delays, los saque, agregue funciones, y tambien saque, probe insertanto pedazos de codigo #asm #endasm y nada!! :cry: :cry: :cry: :cry:

puede ser que este lcd este roto o algo asi y que no admita la configuracion a cuatro bits??

ya agote todas mis posibilidades, espero que alguien me pueda dar una mano. obviamente no es un reclamo, en este foro siempre me ayudaron y realmente mucho.
desde ya muchas gracias!!,

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Como inicializar LCD Winstar 1602??
« Respuesta #17 en: 28 de Agosto de 2009, 12:37:34 »
.

Justo ahora tengo un Winstar 1602 conectado al protoboard. ¿Tenés algún 16F628 o un 16F84? Si querés te paso un programa de prueba para el LCD en 4 bits ya compilado, así sabés si el LCD anda o no. (Menciono las primeras opciones porque son los únicos pics que tengo por ahora, así puedo verificar si el programa funciona antes de pasártelo).

When you see a good move, look for a better one (Emanuel Lasker)

Desconectado sebastian 100

  • PIC12
  • **
  • Mensajes: 58
Re: Como inicializar LCD Winstar 1602??
« Respuesta #18 en: 28 de Agosto de 2009, 13:20:43 »
hola

si pasamelo por favor, si funciona empiezo todo de vuelta desde cero, gracias
tengo un 16f628A y un 16f84A
« Última modificación: 28 de Agosto de 2009, 14:22:41 por sebastian 100 »

Desconectado sebastian 100

  • PIC12
  • **
  • Mensajes: 58
Re: Como inicializar LCD Winstar 1602??
« Respuesta #19 en: 29 de Agosto de 2009, 03:12:42 »
acá sigo...
por favor echenle un vistazo a este programa, esta en la zona de descargas de la pagina oficial de winstar, lamentablemente escrito en asm para un motorola(CREO), pero vean la inicializacion no tiene nada que ver con lo que dice la hoja de datos :shock: :shock: :shock:

inicializacion en 4 bit

y bueno no solo no encuentro nada, ademas todo lo que pruebo tampoco funciona!!


Desconectado sebastian 100

  • PIC12
  • **
  • Mensajes: 58
Re: Como inicializar LCD Winstar 1602??
« Respuesta #20 en: 21 de Diciembre de 2009, 16:20:10 »
Hola gente...

estoy de vuelta para contar buenas noticias, me compre otro lcd que segun el datasheet tenia un controlador hitachi.... pero no!!! era tambien un  :5] :5] :5] ks0066 :5] :5] :5]

entonces empece todo de vuelta, lo que me hizo prender la lamparita fue un pdf aportado por el amigo Cryn (http://www.4shared.com/file/45432416/6c16fcd/lcd1.html), lastima
que esta en ingles (yo cero ingles)  pero esta muy bueno para aprender a manejar estas pantallas.

bueno,, no se enojen conmigo, pero nunca funciono por un falso contacto en una de las patas de datos, la verdad crei que habia descartado correctamente estas cosas.....
perdi muchas neuronas con el tema pero ya esta en marcha. :-/ :-/ :-/

la rutina correcta, ahora que veo este post de vuelta, el la que me apunto Suky, funciona perfectamente. ;-)

bueno les mando un abrazo, y espero que le sirva a alguien mas.

seba

Desconectado Guido_BHM

  • PIC10
  • *
  • Mensajes: 6
Re: Como inicializar LCD Winstar 1602??
« Respuesta #21 en: 13 de Marzo de 2012, 18:32:51 »
Hola, tengo un problema con este LCD
Estoy programando un 16F873a en CCS y no logro hacer nada
soy nuevo en estos micros y en este lenguaje, siempre programe motorola en assembler

Me gustaria q me den una mano con esto, lei este post y otros q aparecieron, modifique las librerias, cambie los delay_cycle x los delay_us y demas
no logre nada, en el LCD no se ve nada
supongo q no capte como es q se tienen q hacer estos cambios correctamente

aca les dejo los codigos:

#include <16f873a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)

#include "flex_lcd_1.c"


void main()
{
lcd_init();
  printf(lcd_putc,"hola mundo");
}


-------------------------------------------------------------------------------------------------------------------------
y este es la libreria Flex_lcd modificada, le puse el init_lcd() q mostraron mas atras



// flex_lcd.c

#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_B0

// 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_us(1);                //MOD
  output_high(LCD_E);
  delay_us(2);// 2us MOD
  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_us(1);             //MOD

  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_us(1);             //MOD

  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_us(1);          //MOD

#ifdef USE_LCD_RW
output_low(LCD_RW);
delay_us(1);            //MOD
#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(30);
     lcd_send_nibble(0x02);
     lcd_send_nibble(0x02);
     lcd_send_nibble(0x0C);
     delay_us(60);
     lcd_send_nibble(0x00);
     lcd_send_nibble(0x0C);
     delay_us(60);
     lcd_send_nibble(0x00);
     lcd_send_nibble(0x01);
     delay_ms(2);
     lcd_send_nibble(0x00);
     lcd_send_nibble(0x06);
    }

//----------------------------

void lcd_gotoxy(int8 x, int8 y)
{
  int8 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);//2ms
      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(short visible, short blink) {
  lcd_send_byte(0, 0xC|(visible<<1)|blink);
}



Espero q m puedan ayudar

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Como inicializar LCD Winstar 1602??
« Respuesta #22 en: 13 de Marzo de 2012, 19:39:57 »
La librería aparenta estar bien, deberías chequear tu conexión al LCD.
Por lo que veo usas el pin R/W conectado en B0, no es así??

Si lo que digo esta mal, comenta la linea
Código: C
  1. #define USE_LCD_RW 1
, conecta el pin R/W del LCD a masa y prueba cambiando el valor de temporizacion en
Código: C
  1. #ifdef USE_LCD_RW
  2. while(bit_test(lcd_read_byte(),7)) ;
  3. #else
  4. delay_us(60);
  5. #endif
a un valor de 200 us a ver si arranca.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Guido_BHM

  • PIC10
  • *
  • Mensajes: 6
Re: Como inicializar LCD Winstar 1602??
« Respuesta #23 en: 13 de Marzo de 2012, 20:37:16 »
mglsoft, gracias por contestar
R/W lo tengo a B2, igual probe poniendo lo GND, comentando la linea y aumentando a 200 pero sigue sin pasar nada  :?

Desconectado sebastian 100

  • PIC12
  • **
  • Mensajes: 58
Re: Como inicializar LCD Winstar 1602??
« Respuesta #24 en: 13 de Marzo de 2012, 21:11:26 »
hola guido, te paso el flex_lcd modificado que uso yo para mis proyectos

fijate en cambiar las conexiones, yo lo uso siempre con RW conectado a masa y los datos los mando por fueza bruta :D :D


si te leiste todo el post, sabrás lo que me pasó...  verifica bien las conexiones :mrgreen:
y realmente son compatibles lo unico que cambia con los hitachi es la rutina de inicializacion

espero que lo puedas resolver, saludos

Desconectado Guido_BHM

  • PIC10
  • *
  • Mensajes: 6
Re: Como inicializar LCD Winstar 1602??
« Respuesta #25 en: 15 de Marzo de 2012, 12:54:48 »
gracias sebastian! ya me anda!!!
mi problema no era con la conexion, si no el contraste
por eso no veia nada, soy un gil!  :oops: me quiero matar! tantos dias desperdiciados jajajaja
muchas gracias a vos y mglsoft, y al foro por la mano
ahora soy feliz  :-)
saludos

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Como inicializar LCD Winstar 1602??
« Respuesta #26 en: 15 de Marzo de 2012, 15:17:08 »
Upss !!  :oops: :oops: :oops: :oops:
Me olvide preguntar lo obvio, si te aparecían los típicos cuadrados de la linea 1, típico de una mala inicialización!!
Me alegro que lo hayas sacado en marcha, esto seguro no lo olvidas, así que nunca mas te ocurrirá !!   :D :D :D :D :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Guido_BHM

  • PIC10
  • *
  • Mensajes: 6
Re: Como inicializar LCD Winstar 1602??
« Respuesta #27 en: 15 de Marzo de 2012, 15:37:05 »
jajaja no, seguro q no me olvido mas!!!

Desconectado ElViejoTom

  • PIC10
  • *
  • Mensajes: 4
Re: Como inicializar LCD Winstar 1602??
« Respuesta #28 en: 13 de Mayo de 2013, 17:37:51 »
Hola, buenas tardes,

Acabo de hacer funcionar un LCD PC1602 gracias a este post  ((:-)). Estaba usando la librería del CCS LCD.c y no me funcionaba, la cambié por la flex_lcd.c y pasé todo a delay_us() y funcionó perfecto.

Ahora bien, me está pasando algo raro, digamos que cada segundo o un poco menos alterna entre el mensaje que yo le envío y las dos líneas llenas de w. Algunas veces intercala algún otro caracter en cualquier posición. :shock:

¿Le pasó a alguien? ¿Qué podrá ser?

Saludos

Desconectado sebastian 100

  • PIC12
  • **
  • Mensajes: 58
Re: Como inicializar LCD Winstar 1602??
« Respuesta #29 en: 13 de Mayo de 2013, 22:03:23 »
hola viejo tom!

exactamente no se que puede ser, pero te tiro un centro

 a veces te conviene refrescar el lcd mas a menudo, ya que si le mandas los datos y te quedas esperando hasta cambiar algo en pantalla, durante ese tiempo puede meterse algun ruido o falso contacto y te tira fruta por pantalla.

saludos!