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

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

Desconectado sebastian 100

  • PIC12
  • **
  • Mensajes: 58
Como inicializar LCD Winstar 1602??
« en: 21 de Agosto de 2009, 02:55:24 »
hola,

hace dias estoy luchando con este LCD y no consigo sacar nada por pantalla, estoy programando en C con CCS, y el problema que tengo es que no se inicializa el lcd, quedan todos los puntos negros, tengo un pote para regular contraste, y no parece venir por ahi...

el programa corre bien, lo se porque hay pulsadores, leds y un LM35, conectados y realizan correctamente sus funciones, ademas con un led noté que en el puerto del LCD hay actividad!!!

este LCD tiene un controlador KS0066 (creo que samsumg), y segun el DS (y decenas de foros y paginas), son compatibles con los hitachi (44780),
pero note que la forma de iniciarlos son distintas,

probe librerias de todo tipo y color y nada de nada!! busque mucho y nadie habla de esta marca ni de este controlador.
ademas intente modificar las librerias y tampoco, recien estoy empezando y me cuesta bastante entender la sintaxis de programas hechos por otros.

el circuito lo simule en proteus y funciona OK.
la libreria que intento modificar es lcd_flex.c que la encontre en algun rincon de todopic.

adjunto una imagen con la secuencia de inicializacion.
es micro que estoy usando es un 16f877a

gracias por leer, saludos!!

 

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Como inicializar LCD Winstar 1602??
« Respuesta #1 en: 21 de Agosto de 2009, 08:22:50 »
Podras poner una imagen de tu circuito ??
Usas o no el pin RW??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado sebastian 100

  • PIC12
  • **
  • Mensajes: 58
Re: Como inicializar LCD Winstar 1602??
« Respuesta #2 en: 21 de Agosto de 2009, 08:51:22 »
hola, gracias por responder

adjunto foto, la simulacion en proteus funciona ok, con y sin RW, ademas para probar probe otras librerias modificando los pines y tambien sacandoRW,
  en la pc esta todo bien, pero cuando paso al protoboard,  :?

saludos

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Como inicializar LCD Winstar 1602??
« Respuesta #3 en: 21 de Agosto de 2009, 09:16:50 »
Reemplaza todos los delay_cycles() de la libreria por delay_us().
Todas las librerias de CCS tienen ese defecto, estan creadas para usarlas con cristales de 4MHZ y si las usas con otro cristal cambian los tiempos.

Un ciclo con reloj de 4 MHZ es igual a 1 useg.
Si cambias de reloj, ese tiempo se achica.
En cambio si usas la instruccion delay_us() siempre seran microsegundos, independientemente del cristal utilizado. :mrgreen: :mrgreen: :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Como inicializar LCD Winstar 1602??
« Respuesta #4 en: 21 de Agosto de 2009, 10:38:24 »
.

Me siento muy identificaco con tu problema. Cuando empezé con los LCDs el primero que compré fue un Winstar WHB1602 y casi lo tiro a la basura por creer que no funcionaba.
En sí, creo que las rutinas para mandar caracteres e instrucciones a los LCDs son todas iguales, lo que sí puede diferir es su inicialización, que es lo que me pasaba a mí. Para el KS0066 la inicialización es así:

