Displays LCD

Estas placas tienen instalado un display LCD para presentarnos mensajes y que podamos leerlos sin problemas.

Las características comunes son:
- Todas llevan un display que puede mostar caracteres alfanuméricos preprogramados o caracteres programados por nosotros (máximo 8 en la mayoría de los displays)
- Los caracteres son de 7x5 pixeles
- Se alimentan sin problemas a 5V

Las características particulares son:
- Pueden tener diferentes tamaños. Los más comunes son 16x2 y 20x4 (columnas x filas)
- Pueden tener o no retroiluminación para ver mejor los mensajes. Además puede variar de color, e incluso ser variable a nuestro gusto
- Suelen tener un ajuste de contraste para corregir el ángulo de visión.
- Hay diferentes tipos de interface de comunicación con el Arduino. Los más comunes son:
* Interface paralelo de 8 o 4 bits. Suele constar de 16 pines que mas tarde veremos su función específica.
* Interface serie o i2C. Suele tener 4 pines y usa el protocolo implementado en todos los Arduinos i2C para comunicarse con él.

CARACTERISTICAS

Vamos a ver primero las características de los display con interface paralelo 1602 y 2004, ya que son casi idénticas a excepción del número de caracteres a visualizar en cada uno de ellos.

LCD 1602
Esta placa tiene un display de 2 filas de 16 caracteres cada una de color blanco. Dispone de un interface paralelo de 16 pines, incluyendo retroiluminación azul.
Tiene un juego de 192 caracteres más ocho personalizables. Los 192 están grabados en una memoria no volátil del tipo ROM (Read Only Memory) y siempre estarán disponibles aunque apagemos el dispositivo. Los 8 caracteres programables se almacenarán en una memoria volátil tipo RAM (Random Access Memory) que nos obligará a cargarlos cada vez que encendamos el dispositivo, ya que al perder la alimentación se borrarán.

En la imagen de la izquierda podemos ver el display totalmente encendido con todos los caracteres ocupados. En la imagen tenemos una placa con retroiluminación verde y los caracteres negros.
Recordemos que a la hora de señalar una celda del display lo haremos nombrando primero la columna y luego la fila. De este modo el caracter mas a la izquierda y arriba sería el (0,0) [columna 0 y fila 0] y el caracter mas a la derecha y abajo sería el (15,1) [columna 15 y fila 1]. Ojo con esta nomenclatura, las filas y las columnas empiezan por cero, por lo que si tenemos 2 filas, serán la 0 y la 1, e igualmente si tenemos 16 columnas, serán de la 0 a la 15. Por ejemplo, para ecribir en la posición del símbolo igual en la fila de abajo de la imagen, tendríamos que poner la columna 13 y la fila 1. Hay que estar pendiente de esta nomenclatura para no cometer errores.

TABLA CON LAS POSICIONES DE LAS CELDAS

0,0 1,0 2,0 3,0 4,0 5,0 6,0 7,0 8,0 9,0 10,0 11,0 12,0 13,0 14,0 15,0
0,1 1,1 2,1 3,1 4,1 5,1 6,1 7,1 8,1 9,1 10,1 11,1 12,1 13,1 14,1 15,1


LCD 2004
Esta placa tiene un display de 4 filas de 20 caracteres cada una de color blanco. Dispone de un interface paralelo de 16 pines, incluyendo retroiluminación azul.
Tiene un juego de 192 caracteres más ocho personalizables. Los 192 están grabados en una memoria no volátil del tipo ROM (Read Only Memory) y siempre estarán disponibles aunque apagemos el dispositivo. Los 8 caracteres programables se almacenarán en una memoria volátil tipo RAM (Random Access Memory) que nos obligará a cargarlos cada vez que encendamos el dispositivo, ya que al perder la alimentación se borrarán.




En la imagen de la izquierda podemos ver el display totalmente encendido con todos los caracteres ocupados. En la imagen tenemos una placa con retroiluminación verde y los caracteres negros.
Recordemos que a la hora de señalar una celda del display lo haremos nombrando primero la columna y luego la fila. De este modo el caracter mas a la izquierda y arriba sería el (0,0) [columna 0 y fila 0] y el caracter mas a la derecha y abajo sería el (19,3) [columna 19 y fila 3]. Ojo con esta nomenclatura, las filas y las columnas empiezan por cero, por lo que si tenemos 4 filas, serán de la 0 a la 3, e igualmente si tenemos 20 columnas, serán de la 0 a la 19. Por ejemplo, para ecribir en la posición del símbolo S mayúscula en el display de la imagen, tendríamos que poner la columna 3 y la fila 2. Hay que estar pendiente de esta nomenclatura para no cometer errores.

