LCD gráfico de 84×48 píxeles

Uno de los LCDs gráficos más populares por sus prestaciones y bajo precio, tiene una resolución de 84×48 píxeles que dan para representar gráficos y hasta 5 filas de caracteres alfanuméricos, tiene iluminación por leds y comunicación por SPI. Es la misma pantalla que montaban modelos de Nokia como el 5110 y el 3310.

lcd grafico de 84x48 pixeles para Arduino

lcd gráfico

Cuando pensamos en una pantalla LCD para nuestro proyecto siempre nos fijamos primero en las pantallas LCD de 16 columnas y 2 líneas que se comanta con la librería LiquidCrystal, pero estas tienen el gran inconveniente de necesitar de un mínimo de 6 pines para su control. Otra opción son las pantallas LCD controladas por serie o I2C, pero en estas el precio aumenta sensiblemente. La opción intermedia es esta pantalla gráfica LCD que se controla con 4 pines y que resulta muy económica.

Esta mini-board incluye un controlador PCD8544 que es el que se encarga de toda la gestión de los 84×48 píxeles de la pantalla. La comunicación con el controlador se hace por SPI, así que los más valientes pueden buscar el datasheet del PCD8544 y comunicarse con el directamente, el resto de seres humanos recurriremos a las librerías que en su día desarrollaron en Adafruit para controlar esta pantalla.

Lo primero que hay que tener en cuenta para conectar la pantalla a nuestro Arduino es que esta pantalla trabaja 3.3v y no a los 5v que funciona nuestro Arduino, por lo que será necesario adaptar los voltajes de salida de Arduino a los voltajes de entrada de la pantalla. Esto se puede hacer con convertidores de niveles (la forma más correcta), pero como la comunicación entre Arduino y la pantalla va a ser unidireccional nos podemos apañar con resistencias… que es lo que vamos a hacer en este tutorial.

LCD grafico Arduino

Conexiones del LCD

Vamos con las conexiones:

El pin VCC es el de alimentación, lo conectaremos al pin de 3.3v de Arduino.

GND de la pantalla al GND de Arduino.

SCE ó CS (Chip Select), también conocido como SS (Slave Select) en comunicación SPI, debe activarse para indicarle al dispositivo que se le van a enviar datos. Para reducir la corriente que le llega desde Arduino lo conectamos a través de una resistencia de 2KOhms.

RST (reset), no es necesario, podemos conectarlo al pin de reset de nuestro Arduino y nos ahorramos un pin.

D/C (Data / Command select).

DN (MOSI) o DIN es la entrada de datos de la pantalla (MOSI Master Out Slave IN).

SCLK, pin por el que Arduino manda la señal de reloj que rige la comunicación.

LED, el pin por el que podemos encender los LEDs de la iluminación de la pantalla. Hay que tener en cuenta que son 4 LEDs en paralelo y que consumen un total de 80mA, por lo que para controlarlos desde un pin digital lo tendremos que hacer a través de un transistor (cada salida digital soporta un máximo de 50mA).

Para reducir el voltaje que llega a los pines RST, D/C, DN y SCLK he utilizado resistencias de 10KOhms y para el pin SCE una resistencia de 2KOhm. Y el montaje queda así:

lcd arduino

LCD conectado a Arduino

Ahora que ya lo tenemos todo conectado vamos a pasar al IDE de Arduino. Primero nos bajamos la librería PCD8544 de Adafruit y la Librería GFX, también de Adafruit, y las instalamos por el procedimiento habitual (esto es descomprimiéndolas y guardándolas en la carpeta Libraries). Abrimos el Arduino IDE y en Ejemplos  ya nos aparece PCD8544LCD y dentro el sketch pcdtest.

En la línea 27 del Sketch aparecen las asignaciones de pines de Arduino a la comunicación SPI con la pantalla, tal cual están no funcionará por que yo he utilizado un orden diferente. Entonces en la línea que aparece:

1
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

La cambiaremos para que quede así (comentario / chuleta incluido):

1
2
// Adafruit_PCD8544(SCLK, DIN, D/C, CS, RST);
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 7, 6);

Y ya podemos subir el código de ejemplo y ver como en nuestra pantalla se despliega toda una demostración de sus capacidades gráficas y alfanuméricas.

Estudiando el código de ejemplo a fondo encontramos todos los métodos a emplear con la pantalla, que son:

begin() inicializa la pantalla.

setContrast(int contraste) establece el contraste, en el ejemplo está a 50.

