APRENDER A USAR UN DISPLAY LCD

APRENDER A USAR UN DISPLAY LCD

head

(17/08/14)

En este tutorial aprenderemos a conectar un display LCD a Arduino y a cómo usarlo a través de la librería LiquidCrystal.

Material

-Arduino Uno Rev3

-Display LCD 16×2

-Potenciómetro 10k x2

 

Display LCD

Un display LCD (Liquid Crystal Display) es un display alfanumérico de matriz de puntos (dot-matrix) que sirve para mostrar mensajes a través de caracteres como letras, números o símbolos. La placa del display viene equipado con un microcontrolador (normalmente el modelo HD44780) que se encarga de generar los caracteres, polarizar la pantalla, desplazar el cursor… Además, también viene equipado con una memoria ROM donde están almacenados los caracteres a través de una matriz de puntos, y una memoria RAM donde se pueden almacenar caracteres creados por nosotros. Estos displays disponen de unos pins para conectar un microcontrolador (en nuestro caso Arduino) para poder dar instrucciones al display.

En el mercado existen displays de distintos tamaño de pantalla. En este tutorial usaremos un display 16×2, que quiere decir que contiene 16 columnas y 2 filas.

Display

 

Conexiones display LCD

Normalmente los displays LCD tienen 16 pins (14 si la pantalla no es retroiluminada). Las funciones de los pins se describen a continuación:

pins

 

–        Pins 1-2: Alimentación  +5V

–        Pin 3: Voltaje para el contraste de la pantalla +5V. Si pones un potenciómetro puedes regular el contraste.

–        Pin 4: RS (Register Select) controla la memoria del display.

–        Pin 5: R/W (Read/Write) Selecciona modo escritura o modo lectura.

–        Pin 6: Enable. Habilitar o deshabilitar la escritura del display.

–        Pins 7-8-9-10-11-12-13-14: Bus de datos de 8 bits.

–        Pins 15-16: Habilitar retroiluminación aplicando +5V.

 

Librería LiquidCrystal de Arduino

A través de la líbreria de Arduino LiquidCrystal podemos controlar un display LCD con Arduino. En este enlace encontraréis todas las funciones de esta librería.

http://arduino.cc/en/Reference/LiquidCrystal

A continuación se explica las funciones básicas:

– LiquidCrystal “nombre_variable” (rs, enable, d0, d1, d2, d3, d4, d5, d6, d7): A través de esta función se crea una variable de tipo LiquidCrystal. Entre paréntesis pondremos los pins del Arduino correspondientes a los pins del display (RS, Enable y los 8 pins de bus de datos). Con esta configuración se usa la totalidad del bus de datos.

– LiquidCrystal “nombre_variable” (rs, enable, d4, d5, d6, d7): Igual que la anterior función pero solo usando 4 bits del bus de datos.

– begin(columnas, filas): Inicializa la interfaz del LCD y establece las dimensiones de la pantalla.

– setCursor(columna, fila): Posicionar el cursor de la pantalla LCD.

– print(“mensaje”): Escribe texto a la pantalla LCD.

– clear(): Limpia la pantalla LCD y posiciona el cursor en la parte superior izquierda.

 

Montaje

Para este tutorial usaremos 4 bits del bus de datos (D4, D5, D6, D7). Los pins restantes del bus de datos se dejan sin conectar.

esquema1_1

esquema 1

-Juntar las masas del Arduino y de la fuente de alimentación.

-El potenciómetro de 10k conectado al pin 3 del display LCD sirve para regular el contraste.

-Un consejo: desconectar el cable USB del Arduino cuando no se use la comunicación serie porque pueden ocurrir fallos. Alimentar el Arduino con una fuente de alimentación a través del pin Vin o con el conector jack.

 

Código Arduino

Para hacer una demostración del display LCD, haremos un pequeño ejemplo donde saldrá un mensaje a través de la pantalla.

/*
  www.diymakers.es
  by A.García
  17/08/14
  Aprender a usar un Display LCD
  Tutorial en: http://diymakers.es/aprender-usar-un-display-lcd/
*/

#include <LiquidCrystal.h> //Importamos la librería LiquidCrystal

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Creamos la variable y establecemos los pins del display

