Problema para inicializar una LCD Driver ST7066U

Hola!
Me he comprado un display LCD pero no consigo que muestre nada.
Cuando lo enciendo sale la primera linea en negro y la segunda en blanco. Segun he leido cuando pasa esto es que no se ha inicializado bien.
En la web donde lo he comprado pone en la descripcion que el controlador es ST7066U, pero luego le doy al datasheet que viene en la misma pagina y pone que el controlador es el KS0070B
Estoy programando con el CCS y he probado ha cambiar la libreria lcd.c la funcion lcd_init() por una para funcionar con 4 bits para el ST7066U pero nada . Ya he perdido la cuenta de tantas librerias que he probado.Tambien he probado una libreria que valia para el KS0070B pero nada.
Tambien he probado hacerme mi propia funcion lcd_init segun ponia en el pdf de la pagina donde lo compre, pero no hay resultado, siempre sale primera linea negra. (Ni que decir que tambien he probado la libreria que viene en el ccs sin modificar nada)
¿Alguien tiene una o la funcion lcd_int compatible con esa LCD?
 
Acabo de solucionarlo, resulta que LCD era un displaytech 162A y el datasheet de la tienda estaba mal, su controlador es el ST7066U. Ya he cambiado la funcion del lcd_init para este controlador, pero a la hora de encenderlo me encuentro con esto: (la imagen esta al revés)
la_fot10.jpg


Deberia de poner en la primera linea "Hola Mundo" y en la segunda "abcdefghijk"

La cosa curiosa es que cuando acerco mi dedo a los cables se visualiza perfectamente pero cuando lo alejo se vuelve a poner como la imagen. Me imagino que esta vez será problema de hardware no?
He comprobado los cables y parece que estan bien conectados a la protoboard.

Un Saludo
 
La cosa curiosa es que cuando acerco mi dedo a los cables se visualiza perfectamente pero cuando lo alejo se vuelve a poner como la imagen. Me imagino que esta vez será problema de hardware no?
Mas bien parece un problema de tiempos (hay que revisar la biblioteca) o de contactos "defectuosos" que están deformando las señales de datos y/o control.
De todas formas, nosotros hemos manejado un display con ese mismos controlador usando un PIC 18F2550 y anduvo de primera intención... :confused: :confused:
 
Mas bien parece un problema de tiempos (hay que revisar la biblioteca) o de contactos "defectuosos" que están deformando las señales de datos y/o control.
De todas formas, nosotros hemos manejado un display con ese mismos controlador usando un PIC 18F2550 y anduvo de primera intención... :confused: :confused:
Estoy usando el pic 16f88 con el oscilador interno a 4MHz
El pdf del driver ST7066U es este http://www.electro-tech-online.com/custompdfs/2011/10/ST7066U.pdf en la pagina 25 esta para inicializarlo
Esta es la función lcd_init que estoy usando:
Código:
void lcd_init(void) 
{
   output_low(LCD_RS_PIN);
   output_low(LCD_RW_PIN);
   output_low(LCD_ENABLE_PIN);
   delay_ms(1);
   //
   lcd_send_nibble(0x03); //Funcion set
   delay_us(40);
   //
   lcd_send_nibble(0x02); //Funcion set
   lcd_send_nibble(0x08);
   delay_us(40);
   //
   lcd_send_nibble(0x02); //Funcion set
   lcd_send_nibble(0x08);
   delay_us(40);
   //
   lcd_send_byte(0,0x0F); //Display ON/OFF
   delay_us(40);
   //
   lcd_send_byte(0,0x01); //Display Clear
   delay_ms(2);
   //
   lcd_send_byte(0,0x06); //Entry mode set
   //
   
}

y este es el main:
Código:
#include "main.h"
#include "lcd.c"

void main()
{
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
   
   lcd_init();

   printf(LCD_PUTC,"\f");
   // TODO: USER CODE!!
   lcd_gotoxy(1,2);
     printf(LCD_PUTC,"abcdefghijkl");
lcd_gotoxy(1,1);
     printf(LCD_PUTC,"Hola Mundo");

   while(true){
     
   }
}

¿Alguien me puede echar un cable?

Un saludo y gracias
 
Última edición:
Estoy usando el pic 16f88 con el oscilador interno a 4MHz
Prueba con este sencillo código:
Código:
#include <16F88.H>
#fuses   INTRC_IO,NOFCMEN,NOIESO
#use delay(internal = 8MHz)
#include <LCD.C>

void main()
{
   setup_oscillator(OSC_8MHZ);
      setup_adc_ports(NO_ANALOGS);
         setup_comparator(NC_NC_NC_NC);

   lcd_init();
      lcd_putc("\fHola Mundo");
         lcd_putc("\nHello World");
         
   while(true)
      {
      output_toggle(PIN_A4);
         delay_ms(1000);
      }
}
Funciona 100% sobre un 16F88 con oscilador interno a 8MHz.
Está creado con la librería LCD.C de CCS sin modificaciones y un LCD 16x2 JHD 602A,
que es compatible con el controlador Hitachi HD44780.
Le agregue un LED en RA4, el cual se prende y apaga cada segundo. (Comprobación del oscilador a 8MHz)
Si con este programa no logras hacer funcionar tu pantalla, entonces no es compatible con el HD44780 ó está dañada.
Te comento esto último, ya que me sucedió algo similar con una pantalla que empezó a mostrar caracteres extraños.
Algo así como los que se muestran en el gráfico que subiste, y no pude hacer nada por rescatarla.
Si no te funciona con el código que puse, puedes también probar con esta librería Flex LCD416
Es para pantallas de 16x4, pero también funciona en las 16x2.
Adjunto el diagrama de prueba con la conexión de la pantalla.

