Pantalla gráfica con LCD 3310.

INTRODUCCIÓN.

Este es el segundo artículo de la serie que se ocupa de las pantallas LCD basadas en el controlador PCD8544. Le recomiendo que lea aquí el anterior artículo, donde se describe abundante información, relacionada con estas pantallas o display de cristal líquido.

Las pantallas monocromáticas LCD están siendo aplicadas actualmente con mayor frecuencia, esto probablemente es debido a dos razones; una es, su bajo costo y la otra tal vez, a un mayor conocimiento de su controlador PCD8544 de 84×48 píxeles, dicho controlador se encarga del suministro, el ajuste de tensiones y la comunicación fácil con la pantalla vía Serial. Esto nos evita un montón de componentes y trabajos extra que, requeriría sin el controlador. Con el controlador de pantalla, podemos manejar sus más de 4.000 píxeles.

Un poco más de detalle, 84 píxeles dividido por 6 píxeles a lo ancho, de cada carácter (5 píxeles del carácter + 1 píxel de espacio, son 6 píxeles), nos proporciona 14 caracteres, esto por cada renglón. Claro, la altura de cada carácter es de 8 píxeles, estos realmente son 7 para el carácter mas 1 de espacio, lo que nos proporciona 6 filas, líneas de escritura o renglones.

caracterconst
Fig. 1

Actualmente, tenemos una extensa biblioteca que, hace fácil hacer que muestren la impresión de texto o gráficos en un instante. Esta pantalla LCD es un dispositivo de 3,3 V, esto significa que no se debe conectar directamente a un microcontrolador de 5V como el Arduino o el PIC. Sin embargo, puede se conectar directamente a dispositivos como el Arduino Pro y Pro Mini (3.3V). Esta pantalla, según las hojas del fabricante, el controlador permite al LCD comunicarse vía SPI (bus Serial Peripherial Interfase), el cual es un protocolo muy común, para la comunicación serie de datos entre dispositivos.

foto009p nokia3310-lcdp
Fig. 2

En las imágenes anteriores, se muestran vistas de la pantalla más comúnmente utilizada por los principiantes que, con un poco de pericia, han recuperado, su pantalla de algún viejo nokia3310, un nokia5110 o similar. En la imagen de abajo, se pueden ver las soldaduras de los contactos de la pantalla con unos cables y un terminal de 8 pines en línea.

nokia3311_14p
Fig. 3

Para evitar un deterioro relativamente prematuro de estas pantallas, se deben manejar con tensiones bajas, según consta en las hojas del fabricante Philips, las pantallas controladas por el PCD8544, trabajan de los 2’7V hasta los 3’3V, de manera que, sus E/S deben ser ajustados a este nivel de tensión.

Es cierto que pueden funcionar hasta los 4’5V, sin embargo, su vida se verá drásticamente reducida a unos pocos días en el mejor de los casos, personalmente aconsejo que se tenga muy en consideración estas normas. Se trata de un sencillo sistema divisor de tensión realizado con resistencias, como se puede apreciar en el circuito que se adjunta a continuación. Para estos casos y como costumbre, recomiendo utilizar un circuito similar al que se muestra aquí:

circuito3310
Fig. 4

Esta información, es la más común y se puede encontrar en cierto modo, en la mayoría de artículos sobre el tema. Además, una vez más, después de haber conectado correctamente el dispositivo, nos encontramos con el código que, podemos lograr de alguna forma en los propios artículos que, proliferan en la red. Para empezar, tenemos que proveernos de las librerías a descargar, y aquí está el primer paso para vernos en un galimatías de bibliotecas que en principio deberían servir para el mismo fin que es, controlar de forma correcta las PCD8544.

Otra cosa. Hemos dicho que el LCD funciona a 3,3 V así que, tal vez tengamos que utilizar un cambiador de nivel, para lo cual utilizaremos un chip que permita usar la pantalla, con un microcontrolador de 5V. En el caso de estar usando un microcontrolador 3.3V, se puede omitir el cambiador de nivel. El circuito cambiador será el CD4050 o HC4050, vea el esquema siguiente:

esquema_nivel_logico
Fig. 5

Sin embargo, el capítulo referente a las librerías es su punto algo conflictivo ya que, al no respetarse ciertas reglas, no existe un consenso y por tanto, un programa que hayamos realizado con unas librerías, quien lo quiera ejecutar, como no disponga de dichas librerías se convierte fracaso, ya que está tratando de hacer algo que no está cubierto por la biblioteca, es por lo tanto, un programa que no puede usar un principiante.