- Esperar unos 50 ms (no lo indica en el datashet del controlador, pero lo leí por ahí y siempre funcionó),
- Mandar la instrucción '0011NF00' (N: número de líneas, F: formato del caracter),
- Esperar unos 45 us,
- Mandar la instrucción '00001DCB' (D: display on/off, C: cursor on/off, B: cursor blink on/off),
- Esperar 45 us,
- Mandar la instrucción '00000001' (Clear display)
- Esperar 2 ms,
- Mandar la instrucción '000001(I/D)(SH)' (I/D: incremento/decremento del cursor, SH: shift on/off,
- Esperar 45 us.

Listo, el LCD debería funcionar normalmente después de haber seguido estos pasos. Te adjunto la biblioteca (también llamada librería) que uso, pero en asm... No se muy bien como es el C, pero espero que te sirva.
Antes de tirarlo a la basura, avisame, que tal vez sirva.
Saludos.

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

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Como inicializar LCD Winstar 1602??
« Respuesta #5 en: 21 de Agosto de 2009, 14:06:17 »
.

Me olvidaba de decirte que quizá no puedas leer la bandera del LCD (busy flag) entre las instrucciones de la inicialización. Por eso probá primero generando los retardos que ahí te menciono por software entre tales instrucciones.

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 #6 en: 21 de Agosto de 2009, 22:16:34 »
hola, aca de vuelta

sabes que anteriormente hice un programa de prueba en asembler con un mensaje y funciona ok, me resultó facil adaptar los tiempos y comandos para este LCD,
el tema que tengo ahora es que estoy programndo en C, y nesecito que la comunicacion sea a 4 bits, por eso insisto con esta libreria

no entiendo porque en esta libreria en la funcion lcd_init() se usa lcd_send_nibble() y despues lcd_send_byte(), ambas para enviar instrucciones al lcd,

probe varias formas de modificar esta funcion para respetar las intrucciones y tiempo que nesecita este micro, pero he fallado en todas.

la verdad que ya estoy pensando en tirarlo a la basura.

ahora algunas preguntas!
estoy en buen camino tratando de modificar esta libreria??
lo tiro a la basura o sigo invirtiendo neuronas?

saludos gente, sepanlo SON GROSOS!!

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Como inicializar LCD Winstar 1602??
« Respuesta #7 en: 22 de Agosto de 2009, 07:52:23 »
Probaste cambiar los delay_cycles() po delay_us() ??? :shock: :shock:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado sebastian 100

  • PIC12
  • **
  • Mensajes: 58
Re: Como inicializar LCD Winstar 1602??
« Respuesta #8 en: 22 de Agosto de 2009, 12:56:32 »
si ya cambie los delay_cicles y no pasa nada, ademas probe con otras librerias y en proteus funcionan ok, yo estoy casi seguro que es como dice mtristan que es un tema de inicializacion,

cuando le cargaba el programa que habia hecho en asm y no funcionaba me aparecia toda la primer linea negra, despues que le modifique los tiempos en la parte de inicializacion, aunque no escribiera nada
ya no aparecia todo negro, y cuando le mandaba un texto lo mostraba perfectamente.

cabe aclarar que en asm manejaba el bus con 8 bits, ahora el tema es en C con 4 bits

me rompi el coco tratando de pasar el codigo que me paso mtristan (la parte que dice inicia a 4 bits) al CCS y tampoco funciona.

tampoco entiendo bien la mecanica del traspaso de datos a 4 bit, ahora estoy investigando esto a ver si puedo hacer la inicializacion yo mismo,

muchas gracias gente

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como inicializar LCD Winstar 1602??
« Respuesta #9 en: 22 de Agosto de 2009, 13:43:15 »
Adjunta el código en asm que tienes y que sabes que funciona, haber si con ese se puede modificar el flex_lcd.

Luego en flex_lcd, primero se envía send_nible porque este no hace el testeo de estado del LCD, cosa que hace send_byte.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Como inicializar LCD Winstar 1602??
« Respuesta #10 en: 23 de Agosto de 2009, 22:43:44 »
.

Jeje, tengo que ser sincero, ese pedazo de inicialización para 4 bits no funciona en realidad. Y como todavía no he intentado usar el LCD en modo 4 bits, dejé eso escrito para modificarlo en otro momento. Mil disculpas por las molestias que te pudieras haber generado.

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 #11 en: 23 de Agosto de 2009, 23:45:26 »
buenas...
este es el codigo en asm que me funciona a 8 bit, vean en la linea 190 mas o menos que esta  LCD_INI y ahi es donde cambie las cosas segun el DS de mi LCD, y listo salio con fritas.


ahora sigo intentando en ccs y no doy pie con bola!!!! :5]

mtristan, no hay problema, esto para mi (por ahora) es un hobby y quiero aprender todo lo que pueda y cuando hay que hilar fino, comprendes cosas que de otra forma pasas por alto,

de todas formas, ya le vamo´ a dar a esta maldita pantalla!!!
« Última modificación: 23 de Agosto de 2009, 23:56:15 por sebastian 100 »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como inicializar LCD Winstar 1602??
« Respuesta #12 en: 24 de Agosto de 2009, 01:40:25 »
Prueba utilizando esta rutina para la inicialización:

