Autor Tema: Ayuda con LCD (Controlador ST7066) y PIC16F88  (Leído 4461 veces)

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

Desconectado AV9

  • PIC10
  • *
  • Mensajes: 43
Ayuda con LCD (Controlador ST7066) y PIC16F88
« en: 05 de Noviembre de 2010, 22:34:59 »
Hola a todos:

Estoy intentando usar un LCD en modo 4 BITS cuyo controlador es el ST7066 (enlace: http://www.focuslcd.com/pdfs/ST7066.pdf). El caso es que no consigo hacerlo funcionar y he probado con varios PIC (aunque ahora me he centrado con el PIC16F88 para no perderme), varias conexiones y muuuuuchas horas navegando por la red hasta el punto de que dudo que funcione (y lo compré esta semana). Tan sólo veo cuadrados negros y símbolos o lineas sin sentido, he probado a ajustar el contraste y nada...

Escribo mi código en C con el programa CCS y uso las famosas librerías "flex_lcd.c" y "lcd.c". El caso es que he usado anteriormente con éxito otros LCD pero tenían el famoso driver HD44780 y estoy empezando a creer que dichas librerías sólo son aptas para ese driver.

¿Tienen alguna librería para este driver o alguna información del tema?.

Muchas gracias de antemano, llevo muchas horas con esto y cualquier ayuda será muy agradecida.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Ayuda con LCD (Controlador ST7066) y PIC16F88
« Respuesta #1 en: 05 de Noviembre de 2010, 23:41:55 »
  Me puse a leer el datasheet del ST7066 y compararlo con el del HD44780 y en el único lugar que encuentro diferencias (no quiere decir que sea la única, quizá yo no esté viendo otra) es en la secuencia de inicialización del display.

  Compara las dos fotos. Tal vez si modificás las librerías para LCD que estás usando logres hacer funcionar tu display



De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado AV9

  • PIC10
  • *
  • Mensajes: 43
Re: Ayuda con LCD (Controlador ST7066) y PIC16F88
« Respuesta #2 en: 06 de Noviembre de 2010, 06:57:24 »
Cierto es....pero el caso es que no he conseguido encontrar esa zona de código dentro de las librerías "flex_lcd.c" y "lcd.c" y mi nivel no llega tanto como para hacer una librería nueva, soy estudiante de ingeniería electrónica y aun no he visto como hacer esto.

La zona referida es la siguiente:

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
   }

}

Y no sé como modificarla para que tenga la misma secuencia de inicialización....Por cierto gracias por la molestia.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Ayuda con LCD (Controlador ST7066) y PIC16F88
« Respuesta #3 en: 06 de Noviembre de 2010, 13:53:43 »
Ahora vi también que el primer delay de la inicialización tiene que ser de 40ms en lugar de 15ms.

Fijate en el código que subiste cambiar el "delay_ms(15)" por "delay_ms(40)" y cambiar la cadena de inicialización creo que sería en la siguiente parte... donde tenés  "lcd_send_nibble(0x02)" cambiarlo por  "lcd_send_nibble(0x03)"
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado AV9

  • PIC10
  • *
  • Mensajes: 43
Re: Ayuda con LCD (Controlador ST7066) y PIC16F88
« Respuesta #4 en: 06 de Noviembre de 2010, 14:34:06 »
Gracias de nuevo! Lo probaré hoy mismo a ver si funciona!!

Ya te cuento...ciao!

Desconectado AV9

  • PIC10
  • *
  • Mensajes: 43
Re: Ayuda con LCD (Controlador ST7066) y PIC16F88
« Respuesta #5 en: 06 de Noviembre de 2010, 17:15:25 »
Hola AngelGris!

Acabo de probar eso y no funciona. El código de la inicialización quedó de la siguiente forma:

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(40);

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

lcd_send_nibble(0x03);

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
   }

}

Ahora he cambiado el PIC por el PIC16F690 porque con el 16F88 me da un error : "PICKIT2 VPP voltage level error.Chech target & retry operation", y estoy usando todo su puerto C.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Ayuda con LCD (Controlador ST7066) y PIC16F88
« Respuesta #6 en: 06 de Noviembre de 2010, 20:45:21 »
Estuve investigando un poco la librería y creo que se podrían hacer los siguientes cambios para hacer que coincida toda la cadena de inicialización. Busca lo siguiente en la librería
Código: C
  1. int8 const LCD_INIT_STRING[4] =
  2. {
  3.  0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
  4.  0xc,                    // Display on
  5.  1,                      // Clear display
  6.  6                       // Increment cursor
  7.  };

