Hardware Arduino LCD 16×2 con I2C
Si alguna vez ha intentado conectar una pantalla LCD a un Arduino, probablemente haya notado que usa muchos pines. Incluso en modo de 4 bits, el Arduino requiere siete conexiones: la mitad de los pines de E/S digitales disponibles del Arduino.
La solución es usar una pantalla LCD I2C. Solo usa dos pines de E/S que ni siquiera forman parte del conjunto de PIN digital de E/S y se pueden compartir con otros dispositivos I2C.
Descripción general del hardware
Una pantalla LCD I2C típica consiste en una pantalla LCD de caracteres basada en HD44780 y un adaptador LCD I2C. Aprendamos a continuación más sobre ellos.
Carácteres en la pantalla LCD – (Liquid Cristal Display)
Como su nombre indica, estas LCD son ideales para mostrar solo caracteres. Una pantalla LCD de caracteres de 16 × 2, por ejemplo, puede mostrar 32 caracteres ASCII en dos filas.
Si lo observamos más de cerca, puede ver pequeños rectángulos para cada caracter en la pantalla, así como los píxeles que lo forman. Cada uno de estos rectángulos es una cuadrícula de 5 × 8 píxeles.
Adaptador I2C LCD
En el corazón del adaptador hay un chip de expansión de E/S de 8 bits-PCF8574. Este chip convierte los datos I2C de un Arduino en los datos paralelos requeridos para una pantalla LCD.
La placa también incluye un pequeño potenciómetro para hacer ajustes precisos en el contraste de la pantalla.
Hay un jumper en el tablero que proporciona energía a la luz de fondo. Para controlar la intensidad de la luz de fondo, puede quitar el puente y aplicar voltaje externo al pasador de encabezado etiquetado como «LED».
Dirección del I2C del LCD
Si tiene múltiples dispositivos en el mismo bus I2C, es posible que deba establecer una dirección I2C diferente para el adaptador LCD para evitar conflictos con otro dispositivo I2C.
Para este propósito, el adaptador viene con tres jumpers o saltadores/almohadillas de soldadura (A0, A1 y A2). La dirección se establece cuando un jumper está en cortocircuito con una gota de soldadura.
Un punto importante a tener en cuenta aquí es que varias compañías, incluidos los chips de Texas instrument y los semiconductores NXP, fabrican el mismo chip PCF8574. Y la dirección I2C de su LCD depende del fabricante de chips.
Si su LCD tiene un chip PCF8574 de Texas Instruments
Según la hoja de datos de Texas Instruments, los tres bits de selección de direcciones (A0, A1 y A2) se encuentran al final del registro de direcciones I2C de 7 bits.
0 | 1 | 0 | 0 | A2 | A1 | A0 |
Debido a que hay tres entradas de dirección que pueden tomar dos estados, ya sea altas o bajas, ocho (2^3) combinaciones (direcciones) diferentes pueden ser posibles.
Las tres entradas de dirección estan por defecto en alta con el sistema pullups. Esto le da al PCF8574 una dirección I2C predeterminada de 0x27.
Cuando solda una unión, a0, a1 o a2 este bit queda en bajo. Si se soldarán los tres puentes quedaría , la dirección sería 0x20. Por consiguiente, los rangos de todas las direcciones posibles abarca de 0x20 a 0x27.
Este gráfico ilustra esto mejor:
Si su LCD tiene el chip PCF8574 de NXP
De acuerdo con la hoja de datos de los semiconductores NXP, los tres bits de selección de direcciones (A0, A1 y A2) se encuentran al final del registro de direcciones I2C de 7 bits. Sin embargo, los bits restantes en el registro de direcciones son diferentes.
0 | 1 | 1 | 1 | A2 | A1 | A0 |
Debido a que hay tres entradas de dirección que pueden tomar dos estados, ya sea altas o bajas, son posibles ocho (2^3) combinaciones (direcciones) diferentes.
Las tres entradas de dirección se extraen altas con pullups. Esto le da al PCF8574 una dirección I2C predeterminada de 0x3F.
Cuando corta un jumper con soldadura, esa dirección dara un cero, es decir baja. Si cortocircuita los tres puentes, la dirección sería 0x38, pues sería 0 para cada bits. Entonces, el rango de todas las direcciones posibles abarca de 0x38 a 0x3F.
Puede establecer una dirección I2C diferente, de acuerdo con la tabla a continuación:
Nota: Las direcciones de los LCD por defecto son en su mayoría 0x27 o 0x3F. Si no estás seguro de cual es la dirección, se puede determinar con un programa.
I2C LCD Display Pinout
La pantalla LCD I2C tiene solo cuatro pines. El siguiente es el pinout:
GND: Tierra.
VCC: Suministro de poder (+5V).
SDA: es el pin de datos.
SCL: Pin de reloj.
Cableado una pantalla LCD I2C a un Arduino
Conectar una LCD I2C es mucho más simple que conectar una LCD estándar. Solo necesitas conectar cuatro pines.
Comience conectando el pin VCC a la salida de 5V de Arduino y el pin GND a la tierra.
Ahora nos quedan con los pines que se usan para la comunicación I2C. Tenga en cuenta que cada placa Arduino tiene diferentes pines I2C que deben conectarse correctamente. En las tablas Arduino con el diseño R3, el SDA (línea de datos) y SCL (línea de reloj) están en los encabezados del pin cerca del pin ARF. También se les conoce como A5 (SCL) y A4 (SDA).
Puede chequear es la siguiente tabla para los distintos modelos de arduino:
Modelos | SCL | SDA |
Arduino Uno | A5 | A4 |
Arduino Nano | A5 | A4 |
Arduino Mega | 21 | 20 |
Leonardo/Micro | 3 | 2 |
Conexión típica LCD I2C con Arduino
Ajustando el contraste de LCD
Después de cablear la pantalla LCD, deberá ajustar el contraste de la pantalla LCD. En el módulo I2C, hay un potenciómetro que se puede girar con un destornillador pequeño.
Instalación de librerías
Antes de que pueda continuar, debe instalar la biblioteca LiquidCryStal_i2c. Esta biblioteca le permite controlar las pantallas I2C utilizando funciones que son muy similares a la biblioteca LiquidCrystal.
Para instalar la biblioteca, navegue hasta el Esquema > incluir biblioteca> Administrar bibliotecas … Sketch > Include Library > Manage Libraries y espere a que el administrador de la biblioteca descargue el índice de la biblioteca y actualice la lista de bibliotecas instaladas.
Aqui os muestro un gráfico (inglés):
Filtre su búsqueda ingresando ‘LiquidCrystal‘. Busque la biblioteca LiquidCrystal I2C de Frank de Brabander. Haga clic en esa entrada y luego elija Instalar.
Bosquejo -Sketch básico de arduino – «Hola mundo«
El Sketch – Bosquejo de prueba a continuación imprimirá «¡Hola mundo!» En la primera línea del LCD y el «Tutorial LCD» en el segundo.
Sin embargo, antes de subir el boceto, debe hacer un cambio menor para que funcione para usted. Debe pasar la dirección I2C de su LCD, así como las dimensiones de visualización al constructor LiquidCrystal_i2c. Si está utilizando una pantalla LCD de caracteres de 16 × 2, pase 16 y 2; Si está utilizando una pantalla LCD de caracteres de 20 × 4, pase 20 y 4.
Aqui está el código ejemplo:
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x3F for a 16 chars and 2 line display
void setup() {
lcd.init();
lcd.clear();
lcd.backlight(); // Make sure backlight is on
// Print a message on both lines of the LCD.
lcd.setCursor(2,0); //Set cursor to character 2 on line 0
lcd.print("Hello world!");
lcd.setCursor(2,1); //Move cursor to character 2 on line 1
lcd.print("LCD Tutorial");
}
void loop() {
}
...
Esto es lo que debes ver en la pantalla.
Explicación del código.
El boceto comienza incluyendo la biblioteca LiquidCryStal_i2c
#include <LiquidCrystal_I2C.h>
Luego se crea un objeto de clase LiquidCrystal_i2c. El constructor LiquidCrystal_i2c tiene tres parámetros: dirección I2C, número de columnas y número de filas de la pantalla.
LiquidCrystal_I2C lcd(0x3F,16,2);
En la configuración, se llaman tres funciones. La primera función es init (). Inicializa la interfaz a la LCD. La segunda función es clear (). Esta función borra la pantalla LCD y coloca el cursor en la esquina superior izquierda. La tercera función, Backlight (), enciende la luz de fondo LCD.
lcd.init();
lcd.clear();
lcd.backlight();
La función setCursor (2, 0) se llama para colocar el cursor a la tercera columna de la primera fila. , des está manera, la posición del cursor especifica dónde aparecerá el nuevo texto en la pantalla LCD. La esquina superior izquierda es la posición col = 0 y fila = 0.
lcd.setCursor(2,0);
Luego la función print () se usa para imprimir «¡Hola mundo!» a la pantalla LCD.
lcd.print("Hello world!");
Del mismo modo, las siguientes dos líneas de código mueven el cursor a la tercera columna de la segunda fila e imprimen «Tutorial LCD» a la LCD.
lcd.setCursor(2,1);
lcd.print("LCD Tutorial");
Espero que te haya sido util. Recuerda por favor contribuir con el proyecto microcontrolador.net
Gracias.