Entre las librerías que están circulando (ver Google, acerca del PCD8544), el principiante, realmente puede llegar a tener la sensación de estar perdido. Esto viene a colación, por la descentralización que, de alguna manera se pone de manifiesto con el tan pretendido software libre. Y digo yo, software libre si, aún así, considero contraproducente para la propia plataforma Arduino, la disparidad de criterios en cuanto a las bibliotecas para Arduino, pues si no se respetan unas bases, bueno sería poner unas reglas que sirvan de referencia.

Debo decir que me refiero concretamente a las librerías editadas para los PCD8544 y monocromos similares. Estas pantallas, disponen de su propio controlador de Philps, el mencionado PCD8544. El controlador de esta pantalla, no dispone de un mapa de caracteres y esto obliga a incluir dicho mapa de caracteres en cada programa, este hecho, lejos de ser un problema (nos permitirá en un futuro, cuando tengamos mayores conocimientos de él), crear nuestros propios caracteres, si lo consideramos necesario.

Es evidente que, las librerías disponibles en la web de Arduino, son librerías que sirven para un gran número de posibilidades. Algunos ejemplos de programas los podemos ver en Arduino, en pcd8544 o en Adafruit, estas son tres páginas con ejemplos de programas que utilizan sus propias librerías, si usted quiere saber a que me refiero, es muy simple, trate de ejecutar uno de los ejemplos con la librería del otro. ¡Es frustrante!

Si, ya se que, cada librería es para una cosa. Sin embargo, no estoy del todo de acuerdo. El cuerpo de la librería, debe ser el mismo y las rutinas deberían ser válidas para cualquier programa, no obstante, ese no es el caso. Hasta el extremo que en unas librerías, es necesario incluir en el programa el mapa de caracteres y en el otro no, por que ya viene en una librería adjunta (que acertadamente llaman ‘charset.cpp‘), lo que conlleva un código más compacto y a la hora de revisarlo, es mucho más manejable.

Alguna razón si tengo, no es una manía. Es muy fácil introducir un error en un programa cuando tienes que ‘picar‘ un extenso código y este es justamente el caso, si, siempre puedes hacer un copiado/pegado. A mí, me parece en cierto modo, injustificado este riesgo y siempre habrá quien diga que se puede hacer el adjunto a la librería, como ocurre en el segundo caso. Y digo yo, todo el mundo, no tiene tantos conocimientos a la hora de realizar esas aplicaciones, el principiante, ya tiene bastante trabajo y motivación, con crear sus propios códigos, como para que encima tenga que hacer su propia librería o archivo ‘.cpp‘ o similar, no estoy de acuerdo.

Por ese motivo pensé en realizar este artículo, tratando de ayudar a los que empiezan, así como, a todos los que decidan esta vía. Pero, vayamos paso a paso.

Una forma muy simple de comprender lo que se trata en este tutorial, es como siempre mediante ejemplos que muestren y mejoren nuestra experiencia sobre los elementos que manejamos habitualmente y que en muchas ocasiones damos por conocida su manera de operar.

Veamos como mostrar en nuestra pantalla PCD8544, un sencillo programa que muestre un simple saludo, creo que nos puede servir para exponer los pros y contras que observemos, no otra cosa. Por otra parte, el código tiene ‘tela’, no hay nada de código, se puede meter algún error sin querer, y la liamos. Ponte a buscar donde está el problema. Aunque la frase se refiere a otro aspecto, comprenderemos ahora, la necesidad de hacer un ‘código compacto’, estamos hablando de 272 líneas, para un simple saludo.

HOLA AMIGOS.

Este será el saludo que se mostrará.

En este código, encontramos además un pequeño ‘crash’ (si, como vidrio roto), pues no llena la totalidad de la pantalla y eso no queda muy profesional, verdad. Tendremos que indagar en la propia librería para ver si encontramos alguna posibilidad. Y ahora que comento la librería, bueno será que usted utilice estas librerías, si quiere ver como funciona. Ábralo, sin miedo y vea el código. Tranquilo, así, hay muchos códigos, y acaban funcionando.

ANALICEMOS UN POCO DE CÓDIGO.

En el primer paso se deben establecer las definiciones, en ellas diremos a Arduino que pines vamos a utilizar y a que corresponde cada uno. Esto no siempre es tan sencillo, pero a eso ya volveremos más adelante. Las cinco líneas de salidas de Arduino que vamos a utilizar para comunicarnos con la pantalla son las siguientes:

