Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Práctica No 7-CIDI
Práctica No 7-CIDI
INTRODUCCIÓN.
Las pantallas de cristal líquido (“Liquid Crystal Displays” –LCDs– ) ofrecen una manera muy
rápida y vistosa de mostrar mensajes. Las podemos clasificar en LCDs de caracteres y LCDs
gráficas (estas últimas también llamadas GLCDs). Las primeras sirven para mostrar texto ASCII
y se comercializan en diferentes tamaños (16x2, 20x4...) donde el primer número indica la
cantidad de caracteres que caben en una fila, y el segundo número es el número de filas que
caben en la pantalla. Las segundas sirven para mostrar, además de texto, dibujos e imágenes, y
también se comercializan en diferentes tamaños, los cuales están definidos por la cantidad de
píxeles que pueden mostrar (128x64, 128x128...). Las LCDs de caracteres, por su parte, pueden
mostrar pequeños iconos de 5x7 píxeles o similar. Las LCDs de caracteres más habituales son
de 4-bit o 8-bit, dependiendo del número de cables (bits) que necesitan tener conectados al
circuito para poder recibir o enviar datos. Ojo, solo se cuentan los cables que son
estrictamente de transferencia de datos ya que en realidad una LCD necesita no solo 4 o 8
cables para funcionar, sino varios más (como los de alimentación, tierra, reseteado...).
1
Universidad Tecnológica de El Salvador Facultad de Informática y Ciencias Aplicadas
Práctica de Laboratorio No 7 Asignatura: Sistemas Digitales
Docente: Ing. José Mauricio Rivera
Otras características pueden tener (o no) las LCDs de caracteres son la posibilidad de iluminar
el fondo de la pantalla (opción ideal para entornos con poca luz ambiental) o la posibilidad de
utilizar varios colores de fondo (y no solamente el blanco/negro sobre azul/verde, que suele
ser lo habitual), etc. Cada modelo de LCD es diferente, por lo que es imprescindible consultar
su datasheet concreto para poder distinguir los diferentes pines de conexión que ofrece y sus
características generales. De todas formas, lo más habitual es que una LCD estándar ofrezca:
Un pin para recibir la alimentación (normalmente con los 5 V que proporciona la placa Arduino
ya está bien, pero hay modelos que requieren 3,3 V, así que hay que verificar esto) y otro pin
para conectar la pantalla a tierra. Es conveniente conectar un divisor de tensión entre la fuente
de alimentación y el pin de alimentación de la pantalla para evitar posibles daños. Para calcular
el valor óptimo de esta resistencia, se deben consultar dos valores en el datasheet del LCD: la
corriente máxima soportada para la luz de fondo y la caída de tensión causada por esta.
Haciendo uso de la Ley de Ohm, si se resta dicha caída de tensión de los 5 V y se divide el
resultado entre esa corriente máxima, obtendremos el valor de la resistencia (redondeando al
alza) que necesitamos. Por ejemplo, si la corriente máxima es de 16 mA y la caída de tensión es
de 3,5 V, la resistencia debería ser (5 – 3,5)/0,016 = 93,75 ohmios (o 100 ohmios redondeando
a un valor estándar). Si no se puede consultar el datasheet, un valor seguro para usar son 220
ohmios, aunque un valor tan alto hará que la luz de fondo sea más tenue.
Un pin para regular el contraste de la pantalla. Este pin se debe conectar a la patilla central de
un potenciómetro de nuestro circuito (el cual a su vez ha de tener sus patillas exteriores
2
Universidad Tecnológica de El Salvador Facultad de Informática y Ciencias Aplicadas
Práctica de Laboratorio No 7 Asignatura: Sistemas Digitales
Docente: Ing. José Mauricio Rivera
Varios pines (4 u 8, según si la LCD es de “4-bit” o “8-bit”) que se deberán conectar también
cada uno a un pin digital de la placa Arduino. Se usan para establecer las líneas de
comunicación en paralelo por donde se transfieren los datos y los comandos de control de la
placa Arduino hacia el LCD. Hay que saber que una LCD de 8 bits puede funcionar
perfectamente con solo cuatro cables de datos conectados (es decir, funcionando como una
LCD de 4 bits), pero lo hará a una velocidad menor.
Dos pines exclusivos para el circuito de la luz de fondo (uno para recibir la alimentación y el
otro pin para conectar a tierra). Si la pantalla no dispone de luz de fondo (también llamada de
“retroalimentación”), estos pines o no existirán o no serán usados para nada.
Las pantallas LCD comunes tienen el inconveniente de requerir muchos cables para conectarse
al circuito. Como consecuencia, en nuestra placa Arduino nos pueden quedar pocos pines
3
Universidad Tecnológica de El Salvador Facultad de Informática y Ciencias Aplicadas
Práctica de Laboratorio No 7 Asignatura: Sistemas Digitales
Docente: Ing. José Mauricio Rivera
disponibles para usarlos en otras cosas. Una solución a este inconveniente es el empleo de
pantallas LCD que utilizan un sistema de comunicación con la placa Arduino diferente del ya
comentado, como pueden ser los protocolos I2 C (el cual solo utiliza las líneas SDA y SCL), o el
serie (usando solo las líneas RX y TX), principalmente.
El I2C es un bus de comunicaciones que usa 2 líneas para enviar y recibir información y 2 más
para alimentación. La gran cantidad de pines que tiene el display LCD 16x2 (16 pines)
hace necesario en algunas ocasiones que tenga incorporado (o incorporarle) un módulo para
permitir la comunicación por I2C ya que con este necesita sólo 4 pines para funcionar.
Podemos utilizar módulos OLED (que no son shields propiamente dichos) con Arduino. En
concreto, Adafruit distribuye dos módulos monocromos, ambos de 128x32 y 128X64 píxeles.
Los dos módulos incluyen el mismo chip (el SSD1306 de Solomon Systech), el cual puede
comunicarse con la placa Arduino de dos maneras. vía SPI y I2 C. Ambos módulos incorporan
internamente un elevador de tensión para convertir los 5 V de los pines de Arduino en hasta
12 V y poder alimentar así los píxeles de la pantalla, pero, no obstante, su circuitería
electrónica solo puede ser alimentada con 3,3 V para funcionar correctamente.
Afortunadamente, ambos módulos (SPI y I2 C) incorporan internamente un regulador de
tensión general que rebaja los 5 V a 3,3 V, por lo que podremos conectarlos a nuestra placa
Arduino sin problemas.
4
Universidad Tecnológica de El Salvador Facultad de Informática y Ciencias Aplicadas
Práctica de Laboratorio No 7 Asignatura: Sistemas Digitales
Docente: Ing. José Mauricio Rivera
Funciones de Configuración
LiquidCrystal lcd (rs, enable, d4, d5, d6, d7): esta función se debe incluir al inicio del Sketch
antes de la función setup(), permite la creación de un objeto llamado lcd (este nombre puede
ser cualquiera), para que pueda ser manipulado más adelante dentro del Sketch. Como
paramentos recibe los números de pines Arduino donde se conecta la LCD a manejar, los
nombres rs, enable, d4, d5, d6 y d7 hacen referencia a los pines de la pantalla. Por ejemplo si
se usa el LCD KEYPAD SHIELD la instrucción seria: LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
lcd.begin (Ncaracteres, Nfilas): esta función inicializa el objeto llamado lcd con las dimensiones
de la pantalla LCD conectada a Arduino, recibe dos parámetros: el número de caracteres y filas
de la pantalla, así: lcd.begin(16,2); indica que se usara una LCD de 16 caracteres por 2 filas.
Esta función se declara dentro del setup() del Sketch.
Funciones de Manipulación
lcd.setCursor(col, row): Establece la posición del cursor; Esto es, la posición donde aparecerán
los siguientes caracteres escritos en el LCD, recibe como parámetros las coordenadas de la
posición donde se desea ubicar el cursor, por ejemplo
lcd.print(var o “texto”): esta función imprime en la pantalla LCD en la posición actual del cursor
5
Universidad Tecnológica de El Salvador Facultad de Informática y Ciencias Aplicadas
Práctica de Laboratorio No 7 Asignatura: Sistemas Digitales
Docente: Ing. José Mauricio Rivera
lcd.autoscroll(): Activa el desplazamiento automático del texto en la pantalla LCD. Esto hace
que cada salida de caracteres en la pantalla, "empuja" los caracteres anteriores en una
posición. Si la dirección del texto actual es de izquierda a derecha (por defecto), el texto se
desplaza hacia la izquierda, si la dirección actual es de derecha a izquierda, el texto se desplaza
hacia la derecha. Esto tiene como efecto que la entrada de cada nuevo carácter se produce en
la misma posición en la pantalla LCD. NO recibe ningún parámetro.
MATERIALES Y EQUIPOS:
• 1 cable de conexión
• 1 breadboard
• 1 lapto
• Simulador Tinkerkad
• Simulador Proteus
6
Universidad Tecnológica de El Salvador Facultad de Informática y Ciencias Aplicadas
Práctica de Laboratorio No 7 Asignatura: Sistemas Digitales
Docente: Ing. José Mauricio Rivera
PROCEDIMIENTO:
Abre tu IDE de Arduino y escribe el siguiente programa, compila. Guárdalo con el nombre de
Pantalla LCD
void setup() {
void loop() {
7
Universidad Tecnológica de El Salvador Facultad de Informática y Ciencias Aplicadas
Práctica de Laboratorio No 7 Asignatura: Sistemas Digitales
Docente: Ing. José Mauricio Rivera
Cambia los valores de la instrucción, lcd.setCursor(3, 0); por lcd.setCursor(0, 0); y simula, que
observas:
Modifica el programa para hacer aparecer en la fila 0 las siglas LCD centrada y en la fila 1 la
frase “Configurada”, también centrada: muestra una captura de pantalla.
lcd.display();
delay(500);
lcd.noDisplay();
delay(500);
Que observas:
lcd.setCursor(2, 0);
lcd.print("Prueba scroll");
lcd.scrollDisplayRight();
delay(500);
Que observas:
Ahora combina las instrucciones vistas para hacer un programa en el cual aparezca una frase
“Sistemas Digitales” en la columna 2 de la fila cero, que se encienda y apague y se desplace a la
derecha con un retardo de 100ms
8
Universidad Tecnológica de El Salvador Facultad de Informática y Ciencias Aplicadas
Práctica de Laboratorio No 7 Asignatura: Sistemas Digitales
Docente: Ing. José Mauricio Rivera
Las pantallas LCD comunes tienen el inconveniente de requerir muchos cables para conectarse
al circuito. Como consecuencia, en nuestra placa Arduino nos pueden quedar pocos pines
disponibles para usarlos en otras cosas. Una solución a este inconveniente es el empleo de
pantallas LCD que utilizan un sistema de comunicación con la placa Arduino diferente del ya
comentado, como pueden ser los protocolos I2 C (el cual solo utiliza las líneas SDA y SCL), o el
serie. (usando solo las líneas RX y TX), principalmente. El I2C es un bus de comunicaciones que
usa 2 líneas para enviar y recibir información y 2 más para alimentación. La dirección I2C por
defecto del módulo puede ser 0x3F o en otros casos 0x27. Es muy importante identificar
correctamente la dirección I2C de nuestro modulo, pues de otra forma nuestro programa no
funcionará correctamente. Para identificar la dirección especifica de nuestro módulo podemos
utilizar un pequeño sketch de prueba llamado: I2C Scanner, el cual nos permite identificar la
dirección I2C del dispositivo conectado al Arduino.
Para conectar con el modulo con el Arduino solo utilizamos los pines I2C del Arduino (SDA y
SCL) y alimentación (GND y 5V), los pines I2C varían de acuerdo al modelo de Arduino con el
que trabajemos, en la siguiente tabla podemos ver cuales son los pines I2C para cada modelo
de Arduino.
Las configuraciones para el uso de una pantalla LCD I2C, varían en relación a una LCD normal.
De igual forma las librerías son diferentes. https://github.com/fdebrabander/Arduino-
LiquidCrystal-I2C-library.
9
Universidad Tecnológica de El Salvador Facultad de Informática y Ciencias Aplicadas
Práctica de Laboratorio No 7 Asignatura: Sistemas Digitales
Docente: Ing. José Mauricio Rivera
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); //
void setup() {
10
Universidad Tecnológica de El Salvador Facultad de Informática y Ciencias Aplicadas
Práctica de Laboratorio No 7 Asignatura: Sistemas Digitales
Docente: Ing. José Mauricio Rivera
void loop() {
lcd.setCursor(3, 0);
Agrega al programa una línea de código para ubicar el mensaje “Uso del LCD I2C” en la
posición inicial de la segunda fila
Captura de pantalla:
En la pantalla de 16x2, tenemos dos filas y dieciséis columnas que albergan a los
personajes. Cada carácter se forma en una pequeña matriz de 8x5 píxeles. Aprendamos hoy
cómo manipular estas pequeñas matrices de 8x5 píxeles para construir un logotipo o
diseño. Esta construcción se puede hacer con solo el espacio de un carácter o con un conjunto
de caracteres que componen una imagen más grande. Recuerde que podemos utilizar un
máximo de 8 caracteres personalizados debido a la limitación de memoria CGRAM de la
pantalla.
11
Universidad Tecnológica de El Salvador Facultad de Informática y Ciencias Aplicadas
Práctica de Laboratorio No 7 Asignatura: Sistemas Digitales
Docente: Ing. José Mauricio Rivera
Por defecto ya viene configurada una pantalla de color verde, placa arduino, comunicación
paralela, y código binario. En caso utilices una pantalla con interface I2C, seleccionas I2C
Con el mouse da un clic derecho el cuadro que quieres seleccionar, si quieres borrar el cuadro,
nuevamente debes dar un clic derecho. Selecciona la interfase I2C y forma la figura mostrada
en la aplicación
Ahora copia el código generado en el IDE de Arduino y guárdalo con el nombre de fantasma,
compila y súbelo a la placa.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 in PCF8574 by NXP and Set to 0x3F in PCF8574A
by Ti
12
Universidad Tecnológica de El Salvador Facultad de Informática y Ciencias Aplicadas
Práctica de Laboratorio No 7 Asignatura: Sistemas Digitales
Docente: Ing. José Mauricio Rivera
byte customChar[] = {
B00000,
B01110,
B11111,
B10101,
B11111,
B11111,
B11111,
B10101
};
void setup() {
lcd.begin();
lcd.createChar(0, customChar);
lcd.home();
lcd.write(0);
}
void loop() { }
Que observas:
Deshabilita la línea de código: lcd.write(0) en el void setup y escribe las líneas de código en el
void loop:
lcd.setCursor(3, 0);
lcd.write(byte(0));
Comprueba la aplicación formando otras figuras que se ocurran, por ejemplo, un pacman, un
corazón, una carita feliz, etc.
Ahora vamos a desplegar en el display LCD las figuras realizadas, para ello tomaremos el
13
Universidad Tecnológica de El Salvador Facultad de Informática y Ciencias Aplicadas
Práctica de Laboratorio No 7 Asignatura: Sistemas Digitales
Docente: Ing. José Mauricio Rivera
código de fantasma del primer ejemplo y lo pegaremos dos veces y el código del pacman una
vez
byte a[8] = {
B00000,
B01110,
B11111,
B10101,
B11111,
B11111,
B11111,
B10101
};
byte b[8] = {
B00000,
B01110,
B11111,
B10101,
B11111,
B11111,
B11111,
B10101
};
byte c[8] = {
B01110,
B11101,
B11110,
B11100,
B11110,
B11111,
B01110,
B00000
};
lcd.init();
lcd.backlight();
lcd.clear();
lcd.createChar(0, a);
lcd.createChar(1, b);
lcd.createChar(2, c);
14
Universidad Tecnológica de El Salvador Facultad de Informática y Ciencias Aplicadas
Práctica de Laboratorio No 7 Asignatura: Sistemas Digitales
Docente: Ing. José Mauricio Rivera
lcd.setCursor(0, 0);
lcd.write(byte(0));
lcd.setCursor(1, 0);
lcd.write(byte(1));
lcd.setCursor(2, 0);
lcd.write(byte(2));
Qué observas
Ahora vamos a darle movimiento a las figuras. Para ello debes agregar las instrucciones para
moverlas a la derecha, incluir al inicio del void loop
for(int a=0;a>10;a++){
lcd.scrollDisplayLeft();
delay(250);
}
for(int a=0;a<10;a++){
lcd.scrollDisplayRight();
delay(250);
}
Qué observas
Finalmente vamos a darle el efecto de comer al pacman. Para ello escribe la línea de código al
final del código que tienes
lcd.print("***************");
¿Qué observas?
15
Universidad Tecnológica de El Salvador Facultad de Informática y Ciencias Aplicadas
Práctica de Laboratorio No 7 Asignatura: Sistemas Digitales
Docente: Ing. José Mauricio Rivera
Competencia 3. Mostrar como enviar mensajes a una LCD a través del puerto serial
Abre el monitor serial y escribe: Hola Mundo, y envía. Prueba con otras oraciones
¿Qué observas?
16
Universidad Tecnológica de El Salvador Facultad de Informática y Ciencias Aplicadas
Práctica de Laboratorio No 7 Asignatura: Sistemas Digitales
Docente: Ing. José Mauricio Rivera
INVESTIGACIÓN.
• Investiga sobre cómo generar figuras que abarquen más de un carácter (8 caracteres),
muestra un ejemplo
• Investiga sobre la Pantalla TFT ILI9341 bus SPI (320 x 240) color
17