TABLA CON LAS POSICIONES DE LAS CELDAS

0,0 1,0 2,0 3,0 4,0 5,0 6,0 7,0 8,0 9,0 10,0 11,0 12,0 13,0 14,0 15,0 16,0 17,0 18,0 19,0
0,1 1,1 2,1 3,1 4,1 5,1 6,1 7,1 8,1 9,1 10,1 11,1 12,1 13,1 14,1 15,1 16,1 17,1 18,1 19,1
0,2 1,2 2,2 3,2 4,2 5,2 6,2 7,2 8,2 9,2 10,2 11,2 12,2 13,2 14,2 15,2 16,2 17,2 18,2 19,2
0,3 1,3 2,3 3,3 4,3 5,3 6,3 7,3 8,3 9,3 10,3 11,3 12,3 13,3 14,3 15,3 16,3 17,3 18,3 19,3
JUEGO DE CARACTERES


PINEADO

El pineado de estas placas es:

- VSS : Este pin es la entrada de alimentación negativa de la placa. Solo alimenta a la electrónica de control y al display (zona de encendido de las celdas), no alimentando a la iluminación trasera azul.

- VDD : Este pin es la entrada de alimentación positiva de la placa. Solo alimenta a la electrónica de control y al display (zona de encendido de las celdas), no alimentando a la iluminación trasera azul.

- V0 : Este pin controla el contraste de la pantalla LCD. Debe recibir un voltaje entre VSS y VDD, normalmente entre 0 y 5V. Por ejemplo podemos poner un potenciómetro de 10KΩ en modo divisor de tensión y conectarlo a este pin, de este modo tendríamos la posibilidad de ajustar el contraste a nuestro gusto y visualizar correctamente los mensajes en el display LCD.

- RS : Este pin es el Chip Select y va conectado a la placa Arduino e informaremos a la librería de donde está conectado. Básicamente cuando está activa significa que el bus de datos está activo y es para esta placa.

- RW : Este pin es el Read/Write. Es nuestros montajes por lo general se conectará a masa ya dejarlo activo en modo escritura, ya que solo vamos a enviar datos desde el Arduino a la placa display LCD. Si quisiéramos leer los datos de la placa tendríamos que gestionar este pin desde el Arduino.

- E : Este pin es el Enable y va conectado a la placa Arduino e informaremos a la librería de donde está conectado. Básicamente cuando está activa significa que la placa esta activa y es programable.

- D0 a D7 : Estos pines son el bus de datos por el que se comunica el Arduino con la placa. Tenemos la opción de usar todos los pines o solo los 4 más significativos (D4 a D7). En nuestro caso usaremos la opción de solo 4 bits de datos, y aunque la comunicación con la placa display LCD será más lenta, no notaremos diferencia en estos montajes.

- A : Este pin es la entrada de alimentación positiva de la retroiluminación del LCD. Normalmente se conectará a 5V, pero tenemos la opción de alimentar con menos voltaje y así controlar la retroiluminación.

- K : Este pin es la entrada de alimentación negativa de la retroiluminación del LCD. Normalmente se conectará a masa.

LCD 1602 con bus i2C
Esta placa tiene un display de 2 filas de 16 caracteres cada una de color negro. Dispone de un interface i2C, e incluye retroiluminación variable por software.
Tiene un juego de 192 caracteres más ocho personalizables. Los 192 están grabados en una memoria no volátil del tipo ROM (Read Only Memory) y siempre estarán disponibles aunque apagemos el dispositivo. Los 8 caracteres programables se almacenarán en una memoria volátil tipo RAM (Random Access Memory) que nos obligará a cargarlos cada vez que encendamos el dispositivo, ya que al perder la alimentación se borrarán.