y cambialo por
Código: C
  1. int8 const LCD_INIT_STRING[4] =
  2. {
  3.  0x38
  4.  0x0C,                    // Display on
  5.  1,                      // Clear display
  6.  6                       // Increment cursor
  7.  };
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado AV9

  • PIC10
  • *
  • Mensajes: 43
Re: Ayuda con LCD (Controlador ST7066) y PIC16F88
« Respuesta #7 en: 07 de Noviembre de 2010, 00:15:22 »
Nada...salen símbolos extraños parecidos a exlamaciones. Antes con el PIC16F88 me salía cuadrados negros por lo menos...mañana haré la prueba con el mítico PIC16F84A y me centraré en ese. No emepecé con él porque una vez el LCD funcione necesitaré módulos que este PIC no tiene, pero primero una cosa y luego la otra.

Muchas gracias de nuevo ya te contaré a ver que tal. Saludos!

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Ayuda con LCD (Controlador ST7066) y PIC16F88
« Respuesta #8 en: 07 de Noviembre de 2010, 11:09:21 »
No se me ocurre mucho más para hacer. Quizá una última prueba sería intentar hacer funcionar el display en protocolo de 8 bits. Como para saber si falla siempre o si hay algún problema cuando se lo quiere inicializar en 4 bits
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado AV9

  • PIC10
  • *
  • Mensajes: 43
Re: Ayuda con LCD (Controlador ST7066) y PIC16F88
« Respuesta #9 en: 07 de Noviembre de 2010, 12:36:35 »
Es una buena idea...pero ahora me ha salido un nuevo problema que estoy investigando porque ahora tengo un error que antes no tenía cuando quiero programar el PIC con el PICKIT2. Me dice "pickit 2 vpp voltage level error. Check target & retry operation."

Lo raro es que antes no me aparecía esto y me sale este error con un PIC16F88 y un PIC16F84A, pero con el PIC16F690 puedo grabar perfectamente. Utilizo otro soporte donde conectarlo porque este último tiene más pines pero para probar si es el soporte los he cableado en una board directamente al PICKIT y me da el mismo error.....La verdad es que me estoy desilusionando un poco pero no hay otra cosa que seguir intentándolo.

Gracias por tu ayuda.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Ayuda con LCD (Controlador ST7066) y PIC16F88
« Respuesta #10 en: 07 de Noviembre de 2010, 13:23:08 »
¿Y ese error no tendrá algo que ver con la configuración del fuse LVP?
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado AV9

  • PIC10
  • *
  • Mensajes: 43
Re: Ayuda con LCD (Controlador ST7066) y PIC16F88
« Respuesta #11 en: 07 de Noviembre de 2010, 13:27:57 »
Ostras!! ahora que lo dices es algo que cambié...lo probaré. Joder tio ya podía pegarme cabezazos contra la mesa. Lo siento tio pero hasta ahora sólo había visto programación en ensamblador y este curso estoy empezando a programar microcontroladores con el C.

Gracias!!

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Ayuda con LCD (Controlador ST7066) y PIC16F88
« Respuesta #12 en: 07 de Noviembre de 2010, 16:20:28 »
Hay que tomárselo con calma. Aunque debo admitir que en más de una oportunidad estuve la noche sin dormir pensando en como solucionar algunas cosas de los programas.

Respecto a los "fuses", éstos no son exclusivos de la programación en C. Mediante estos "fuses" se indica los valores para los distintos bits de configuración del PIC y son cosas que en ASM también hay que tenerlas en cuenta.

Un caso podría ser la habilitación o no del WatchDogTimer. O el MasterCLeaR que en algunos PIC se lo puede habilitar o no.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado AV9

  • PIC10
  • *
  • Mensajes: 43
Re: Ayuda con LCD (Controlador ST7066) y PIC16F88
« Respuesta #13 en: 07 de Noviembre de 2010, 20:46:06 »
Sip, tienes razón. En cuanto a los FUSES he hecho funcionar un PIC, pero el otro sigue sin poder cargar el HEX...posiblemente me confundiese con los FUSES y pusiera la opción de sólo poder grabarse una vez o proteger el código. Ahora tengo el PIC16F84A con el LCD y sigue mostrando cosas raras...En cuanto a lo de mandar 8 bits en lugar de 4 no sé cómo hacerlo. Seguiré buscando a ver si tengo suerte.

Gracias de nuevo!


 

anything