TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: RICHI777 en 25 de Agosto de 2009, 17:25:41

Título: Ayuda display LCD 4x20 muestra solamente linea 1 y 3
Publicado por: RICHI777 en 25 de Agosto de 2009, 17:25:41
Hola gente !, recurro a uds porque tengo un problema que me esta volviendo loco. Tengo una placa que esta conectada a un display LCD 4x20 con un controlador SPLC780 compatible, aclaro que no uso MicroChip y las funciones las implemente yo. El problema es que no puedo mostrar nada en segunda linea, la primera y la tercera funciona bien y cuando intento mostrar en la cuarta lo hace en la primera, los comandos tipicos borrar pantalla, cursor al home, desplazamiento, cursor, definicion y muestra de carcteres custom, etc. funcionan bien. Basicamente la función que setea el address pointer interno del contralador hace esto:

Código: C
  1. /*----------------------------------------------------------------------------------------------------------------------------------
  2. ** Function Name : SetCol
  3. ** Description   : Set appropiate address col
  4. ** Input         : Col
  5. ** Output        : Nothing
  6. ** Notes         :
  7. ----------------------------------------------------------------------------------------------------------------------------------*/
  8. void SetCol( byte Col, byte Row )
  9. {
  10.   /* Express in zero base */
  11.   Col --;
  12.  
  13.   switch ( Row )
  14.   {
  15.     case 1:
  16.       WriteLCD( FALSE, (( 1 << LCD_DDRAM ) | ( LCD_LINE1_ADDRESS + Col )), TRUE );
  17.       break;
  18.     case 2:
  19.       WriteLCD( FALSE, (( 1 << LCD_DDRAM ) | ( LCD_LINE2_ADDRESS + Col )), TRUE );
  20.       break;
  21.     case 3:
  22.       WriteLCD( FALSE, (( 1 << LCD_DDRAM ) | ( LCD_LINE3_ADDRESS + Col )), TRUE );
  23.       break;
  24.     case 4:
  25.       WriteLCD( FALSE, (( 1 << LCD_DDRAM ) | ( LCD_LINE4_ADDRESS + Col )), TRUE );
  26.       break;
  27.   }
  28. }

Donde la función es similar al gotoxy de otras librerias, y las direcciones de cada linea serian estas:


La función selecciona en base a la linea ( Row ) y hace un OR entre 0x80 que es comando para setear un address interno del LCD con el valor deseado de columna. Pero no hay caso no funciona.
Aclaro que cambie de módulos y el problema persiste, hoy veo si cambio la placa, les adjunto los fuentes para que el pueda lo mire.

Muchas gracias !

Saludos !
Título: Re: Ayuda display LCD 4x20
Publicado por: Suky en 25 de Agosto de 2009, 18:59:44
Hola RICHI777 !

Al compañero pajaro le pasaba algo parecido, solo se inicializaba con las lineas 1 y 3. El problema surgía porque la librería hacia uso del Pin R/W pero el hardware no lo implementaba.


Saludos!
Título: Re: Ayuda display LCD 4x20
Publicado por: RICHI777 en 26 de Agosto de 2009, 00:23:34
Hola, modifique el titulo del post para que si a otro le pasa lo mismo encuentre la solución. El tema es asi, como yo uso un PWM para controlar el contraste del display, habia leido que para mejorar ese aspecto era necesario inyectarle una tension negativa al pin del contraste, por eso el PWM. Pero todavia no lo habia hecho funcionar, cuando inicializaba el display lo setea para que sea 8 bits de interface con 1 linea y se ve que para eso los requeriemientos internos del contraste no eran tan determinantes podia ver linea 1 y 3 pero al ser de una linea las 2 y la 4 estaban deshabilitadas. Si cambiaba en la inicializacion a 2 lineas, no veia nada de nada, por eso supuse en su momento que directamente no funcionaba asi. Una vez que hice andar el PWM del contraste y probando con dos lineas note que realmente las cuatro lineas de dibjuaban bien, asi que regule por soft el contraste y todo funciono ok.
Espero que a otros les sirva.