En la imagen de la izquierda podemos ver el display 1602 con interface paralelo totalmente encendido con todos los caracteres ocupados y que es igual que el i2C en cuestión de posición de los caracteres.
Recordemos que a la hora de señalar una celda del display lo haremos nombrando primero la columna y luego la fila. De este modo el caracter mas a la izquierda y arriba sería el (0,0) [columna 0 y fila 0] y el caracter mas a la derecha y abajo sería el (15,1) [columna 15 y fila 1]. Ojo con esta nomenclatura, las filas y las columnas empiezan por cero, por lo que si tenemos 2 filas, serán la 0 y la 1, e igualmente si tenemos 16 columnas, serán de la 0 a la 15. Por ejemplo, para ecribir en la posición del símbolo igual en la fila de abajo de la imagen, tendríamos que poner la columna 13 y la fila 1. Hay que estar pendiente de esta nomenclatura para no cometer errores.

TABLA CON LAS POSICIONES DE LAS CELDAS

0,0 1,0 2,0 3,0 4,0 5,0 6,0 7,0 8,0 9,0 10,0 11,0 12,0 13,0 14,0 15,0
0,1 1,1 2,1 3,1 4,1 5,1 6,1 7,1 8,1 9,1 10,1 11,1 12,1 13,1 14,1 15,1


PROBEMOS LOS LCD CON UN ARDUINO MEGA

Ahora viene lo más importante. Vamos a probar nuestros LCD, los dos con interface paralelo y el que tiene i2C con un Arduino MEGA.
Las encenderemos simultaneamente y usaremos las dos librerías necesarias para su funcionamiento.

NECESITAREMOS

Un Arduino MEGA 2560

Placa protoboard grande

Soporte para Arduino MEGA de AFPT

Cableado macho-macho o hilo rígido que entre en la protoboard

Display 1602 con interface paralelo

Display 1602 con interface serie

Display 2004 con interface paralelo

Potenciómetros de 10K



ESQUEMA

Este esquema lo podemos dividir en tres partes, para cada uno de los displays:

La parte del display 1602 que tenemos en la imagen de la derecha y hemos llamado LCD1, consta de las siguientes conexiones:
- Pin 1 (VSS): Conectado a masa
- Pin 2 (VDD): Conectado a +5V
- Pin 3 (V0): Llevamos aquí una tensión entre 0 y 5V mediante un potenciómetro de 10K montado como divisor de tensión
- Pin 4 (RS): Conectado al pin 2 del Arduino MEGA
- Pin 5 (R/W): Conectado a masa
- Pin 6 (E): Conectado al pin 3 del Arduino MEGA
- Pin 7 (D0): Sin conectar
- Pin 8 (D1): Sin conectar
- Pin 9 (D2): Sin conectar
- Pin 10 (D3): Sin conectar
- Pin 11 (D4): Conectado al pin 22 del Arduino MEGA
- Pin 12 (D5): Conectado al pin 24 del Arduino MEGA
- Pin 13 (D6): Conectado al pin 26 del Arduino MEGA
- Pin 14 (D7): Conectado al pin 28 del Arduino MEGA
- Pin 15 (A): Conectado a +5V
- Pin 16 (K): Conectado a masa

Una vez conectado el LCD1 al Arduino, para configurarlo y programarlo usaremos la librería "liquidCrystal". Esta librería viene incluida en el IDE y no tenemos que hacer nada para usarla, simplemente declararla al principio del Sketch y ya estará disponible.

La parte del display 2004 que tenemos en la imagen de la derecha y hemos llamado LCD2, consta de las siguientes conexiones:
- Pin 1 (VSS): Conectado a masa
- Pin 2 (VDD): Conectado a +5V
- Pin 3 (V0): Llevamos aquí una tensión entre 0 y 5V mediante un potenciómetro de 10K montado como divisor de tensión
- Pin 4 (RS): Conectado al pin 18 del Arduino MEGA
- Pin 5 (R/W): Conectado a masa
- Pin 6 (E): Conectado al pin 19 del Arduino MEGA
- Pin 7 (D0): Sin conectar
- Pin 8 (D1): Sin conectar
- Pin 9 (D2): Sin conectar
- Pin 10 (D3): Sin conectar
- Pin 11 (D4): Conectado al pin 34 del Arduino MEGA
- Pin 12 (D5): Conectado al pin 36 del Arduino MEGA
- Pin 13 (D6): Conectado al pin 38 del Arduino MEGA
- Pin 14 (D7): Conectado al pin 40 del Arduino MEGA
- Pin 15 (A): Conectado a +5V
- Pin 16 (K): Conectado a masa

Una vez conectado el LCD2 al Arduino, para configurarlo y programarlo usaremos la librería "liquidCrystal". Esta librería viene incluida en el IDE y no tenemos que hacer nada para usarla, simplemente declararla al principio del Sketch y ya estará disponible.