Código: C
  1. void lcd_init(void)
  2. {
  3.   int8 i;
  4.  
  5.   output_low(LCD_RS);
  6.   #ifdef USE_LCD_RW
  7.      output_low(LCD_RW);
  8.   #endif
  9.   output_low(LCD_E);
  10.   delay_ms(30);
  11.   lcd_send_nibble(0x02);
  12.   lcd_send_nibble(0x02);
  13.   lcd_send_nibble(0x0C);
  14.   delay_us(60);
  15.   lcd_send_nibble(0x00);
  16.   lcd_send_nibble(0x0C);
  17.   delay_us(60);
  18.   lcd_send_nibble(0x00);
  19.   lcd_send_nibble(0x01);
  20.   delay_ms(2);
  21.   lcd_send_nibble(0x00);
  22.   lcd_send_nibble(0x06);
  23. }

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Como inicializar LCD Winstar 1602??
« Respuesta #13 en: 24 de Agosto de 2009, 16:13:06 »
.

Este tema del foro me ha inspirado para seguir con la bibioteca/librería para LCD a 4 bits.
Así que adjunto a este mensaje el archivo asm con las rutinas básicas (más adelante las completaré) para usar un módulo LCD con controlador KS0066 (creo que toda la línea Winstar WHxx02 usa el mismo) en modo 4 bits, probado con un WH1602.
Espero que sirva esta vez.
Saludos.

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

Desconectado flacoclau

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1692
    • El Micro Reactor
Re: Como inicializar LCD Winstar 1602??
« Respuesta #14 en: 24 de Agosto de 2009, 20:59:02 »
este es el que uso yo: saludos!!
Código: ASM
  1. inicializa_lcd        MOVLW    .5                           ;carga el tiempo de retardo en w
  2.                       CALL    tiempo_w_x_1_ms              ;llama a la subrutina de retardo
  3.                       MOVLW    b'00101000'                  ;inicializa el LCD
  4.                       CALL    lcd_comando                  ;datos a 4 bits(b4=0) 2 renglones(b3=1)
  5.                       MOVLW    b'00101000'                  ;5x7 pixels(b2=0) b1 y b0 no usados
  6.                       CALL    lcd_comando                  ;envía el comando dos veces
  7.                       MOVLW    b'00001100'                  ;activa el display(b2=1) cursor apagado(b1=0)
  8.                       CALL    lcd_comando                  ;parpadeo desactivado (b0=0)
  9.                       MOVLW    b'00000001'                  ;coloca el cursor en la 1º posición 1º renglón h00
  10.                       CALL    lcd_comando                  ;y limpia la pantalla
  11.  
  12. lcd_caracter          BSF      RS                           ;Si es un caracter pone en alto el pin RS del display
  13. lcd_comando           MOVWF    Dato_LCD,0                   ;Salva el dato a enviar al LCD
  14.                       MOVLW    0x0F
  15.                       ANDWF    LCD_Port,F,0                 ;Limpia el Nible alto del puerto
  16.                       MOVLW    0xF0
  17.                       ANDWF    Dato_LCD,W,0                 ;Limpia el Nible Bajo del dato y lo guarda en W
  18.                       IORWF    LCD_Port,F,0                 ;Saca ese Nible por el puerto
  19.                       BSF      E                            ;Habilita el Enable
  20.                       BCF      E                            ;Deshabilita el Enable
  21.  
  22.                       MOVLW    0x0F
  23.                       ANDWF    LCD_Port,F,0                 ;Limpia el Nible alto del puerto
  24.                       SWAPF    Dato_LCD,W,0                 ;Limpia el Nible Alto del dato y lo guarda en W
  25.                       ANDLW    0xF0
  26.                       IORWF    LCD_Port,F,0                 ;Saca ese Nible por el puerto
  27.                       BSF      E                            ;Habilita el Enable
  28.                       BCF      E                            ;Deshabilita el Enable
  29.  
  30.                       BCF      RS                           ;Pone en bajo el pin RS
  31.                       MOVLW    .2                           ;Espera 2mS
  32.                       CALL    tiempo_w_x_1_ms
  33.                       MOVF     Dato_LCD,W,0                 ;Recupera el dato en W
  34.                       RETURN
Las personas con buena ortografía me atraen textualmente.

El Micro Reactor

Córdoba capital - Argentina.


 

anything