TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: fco1306 en 28 de Junio de 2013, 15:27:57

Título: Problema con lcd
Publicado por: fco1306 en 28 de Junio de 2013, 15:27:57
Tengo un par de lcd del tipo
http://www.engineersgarage.com/electronic-components/16x2-lcd-module-datasheet

que no soy capaz de hacer funcionar.
En su día lo conseguí, pero ahora nada.Uso el pic simulator ide y un 16f877A, conectado el lcd al puerto C, configurado como salidas.
Para empezar un par de dudas con la electrónica.

-Cuando se conecta sólo a la alimentación el lcd se enciende.Conectado el pin de contraste a gnd se ilumina la primera fila pero poco. ¿es así?, ¿no debería iluminarse bastante más? Las veces que lo hice funcionar creo que sí que se iluminaba bastante más.
-Para conectar el led de iluminación de la pantalla, con una resistencia de 330 y alimentando los pines led+ y led- ¿sería suficiente?

Muchas gracias
Título: Re: Problema con lcd
Publicado por: dogflu66 en 29 de Junio de 2013, 07:45:55
Revisa la pagina de ejemplos del lenguaje, hay casi para todo.

http://www.oshonsoft.com/picbasiccompilerexamples.html

Casi siempre aunque no funcione el display se suele quedar la línea superior en negro, pero no siempre. Y si das mucho contraste puede que esté funcionado el LCD pero no observes cambios porque están las líneas en negro y tapan los caracteres o al revez, poco contraste hace que no se vea nada en la pantalla.
Título: Re: Problema con lcd
Publicado por: fco1306 en 29 de Junio de 2013, 13:53:23
He mirado conexiones y cambiado de puerto y de momento seguimos igual.
Tengo conectado el led del lcd.
Con máximo contraste aparece la primera línea en negro y la 2ª sin nada.
Sin contraste las dos sin nada. A lo mejor puede ser problema de contraste. El caso es que conecto el contraste a gnd  porque ,de momento, no tengo potenciómetro, tengo que comprar uno.
 Una pregunta, he visto en los ejemplos la orden Define LCD_READ_BUSY_FLAG = 1 que en los ejemplos del foro no aparece. ¿qué significa?

Muchas gracias
Título: Re: Problema con lcd
Publicado por: dogflu66 en 30 de Junio de 2013, 08:07:59
No lo he utilizado nunca, pero por lo que he podido ver en el manual se utiliza a la hora de la simulación, hace que se acelere algo más la simulación saltándose el tiempo de estabilización de la señal de R/W del display.
Título: Re: Problema con lcd
Publicado por: fco1306 en 30 de Junio de 2013, 18:12:04
Pues problema de contraste no es.He puesto una resistencia de 2k2 en el contraste y sigue sin funcionar.En algún foro he leido que si sólo se ven cuadrados negros, como me pasa a mí, es problema de que el lcd no se inicializa.
En pic simulator va bien. Parece que es problema de la electrónica pero aún no he encontrado el fallo. Seguiré buscando.
Muchas gracias.
Título: Re: Problema con lcd
Publicado por: fco1306 en 02 de Julio de 2013, 14:31:16
Vaya cosa, igual es problema del compilador.Cuando he pasado la configuración del lcd al puerto b, me aparece escritura en la primera línea sólo. Es como si sólo inicializara la primera línea. Estoy usando un 16f877 y estoy seguro que los puertos a,c,d funcionan, ya que tengo conectado un teclado y 8 leds que se encienden y apagan sin problemas.Versión 6.91 de pic simulator.
Qué estraño.
Título: Re: Problema con lcd
Publicado por: dogflu66 en 03 de Julio de 2013, 07:51:44
No he tenido problemas con el LCD con ninguna versión del Basic PSI. Esta me funciona bien en un Pic16F877A.

Código: [Seleccionar]
'Include "_ProcInitEBasic.bas"
Proc _initebasic()
'Puerto del LCD---------------------------------------------
Define LCD_BITS = 8
Define LCD_DREG = PORTB
Define LCD_DBIT = 0
Define LCD_RSREG = PORTC
Define LCD_RSBIT = 0
Define LCD_EREG = PORTC
Define LCD_EBIT = 4
Define LCD_RWREG = PORTC
Define LCD_RWBIT = 1
Define LCD_COMMANDUS = 2000  'Tiempo de espera despues de ejecutar un comand del lcd en uSeg.
Define LCD_DATAUS = 50  'Tiempo de espera despues de enviar un dato al LCD en uSeg.
Define LCD_INITMS = 50  'Tiempo de espera despues de inicializar el Display, solo se ejecuta una vez en mSeg.
'Configuración Placa EBasic ----------------------------------------
AllDigital  'los pin I/O digitales
CMCON = 0x07  'comparador a off
TRISA = 0x00  'Puerto A como salidas
TRISB = 0x00  'puerto B como salidas
TRISC = 0x00
TRISD = 0x00
TRISE = 0x00
TRISA.0 = 1
TRISA.1 = 1  'como entrada (RA1, adc)
TRISC.7 = 1
'TRISA.6 = 1  'como entrada (RA6, tecla S1)
'TRISA.5 = 1  'como entrada (RA5, tecla S2)
'TRISB.5 = 0 'RB5(Tx, RS232)
'TRISB.2 = 1  'RB2 (Rx, RS232)
'PORTB.3 = 1  'luz lcd a on (RB3)
'PORTA.7 = 1  'led amarillo a off
'PORTB.0 = 1  'led verde a off
'******************************************************************
'Inicio Programa---------------------------------------------------
Lcdinit  'inicializa el LCD sin cursor
End Proc                                          