Saludos !
Título: Re: Ayuda display LCD 4x20 muestra solamente linea 1 y 3
Publicado por: BlueWind en 01 de Septiembre de 2009, 01:12:05
 :(  Hola compañeros:

Soy nuevo en el foro y tengo el mismo problema que RICHI777 tenía. Yo estoy usando un JHD-204ASTNLED. Escribo y hago de todo con la 1ra y 3ra líneas pero no hay forma humana de escribir en la 2da y 4ta líneas. Cuando programo el display para que asimile 2 líneas no se ve nada - como le sucedía a él. En mi caso el pin R/W está conectado a tierra todo el tiempo, porque no leo nunca del LCD, solamente escribo. La secuencia de inicialización la saqué de los LCD de 2x16 para 8 bits y me funcionó, la hice en MikroC. Yo tengo  conectado en el pin 3 del LCD el wipe de un trimpot de 20K para regular contraste. Tal vez mi problema se resuelva con el truco del PWM?. No parece ser la inicialización del LCD, porque la líneas 1 y 3 funcionan de maravillas, tampoco parece problema de conexiones eléctricas.
Si me pasan los detalles de cómo se hace para regular contraste con PWM se los agradecería, porque ya he probado muchas cosas y no me resultan.
Les doy gracias de antemano por cualquier ayuda adicional.
 :mrgreen:
Título: Re: Ayuda display LCD 4x20 muestra solamente linea 1 y 3
Publicado por: MGLSOFT en 01 de Septiembre de 2009, 08:13:53
Estas completamente seguro que las direcciones de inicio de linea son las que realmente deberías utilizar, segun la hoja de datos??? :shock: :shock:
Título: Re: Ayuda display LCD 4x20 muestra solamente linea 1 y 3
Publicado por: RICHI777 en 01 de Septiembre de 2009, 13:37:24
Hola, para el PWM use este circuito, la pata del C9 es la recibe la señal PWM del micro, la union entre R2 y C10 es la que va conectada al contratse del display. El circuito trabaja a una frecuencia del PWM de aproximademante 1 a 3Khz y es simplemente un inversor.  En la señal del contraste obtengo aprox -1 V.

(http://www.idivimage.com/out.php/i6413_PWM.PNG)

Saludos !
Título: Re: Ayuda display LCD 4x20 muestra solamente linea 1 y 3
Publicado por: BlueWind en 01 de Septiembre de 2009, 14:54:53
Hola compañeros,
 :-/ :-/ :-/
Ya encontré dónde estaba el problema que no me dajaba ver la línea 2 y 4.
 Es increíble que la hoja de datos diga que el tiempo de procesamiento de un comando de 39 microsegundos y uno le tenga que dar 1000 microsegundos para que funcione.

Lo que hice fue aumentar el tiempo del pulso ENABLE a 2 milisegundos en lugar de 1 como se recomienda y a todos los comandos de inicialización les subí hasta 1 milisegundo de retardo. El tiempo de estabilización de la alimenación lo subía a 30 milisegundos y solamente así funcionó.
Me di cuenta de esto, porque en una de esas veces que reinicié al micro, dejé el botón de reset oprimido por unos segundos y vi que se marcaban muy debilmente los digitos de todas las filas, entonces pensé que el LCD no había entrado el el modo de dos líneas completamente y al aumentar los tiempos de inicialización respondió.

Lo del PWM se me hace interesante, lo voy a probar más adelante.
Gracias
Seguimos en contacto. :mrgreen:
Título: Re: Ayuda display LCD 4x20 muestra solamente linea 1 y 3
Publicado por: RICHI777 en 01 de Septiembre de 2009, 14:58:25
Buenisimo ! si tenes la posibilidad de checkear el Busy Flag hacelo, de esta manera te independizas de los delay hardcodeados.

Saludos !