display() muestra el logo por defecto. Tal como viene la librería muestra el logo de Adafruit, como se ve en las fotos a mi me sale el logo de Ardumanía (como lo he hecho será un tema para otro tutorial).

clearDisplay() borra la pantalla.

setPixel(int x,int y, color) dibuja un único pixel.

drawline(int x0, int y0, int x1, int y1, color) dibuja una línea de las coordenadas (x1, y1) a las coordenadas (x2, y2).

drawrect(int x, int y, int ancho, int alto, color) dibuja un rectángulo partiendo desde el punto (x, y) con el ancho y alto que le especifiquemos.

fillrect(int x, int y, int ancho, int alto, int color) dibuja un rectángulo sólido partiendo desde el punto (x, y) con el ancho y alto que le especifiquemos.

drawcircle(int x, int y, int radio, color) dibuja una circunferencia con el centro en (x, y) y del radio especificado.

fillcircle(int x, int y, int radio, color) dibuja una circunferencia solida con el centro en (x, y) y del radio especificado.

Los 6 métodos anteriores admiten el parámetro color, el cual puede ser WHITE o BLACK.

setCursor(int x, int y) posiciona el cursor en la coordenada (x, y) para escribir texto a continuación.

print(“Ardumania “) escribe el texto entre las comillas. El método print() admite los mismos parámetros de entrada que estamos acostumbrados a utilizar con el método print() de la clase Serial

println(“mola”) igual que el print() pero añadiendo un retorno de carro al final… vaya, igual que el println() que conocemos de la clase Serial.

drawbitmap(int x, int y, bitmap, int ancho, int alto, color) a partir de la coordenada (x, y) dibuja un mapa de bits guardado en formato hexadecimal en el array bitmap del ancho y alto especificados. En el código de ejemplo, tras los defines hay podéis ver como es el array hexadecimal.

Los más observadores se habrán dado cuenta de que en las fotos de este tuto aparece el logo de Ardumania (algo mal hecho, cosa de las prisas) en la pantalla y si ejecutáis el código de ejemplo el logo que aparece es el de Adafruit. Es que yo modifiqué la librería y cambié un logo por el otro mientras practicaba el enrevesado arte de convertir un gráfico a formato hexadecimal. Ya me imagino que todos querréis saber como se hace, pero es que este tutorial ya me está quedando largo como para meterme en el tema de los gráficos, por eso lo dejo para un próximo tutorial.

 

Nota: si he cometido algún error agradecería que me lo dejéis en los comentarios.

6 Comments

  1. Hola, dice que el pin LED hay que conectarlo por medio de un transistor, pero en la imagen que muestra parece estar conectado directamente. Es posible hacerlo asi entonces ?

  2. Otra consulta, como sería la conexion con el ARDUINO LEONARDO ?

    • Pues en principio conectarla a una Leonardo sería igual, por que en el ejemplo no se utilizan los pines SPI nativos de la UNO que en la Leonardo no coinciden.

  3. Hola.
    Tengo esta pantalla (de la ardutienda ;) ) y la he estado probando.
    El tutorial me ha venido de maravilla.
    Solo un apunte sobre algo que me ha ocurrido.
    Al cargar el ejemplo de la pantalla, me ha dado un monton de errores en la consola, mirando mirando, he encontrado que la librería Robot_Control tiene dentro el fichero Adafruit_GFX.cpp, por lo que hace “interferencias” al compilar cuando se mete esta librería repetida.
    Mi solución ha sido sacar la de Robot_Control y funciona perfecto.
    Gracias

  4. Hola.
    Me ha sido de gran ayuda el tutorial. Muchas gracias.

    Solo tengo un par de comentarios, que supongo que serán por actualizaciones tanto del IDE de Arduino como por algún cambio en la fabricación de la pantalla.

    El primero, es que al meter la librería GFX, da un error al compilar el ejemplo, porque hay otra librería, la del Robot-Control (creo que fue esa), que dentro tiene también la librería GFX. Mi solución, ha sido sacar esa otra de la carpeta y así ha compilado sin problemas.

    El segundo comentario, es que por lo que he visto, la alimentación de los leds es negativa, me refiero a que en la patilla “Leds” hay que meterle tensión negativa para que se enciendan. En la pantalla del tutorial, no se como seria. La mía, que compre hace unos días, por supuesto en la Ardutienda :) , funciona así.

    Saludos y muchas gracias.

Deja un comentario

Required fields are marked *.