Suerte.
 

Adjuntos

  • 16F88_LCD_16x2.jpg
    16F88_LCD_16x2.jpg
    29.8 KB · Visitas: 20
Con la libreria del HD44780 no me va sale una linea en negro. Tiene el driver ST7066U, con la función de inicialización que he puesto en mi anterior mensaje va pero sucede lo que he dicho.
He probado a poner 8MHz en el oscilador en vez de 4MHz como pones tu D@rkbytes, y se disimulan los caracteres raros que salen al acercar la mano. Cambiando los tiempos de inicializacion se deforma mas o menos (pero no llego a dar en el clavo).
Pero no estoy seguro de que sea solamente prolema de los tiempos ya que he probado a poner un led en una patilla del pic junto a la lcd y se apaga cuando acerco la mano.
 
He probado a poner 8MHz en el oscilador en vez de 4MHz como pones tu D@rkbytes, y se disimulan los caracteres raros que salen al acercar la mano. Cambiando los tiempos de inicializacion se deforma mas o menos (pero no llego a dar en el clavo).
Pero no estoy seguro de que sea solamente problema de los tiempos ya que he probado a poner un led en una patilla del pic junto a la lcd y se apaga cuando acerco la mano.
Eso es lo más extraño del caso. Los niveles deben ser estables en las salidas del PIC.
Revisa tu fuente de poder, ya que posiblemente exista ruido.
Cuando acercas tu mano a la pantalla ó al PIC, no debe haber cambios, aún tocando las conexiones.
Espero que hayas realizado la prueba con el código que puse. Ese código funciona bien para probar.
 
Eso es lo más extraño del caso. Los niveles deben ser estables en las salidas del PIC.
Revisa tu fuente de poder, ya que posiblemente exista ruido.
Cuando acercas tu mano a la pantalla ó al PIC, no debe haber cambios, aún tocando las conexiones.
Espero que hayas realizado la prueba con el código que puse. Ese código funciona bien para probar.

Si lo he probado pero no hace nada.
He probado a cambiar la fuente por una de 12 V ( bueno mas bien un transformador) y transformandolo a 5V con un LM7805 . Y se ve los caracteres raros, me he fijado que cuando desconecto la fuente se ponen bien las letras y se quita ese "ruido" en el display, y se mantiene bien durante 5 segundos ( He medido la tension en esos 5 segundo y siempre da 5V exactamente los mismos que cuando esta conectada la fuente, excepto cuando ya se apaga el display que da 0V) Me imagino que tendra algo de energia cuando se desconecta, pero no entiendo por que se pone bien en la desconexion . :confused:
Por otro lado he de decir que la lcd solo funciona cuando el Reset no esta conectado, cuando esta conectado a la fuente se pone la primera linea negra :(
Un saludo
 
Si lo he probado pero no hace nada.
He probado a cambiar la fuente por una de 12 V ( bueno mas bien un transformador) y transformándolo a 5V con un LM7805
Lo único que tienes que hacer es algo como esto...
2zq5suh.gif

Aquí el transformador es de 9V, pero con 12V también va.

me he fijado que cuando desconecto la fuente se ponen bien las letras y se quita ese "ruido" en el display, y se mantiene bien durante 5 segundos ( He medido la tensión en esos 5 segundo y siempre da 5V exactamente los mismos que cuando esta conectada la fuente, excepto cuando ya se apaga el display que da 0V) Me imagino que tendrá algo de energía cuando se desconecta, pero no entiendo por que se pone bien en la desconexión.
Yo insisto que tienes problemas de filtraje.
Y cuando desconectas la fuente de la red, es cuando deja de existir el ruido.
Con el voltímetro podrás medir el voltaje, pero no el nivel de rizado que tiene la fuente.
 
Lo acabo de solucionar. Estaba sospechando del pin MCLR y lo he desactivado y voila! El ruido ha desaparecido!
No tengo ni idea a que puede ser debido que aparezca ruido cuando esta activado el MCLR la verdad, si a alguien le pasa algo parecido que pruebe esto.
Un saludo y gracias a todos por vuestra ayuda =)
 
Cuando el pin MCLR está activo MCLR = ON y si éste pin es llevado a 1 lógico (VDD)
El programa debe funcionar normalmente, cuando es llevado a 0 lógico (VSS),
entonces el micro entra en estado de reset.
Solamente cuando MCLR está configurado en ON y el pin queda flotando ocurre lo que mencionas.
En fin, que bien que lograste solucionar el problema.

Saludos.
 
Atrás
Arriba