La parte del display 1602 con conexión serie i2C que tenemos en la imagen de la derecha y hemos llamado LCD3, consta de las siguientes conexiones:
- Pin GND: Conectado a masa
- Pin VCC: Conectado a +5V
- Pin SDA: Conectado al pin 20 del Arduino MEGA, que es su salida SDA del bus i2C
- Pin SCL: Conectado al pin 21 del Arduino MEGA, que es su salida SDA del bus i2C

Una vez conectado el LCD3 al Arduino, para configurarlo y programarlo usaremos la librería "LCD RGB Growe i2C". Esta librería la proporciona el fabricante del LCD, en este caso Grove. Aunque funcionaría con la mayoría de las librerías i2C para displays que hay en el mercado.

PROGRAMACIÓN

¿Qué vamos a programar?, pues una visualización de un contador en cada LCD con diferentes velocidades. También mandaremos a cada LCD un mensaje de "hola, mundo!", el número de LCD que le corresponde y las iniciales de la página "AFPT". Como extra al LCD2, al tener más filas de visionado mandaremos el nombre de la página completo "Arduino Facil Para Todos" en dos filas.

En el LCD1 (1602 paralalo) se visualizá el tiempo en centésimas de segundo



En el LCD2 (2004 paralalo) se visualizá el tiempo en décimas de segundo



En el LCD3 (1602 i2C) se visualizá el tiempo en segundos


Como hemos comentado, necesitaremos la librería "LCD RGB Growe i2C". Más adelante explicaré como instalarla en nuestro IDE.

A continuación tenemos el código fuente del Sketch terminado para consultarlo. Se puede escribir copiándolo o descargarlo desde aquí

CÓDIGO ARDUINO
/*
 * AFPT - Arduino Fácil Para Todos
 * 
 * Prueba y configuración de 3 displays LCD
 * 
 * Display 1: Pantalla de 16x2 (16 columnas y 2 filas) con iluminación azul e interfaz paralelo
 * 
 * Display 2: Pantalla de 20x4 (20 columnas y 4 filas) con iluminación azul e interfaz paralelo
 * 
 * Display 3: Pantalla de 16x2 (16 columnas y 2 filas) con iluminación RGB configurable por software e interfaz i2C
 * 
 * Display_LCD.ino
 * 
 * www.fantasystudios.es/arduino
 * 
 * Creado el 15 de Octubre de 2020
 * Por Manuel Peláez
 * 
 */

 
// Librerias necesarias
#include <LiquidCrystal.h>    //necesaria para los displays 1 y 2

#include <Wire.h>             //necesaria para el display 3
#include "rgb_lcd.h"          //necesaria para el display 3


//Definimos las I/O de los displays y los inicializamos con nombres diferentes

//Display 1 (16x2) se llamará lcd_1
const int LCD1_rs = 2, LCD1_en = 3, LCD1_d4 = 22, LCD1_d5 = 24, LCD1_d6 = 26, LCD1_d7 = 28;
LiquidCrystal lcd_1(LCD1_rs, LCD1_en, LCD1_d4, LCD1_d5, LCD1_d6, LCD1_d7);

//Display 2 (20x4) se llamará lcd_2
const int LCD2_rs = 18, LCD2_en = 19, LCD2_d4 = 34, LCD2_d5 = 36, LCD2_d6 = 38, LCD2_d7 = 40;
LiquidCrystal lcd_2(LCD2_rs, LCD2_en, LCD2_d4, LCD2_d5, LCD2_d6, LCD2_d7);

//Display 3 (16x2) se llamará lcd_3
//los pines SDA y SCL se conectan al arduino en sus pines por defecto 20 y 21 respectivamente
rgb_lcd lcd_3;
const int lcd3_R = 255, lcd3_G = 127, lcd3_B = 0; //definimos el color como naranja en tres constantes