void setup()
{
  lcd.begin(16, 2); //Inicializamos el display configurando 16 columnas por 2 filas
  lcd.setCursor(0,0); //Ponemos el cursor en la primera fila a la izquierda
  lcd.print("Inicializando..."); //Imprimimos un mensaje inicial
  delay(2000); //Esperamos 2 segundos
  lcd.clear(); //Borramos lo que pone a la pantalla
}

void loop()
{
  //Primera fila
  lcd.setCursor(0, 0);
  lcd.print("BIENVENIDOS A");
  delay(2000); 

  //Segunda fila
  lcd.setCursor(0, 1);
  lcd.print("DIYMAKERS");
  delay(2000);

  lcd.clear(); //Borramos lo que pone a la pantalla
}

 

Crear caracteres

Normalmente, los displays LCD traen almacenados por defecto los siguientes caracteres:

caracteres

 

Aunque nosotros podemos crear los caracteres que queramos. Cada carácter del display está compuesto por una matriz de puntos de 5×8 tal como se muestra en la imagen:

caracter1

Cada una de las ocho líneas del carácter es 1 byte. Por lo tanto, para crear un carácter tenemos que usar 8 bytes. Para entender esto, vamos a crear el siguiente carácter:

caracter byte

Como se aprecia en la imagen anterior, ponemos a valor 1 los puntos que queremos “encender” del carácter del display. Cada línea representa 1 byte con un total de 8 bytes por carácter.Para poder crear un carácter con Arduino, tendremos que crear un array de 8 bytes. En el carácter que hemos creado antes, el array de 8 bytes sería el siguiente:

byte caracter[8] = {
    B00100,
    B11111,
    B10101,
    B00100,
    B00100,
    B10101,
    B01110,
    B00100
  };

 

Luego, a través de la función creatChar() de la librería LiquidCrystal se crea el carácter con los 8 bytes del array. Y finalmente, a través de la función write() se escribe el carácter en el display.

Vamos a hacer un ejemplo para entenderlo mejor. Crearemos un carácter móvil, que se irá moviendo constantemente. Haremos una cara que vaya cambiando su expresión de alegre, normal y enfadado. Cada uno de estos tres estados de expresión será un carácter que crearemos. El código sería el siguiente:

/*
  www.diymakers.es
  by A.García
  17/08/14
  Aprender a usar un Display LCD
  Tutorial en: http://diymakers.es/aprender-usar-un-display-lcd/
*/

#include <LiquidCrystal.h> //Importamos la librería LiquidCrystal

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Creamos la variable y establecemos los pins del display

//Creamos los 3 arrays de 8 bytes de los 3 caracteres
byte alegre[8] = {
    B00000,
    B00000,
    B01010,
    B00000,
    B10001,
    B01110,
    B00000,
    B00000
  }; 

byte normal[8] = {
    B00000,
    B00000,
    B01010,
    B00000,
    B00000,
    B11111,
    B00000,
    B00000
  };

byte enfadado[8] = {
    B00000,
    B00000,
    B01010,
    B00000,
    B00000,
    B01110,
    B10001,
    B00000
  };

void setup()
{
  //Creamos los 3 caracteres asignandoles un número a cada uno
  lcd.createChar(0, alegre);
  lcd.createChar(1, normal);
  lcd.createChar(2, enfadado);

  lcd.begin(16, 2); //Inicializamos el display configurando 16 columnas por 2 filas
  lcd.setCursor(0,0); //Ponemos el cursor en la primera fila a la izquierda
  lcd.print("Inicializando..."); //Imprimimos un mensaje inicial
  delay(2000); //Esperamos 2 segundos
  lcd.clear(); //Borramos lo que pone a la pantalla
}

void loop()
{
  //Creamos un bucle para que cambien los caracteres automaticamente
  for(int i=0; i<3; i++)
  {
    lcd.setCursor(7, 1);
    lcd.write(byte(i)); //Se escribe el caracter llamandolo a través de su número
    delay(500);
    lcd.clear();
  }

  lcd.clear();
}
Share on Facebook0Tweet about this on TwitterShare on Google+0Share on LinkedIn0Email this to someone