Trabajando de esta manera:

Define CONF_WORD = 0x3f72
Define CLOCK_FREQUENCY = 20
Título: Re: Problema con lcd
Publicado por: Troublemaker_of_pics en 03 de Julio de 2013, 13:08:38
No he tenido problemas con el LCD con ninguna versión del Basic PSI. Esta me funciona bien en un Pic16F877A.

Código: [Seleccionar]
'Include "_ProcInitEBasic.bas"
Proc _initebasic()
'Puerto del LCD---------------------------------------------
Define LCD_BITS = 8
Define LCD_DREG = PORTB
Define LCD_DBIT = 0
Define LCD_RSREG = PORTC
Define LCD_RSBIT = 0
Define LCD_EREG = PORTC
Define LCD_EBIT = 4
Define LCD_RWREG = PORTC
Define LCD_RWBIT = 1
Define LCD_COMMANDUS = 2000  'Tiempo de espera despues de ejecutar un comand del lcd en uSeg.
Define LCD_DATAUS = 50  'Tiempo de espera despues de enviar un dato al LCD en uSeg.
Define LCD_INITMS = 50  'Tiempo de espera despues de inicializar el Display, solo se ejecuta una vez en mSeg.
'Configuración Placa EBasic ----------------------------------------
AllDigital  'los pin I/O digitales
CMCON = 0x07  'comparador a off
TRISA = 0x00  'Puerto A como salidas
TRISB = 0x00  'puerto B como salidas
TRISC = 0x00
TRISD = 0x00
TRISE = 0x00
TRISA.0 = 1
TRISA.1 = 1  'como entrada (RA1, adc)
TRISC.7 = 1
'TRISA.6 = 1  'como entrada (RA6, tecla S1)
'TRISA.5 = 1  'como entrada (RA5, tecla S2)
'TRISB.5 = 0 'RB5(Tx, RS232)
'TRISB.2 = 1  'RB2 (Rx, RS232)
'PORTB.3 = 1  'luz lcd a on (RB3)
'PORTA.7 = 1  'led amarillo a off
'PORTB.0 = 1  'led verde a off
'******************************************************************
'Inicio Programa---------------------------------------------------
Lcdinit  'inicializa el LCD sin cursor
End Proc                                          

Trabajando de esta manera:

Define CONF_WORD = 0x3f72
Define CLOCK_FREQUENCY = 20
prueba a darle más tiempo entre cada comando enviado. A veces me sucede lo mismo cuando mi circuito no se enciende correctamente y existe alguna guiñada en la alimentación.
Título: Re: Problema con lcd
Publicado por: Troublemaker_of_pics en 03 de Julio de 2013, 14:29:32
cambia el valor de la resistencia del led del display, puede que sea un valor muy alto y no esté iluminando suficiente. Recuerda que la iluminación tanbíen juega papel en las ''sombras'' que hacen los pixeles.
Título: Re: Problema con lcd
Publicado por: fco1306 en 04 de Julio de 2013, 17:30:07
Yo tengo Define LCD_BITS = 4 (debería de funcionar configurado sólo a 4 bit)
Funcionó bien durante un momento (qué alegría) y después dejó de funcionar.
Cuando dejó de funcionar  se encendía el lcd y a los pocos segundos se apagaba. Será problema de electrónica, pero de momento no lo encuentro. Tengo pedido un par de lcds que me llegarán en unas semanas. Mientras miraré si es problema de la fuente de alimentación y volveré a comprobar las conexiones por si hay un corto o una falsa conexión.Ya os contaré.
Muchas gracias
Título: Re: Problema con lcd
Publicado por: fco1306 en 23 de Julio de 2013, 15:57:29
Ya me han llegado los lcds. He probado con uno y no he tenido ningún problema. Al final era el lcd.Mira que le dí vueltas.
Tengo un teclado con el  que quiero visualizar la tecla pulsada.Es como si al lcd no le diera tiempo a mostrar el mensaje con el número de tecla ¿Tenéis por ahí algún código que funcione en la realidad?. En la simulación el que tengo funciona sin problema.
Un saludo y muchas gracias