void setup() {
  
  //Configuramos el lcd_1 (16x2)
  lcd_1.begin(16, 2);                       //informamos del tamaño
  lcd_1.print("hola, mundo!   1");          //mostramos un mensaje desde la primera columna, primera fila por defecto
  lcd_1.setCursor(12,1);                    //movemos el cursor a 13ª columna y 2ª fila (recordar empezamos en 0)
  lcd_1.print("AFPT");                      //mostramos un mensaje en esa posición

  
  //Configuramos el lcd_2 (20x4)
  lcd_2.begin(20, 4);                       //informamos del tamaño
  lcd_2.print("hola, mundo!       2");      //mostramos un mensaje desde la primera columna, primera fila por defecto
  lcd_2.setCursor(16,1);                    //movemos el cursor a 17ª columna y 2ª fila (recordar empezamos en 0)
  lcd_2.print("AFPT");                      //mostramos un mensaje en esa posición
  lcd_2.setCursor(0,2);                     //movemos el cursor a 1ª columna y 3ª fila
  lcd_2.print("Arduino Facil");             //mostramos un mensaje en esa posición
  lcd_2.setCursor(0,3);                     //movemos el cursor a 1ª columna y 4ª fila
  lcd_2.print("Para Todos");                //mostramos un mensaje en esa posición


  //Configuramos el lcd_3 (16x2) por i2C
  lcd_3.begin(16,2);                        //informamos del tamaño
  lcd_3.setRGB(lcd3_R, lcd3_G, lcd3_B);     //mandamos la información del color del fondo
  lcd_3.print("hola, mundo!   3");          //mostramos un mensaje desde la primera columna, primera fila por defecto
  lcd_3.setCursor(12,1);                    //movemos el cursor a 13ª columna y 2ª fila (recordar empezamos en 0)
  lcd_3.print("AFPT");                      //mostramos un mensaje en esa posición
}


void loop() {
  //Vamos a monstrar un valor de tiempo desde que se reseteo la placa Arduino Mega, diferente en cada display
  
  //Display 1
  lcd_1.setCursor(0, 1);                    //movemos el cursor a 1ª columna y 2ª fila
  lcd_1.print(millis() / 10);               //mostramos el tiempo desde el último reset en centesimas de segundo


  //Display 2
  lcd_2.setCursor(0, 1);                    //movemos el cursor a 1ª columna y 2ª fila
  lcd_2.print(millis() / 100);              //mostramos el tiempo desde el último reset en decimas de segundo


  //Display 3
  lcd_3.setCursor(0,1);                     //movemos el cursor a 1ª columna y 2ª fila
  lcd_3.print(millis()/1000);               //mostramos el tiempo desde el último reset en segundos

}

CÓDIGO ARDUINO

Ahora vamos a ver como instalar la librería LCD RGB Growe i2C que está en formato ZIP y es directamente instalable.
Vamos a ver la instalación de librerías en modo ZIP en MAC OS Catalina, en Windows 10 y en Linux Ubuntu 20.04. Aunque la instalación es muy similar en los tres sistemas, los veremos por separado.


INSTALACIÓN EN MAC OS CATALINA

Pulsamos en el menú la opción "Programa", e "Incluir librería". Se nos abre un desplagable y elegimos la opción "Añadir biblioteca .ZIP..."

Se nos abre una ventana nueva para que localicemos en nuestro disco la librería que queremos instalar

La buscamos y una vez seleccionada pulsamos el botón "Selecionar"

Si todo a ido bien en el desplegable aparecerá la librería que acabamos de instalar "Grove - LCD RGB Backlight"


INSTALACIÓN EN WINDOWS 10

Pulsamos en el menú la opción "Programa", e "Incluir librería". Se nos abre un desplagable y elegimos la opción "Añadir biblioteca .ZIP..."

Se nos abre una ventana nueva para que localicemos en nuestro disco la librería que queremos instalar

La buscamos y una vez seleccionada pulsamos el botón "Abrir"

Si todo a ido bien en el desplegable aparecerá la librería que acabamos de instalar "Grove - LCD RGB Backlight"


INSTALACIÓN EN UBUNTU 20.04

Pulsamos en el menú la opción "Programa", y "Incluir librería". Se nos abre un desplagable y elegimos la opción "Añadir biblioteca .ZIP..."

Se nos abre una ventana nueva para que localicemos en nuestro disco la librería que queremos instalar

La buscamos y una vez seleccionada pulsamos el botón "Aceptar"

Si todo a ido bien en el desplegable aparecerá la librería que acabamos de instalar "Grove - LCD RGB Backlight"


Ya podemos escribir o cargar el Sketch para realizar nuestra prueba de los tres displays. En el código esta explicada cada linea o bloque de código.

Una vez enviemos el programa a la placa Arduino Mega, se encenderán los displays comenzando a mostrarse el tiempo desde el encendido en una unidad de tiempo diferente en cada display.

A continuación tenemos un video con todo el proceso completo.