Autor Tema: Problemas con LCD Powertip PC1602L y PIC16F876  (Leído 2802 veces)

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

Desconectado mojo-picon

  • PIC10
  • *
  • Mensajes: 2
Problemas con LCD Powertip PC1602L y PIC16F876
« en: 20 de Noviembre de 2010, 19:12:51 »

Hola a todos;
Antes que nada, decir que soy nuevo en este foro, por eso quiero mandar un saludo a todos sus miembros.

He decidido crear este nuevo tema, a pesar de que hay algunos similares, porque ya los he leido todos y no solucionan mi problema

Bueno, pues al grano.

Mi aplicacion es para un control de temperatura.

Para ello utilizo el PIC16F876 trabajando a 4MHz y una pantalla LCD de 16x2 caracteres del
fabricante Powertip con referencia PC1602LRS-DWA-B-0.  Esta pantalla usa el driver ST7066U.

Lo tengo configurado para trabajar con una interface de datos de 4 bits.

El cableado entre PIC - Pantalla y las tensiones que tienen actualmente son las siguientes:

LCD_PIN_1_(Vss) --------- 0V
LCD_PIN_2_(Vdd) --------  5V 
LCD_PIN_3_(Vo)  --------- 0.1V 

LCD_PIN_4_(RS) ---------------------PIC  (PIN_C0)
LCD_PIN_5_(RW) -------------------- PIC  (PIN_C1)
LCD_PIN_6_(E) -----------------------PIC  (PIN_C2)

LCD_PIN_7_(DB0) ----- desconectado
LCD_PIN_8_(DB1) ----- desconectado
LCD_PIN_9_(DB2) ----- desconectado
LCD_PIN_10_(DB3) ----desconectado   

LCD_PIN_11_(DB4)------------------ PIC  (PIN_B4)
LCD_PIN_12_(DB5) ----------------- PIC  (PIN_B5)
LCD_PIN_13_(DB6)------------------ PIC  (PIN_B6)
LCD_PIN_14_(DB7)------------------ PIC  (PIN_B7) 

LCD_PIN_15_(K) -------- 0V    (-)
LCD_PIN_16_(A) -------- 4.2V (+)

Los pines K y A del display que aparecen por el lado izquierdo los tengo desconectados (entiendo que son los mismos
que los pines 15 y 16). De hecho, lo verifico y dan continuidad.

Al PIC le he cargado un programa muy simple para escribir un caracter en pantalla, para lo cual utillizo la libreria "flex_lcd.c",
adaptada a los pines de mi PIC.
Este programa utiliza la función "lcd_init()" para inicializar la pantalla al encenderla y configurarla para trabajar con 4 bits, 5x8 y 2 líneas

Esta inicalización la he programado tal cual viene en el datasheet de driver ST7066U, es decir:

RS RW DB7 DB6 DB5 DB4     
0     0     0     0     1    1          No chequea BF
wait > 37us

RS RW DB7 DB6 DB5 DB4     No chequea BF
0     0      0      0     1     0   
0     0      1      0     0     0
wait > 37us

RS RW DB7 DB6 DB5 DB4     No chequea BF
  0    0     0      0     1     0
  0    0     1      0     0     0
wait > 37us

RS RW DB7 DB6 DB5 DB4      chequea BF 
 0    0      0     0      0     0
 0    0      1     1      1     1
wait > 37us

RS RW DB7 DB6 DB5 DB4     chequea BF
  0    0     0      0      0    0
  0    0     0      0      0    1
wait > 2ms
 
RS RW DB7 DB6 DB5 DB4     chequea BF
 0     0    0      0     0     0
 0     0    0      1     1     0
wait > 37us


(Se puede comprobar que no es la misma que para el driver HD44780U de Hitachi)

Con todo esto, cuando enciendo la pantalla lo que veo, momentaneamente, es sólo la primera línea con los 5x8 puntos encendidos.

Al cabo de unos instantes, se ilumina la segunda línea y puedo ver las dos líneas con los 5x8 puntos encendidos, con buen contraste,
pero no veo el caracter que estoy escribiendo.

No estoy seguro de que esté haciendo la inicialización bien, aunque al pasar de 1 a 2 líneas, parece que sí.
He probado a inicializarlo haciendo que parpadee el cursor y sin parpadeo, pero esto si que no tiene efecto alguno, por lo
que creo que no inicializa bien.

Además de la inicialización, no sé si las tensiones que tengo en la pantalla son las correctas.
En la documentacion de ST7066U habla de una tensión que puede estar conectada a -V  o a GND y que tiene que ver con la tensión VLCD
Ya he probado con GND y con -4V conectandola a Vo, pero nada.


La función "lcd_init()" que utilizo para inicializarla es:

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

void lcd_init(void)
{
output_low(LCD_RS);      //RS=0
output_low(LCD_RW);     //RW=0
output_low(LCD_E);         //E=0
delay_ms(1);
//
lcd_send_nibble(0x03);       //Function set
delay_us(40);
//
lcd_send_nibble(0x02);       //Function set
lcd_send_nibble(0x08);
delay_us(40);
//
lcd_send_nibble(0x02);      //Function set
lcd_send_nibble(0x08);
delay_us(40);
//
lcd_send_byte(0,0x0F);     //Display ON/OFF control
delay_us(40);
//
lcd_send_byte(0,0x01);     //Display clear
delay_ms(2);
//
lcd_send_byte(0,0x06);     //Entry mode set
//

}

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


Para simularlo tengo que cambiar la inicializacion, ya que el driver que usa Proteus es el de Hitachi (HD44780U).
Lo simulo cambiando esa inicializacion para Hitachi y funciona perfectamente.
Evidentemente, al poner la inicializacion del ST7066U de Sitronic no va la simulación en Proteus.

He probado a trabajar con 8 bits, pero nada.
He probado a poner los pines RS, RW y E en el puerto A en lugar de en el C y tampoco.
Me he leido todo el datasheet del driver ST7066U así como la documentación de Powertip.
He probado con diferentes tensiones, pero nada de nada.

Tengo un atasco tremendo con este asunto, así que si alguien sabe algo, me puede indicar alguna pista, o sugerir algo,  pues le estaría muy agradecido.

Saludos


Desconectado mojo-picon

  • PIC10
  • *
  • Mensajes: 2
Re: Problemas con LCD Powertip PC1602L y PIC16F876
« Respuesta #1 en: 22 de Noviembre de 2010, 08:01:02 »

Hola a todos:

Ya he conseguido resolver el asunto.

Resulta que el PIN_B4 del puerto B del PIC estaba mal.

PIN_B4 = HIGH daba 5V
PIN_B4 = LOW  daba 2.5V, que es un nivel alto.

He cambiado el PIN_B4 por el B3 y ha empezado a funcionar.


Gracias y saludos

Desconectado brutto

  • PIC10
  • *
  • Mensajes: 44
Re: Problemas con LCD Powertip PC1602L y PIC16F876
« Respuesta #2 en: 11 de Abril de 2011, 09:42:58 »
que libreria usas para trabajar a 4bits?