Personalmente, cuando se presenta una situación como la presente, tiendo a usar, siempre que pueda, las mismas líneas para todos los códigos, de modo que elimino un posible problema de comunicación bastante importante. Y, eso no es todo, siempre que pueda usted, copie y pegue, esta es una técnica que ahorra bastante tiempo y evita errores difíciles de encontrar, por supuesto, comente todo lo que pueda sus códigos, nunca me cansaré de repetirlo.

Estas pantallas, se deben inicializar, es una condición necesaria, mediante una rutina en la que asignamos los pines de la pantalla como pines de entrada, o sea, que la pantalla sólo recibe datos y en ningún caso envía dato alguno de respuesta. Por lo tanto, en Arduino le diremos que estos pines serán de salida (OUTPUT). Además, una condición especial es la referida al pin de RST (Reset), observe el código, y verá que necesita restablecer en cada inicialización, por ese motivo la orden; digitalWrite(PIN_RESET), primero va a bajo (LOW) y una fracción de segundo después, va a alto (HIGH).

Bueno, me he saltado el mapa de caracteres, eso se verá en su momento. Se puede ver la rutina ‘LcdClear(void)‘ con un bucle ‘for‘ que recorre toda la pantalla, encargada de limpiarla o eso es lo que debería hacer. Pero que ocurre, pruébelo. Lo que ocurre es que realmente, no ‘limpia’ toda la pantalla, deja bastante que desear. Me refiero a esta parte del código:

Por que ocurre esto, la rutina parece recorrer toda la pantalla. Eso, no es del todo cierto, así que, ‘le puse un poco de aceite y el candil, se iluminó’, me surgió la pregunta, por qué en la rutina se divide por 8, no sería mejor limpiar píxel a píxel. Y, de esta forma queda así:

Modifique su código, y compile de nuevo. Que ocurre ahora. ¡Aja! Ahora si limpia toda la pantalla y muestra el texto que habíamos codificado. Una rutina a tener en cuenta es la referente al posicionado X-Y del cursor, para el carácter que queremos escribir.

Estudie este código y analice como se genera el texto, como se indica su posición en cada punto de la zona visible. En el siguiente ejemplo, se puede apreciar unos cambios que pretenden mejorar las prestaciones de esta pequeña pantalla con su controlador. Este ejemplo, no requiere de una librería, digamos ‘especializada’, se trata de la librería estándar ‘stdlib.h’

LCD 3310 COMPLETA.

 En esta ocasión mostrará mejores posibilidades.

En la imagen que sigue, se aprecia el resultado de este segundo ejemplo, al que digamos he incorporado, una ‘función‘ especial, como es, una barra de proceso de carga, esto le puede dar un aspecto más profesional a nuestros proyectos. Con estos ejemplos se ha utilizado un código que se apoya en una librería estándar y por lo tanto no es problemático su uso en cualquier versión de Arduino.

foto0004p
Fig. 6

El primer paso es incluir las variables siguientes:

También, se deben añadir las rutinas pertenecientes a propósito de cómo posicionar y trazar la propia barra de progreso. Estas son las referidas rutinas.

Revise el código y trate de comprender que hace cada rutina, atrévase a realizar sus propios cambios y experimente, tenga temor a trastear, siempre podrá recuperar el código, en caso de problemas extremos. Y ahora, vea como se comportan esas adiciones que he comentado.

Puede ser que por falta de algún ‘plugin’, no pueda ver este corto vídeo, si es así, pruebe a descargar una copia, para visionarlo en su computadora.

Con la seguridad de que a usted, le ha funcionado bien, doy por terminado este tutorial de inicio en la aventura de las LCDs. En caso de tener alguna consulta que hacer, no dude en plantearla en el foro o haga un comentario

Exención de responsabilidad:

Este es un software y hardware experimental. Uselo bajo su propio riesgo. El software y hardware presentado en estas páginas aunque ha sido probado por el mantenedor/desarrollador de estas paginas, no se hace responsable bajo ninguna circunstancia por los daños de hardware o software, pérdida de datos o cualquier otro daño directo o indirecto, como resultado del uso de este software o hardware. Ni del mal uso que usted haga con él.

Si usted no está de acuerdo con estas condiciones, no podrá utilizar o distribuir más este software o utilizar cualquiera plantillas para piezas, para la construcción que aquí se presenta.

Esto es todo, por este simple tutorial.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.