Autor: Oscar Gonzalez
Tiempo de lectura: 10 minutos
En éste tutorial aprenderás cómo conectar una pantalla LCD táctil ILI9341 con Arduino paso a paso
En este tutorial verás como conectar una pantalla LCD TFT de 3.2 pulgadas a una placa Arduino. Veremos algunos ejemplos de programación para que puedas dibujar diferentes figuras en la pantalla y también aprenderás a utilizar la pantalla táctil.
Pantalla táctil TFT LCD de 3.2' 240x320 IC ILI9341
Ésta pantalla está basada en el chip ILI9341 junto con otro chip XPT2046 que controla la parte táctil. Tiene unas características más que aceptables y es muy económica, además de ser una pantalla a color (16 millones de colores), se controla mediante el bus SPI con una resolución total de 240x320 píxeles. Más adelante veremos cómo funciona ese puerto.
También dispone de un zócalo donde puedes colorar una tarjeta de memoria SD ya sea para guardar o recuperar datos de cualquier tipo. Un buen ejemplo es utilizar la tarjeta para almacenar imágenes de alta resolución para poder mostrarlas y de esa forma crear interfaces de usuario complejas y vistosas. También puedes aprovechar esa misma tarjeta para guardar datos de tu aplicación, por ejemplo un "data logger".
Cada chip, tanto el ILI9341, el XPT2046 y la tarjeta SD utilizan el mismo bus SPI para comunicarse con el microcontrolador que utilices. En éste ejemplo usaremos una placa Arduino pero puede utilizar la pantalla con cualquier microcontrolador como Teensy, ESP8266, ESP32 y cualquier microcontrolador que tenga un bus SPI.
Dado que los dos chips funcionan de forma independiente, no tienes por qué utilizar la pantalla en modo táctil. Puedes por supuesto utilizar solo la pantalla para dibujar cosas en ella, pero la verdadera ventaja de éste modelo es que puedes crear interfaces de usuario usando la parte táctil.
Pantalla TFT LCD a color táctil resistiva de 3.2 pulgadas, resolución 240x320 basada en el chip IC ILI9341 y conector para memoria SD
15,65€
El bus SPI son las siglas de "Serial Peripheral Interface" y es un bus de interfaz comúnmente utilizado para enviar datos entre microcontroladores y pequeños periféricos, sensores y tarjetas SD. Utiliza líneas separadas de reloj y datos, junto con un pin selección llamado CS (chip select) para elegir el dispositivo con el que desea hablar.
En concreto, un bus SPI necesita de 3 pins de datos y otro pin de control. Esas señales se denominan de la siguiente forma:
En un bus SPI, solo un lado genera la señal de reloj (CLOCK). El lado que genera el reloj se llama "controlador", y el otro lado se llama "periférico". Solo puede haber un controlador (en este caso es el microcontrolador), pero puede haber múltiples periféricos conectados al mismo bus.
Cuando los datos se envían desde el controlador a un periférico, se envían en una línea de datos llamada MOSI, para "Salida controlador/ Entrada periférico". Si el periférico necesita enviar una respuesta al controlador, el controlador continuará generando un ciclos de reloj y el periférico colocará los datos en una tercera línea de datos llamada MISO, para "Entrada controlador/ salida periférico".
Puedes ver de forma resumida un esquema de cómo funciona el bus SPI en el siguiente gráfico:
Diagrama de funcionamiento del bus SPI
Como hemos dicho antes, solo puede haber un solo controlador o maestro pero puede haber tantos periféricos (esclavos) como quieras (bueno, casi).
Entonces si todo el mundo (los periféricos) está conectado al mismo bus, cómo sabe el microcontrolador a quién le habla? Pues eso lo hace con un pin extra llamado CS (Chip Select).
Se puede decir que es la única "desventaja" como tal del bus SPI, ya que cada periférico necesita un pin único para ser controlado dentro del bus. A parte de los pines MISO, MOSI y CLOCK, necesitas un pin extra por cada periférico SPI que utilices. Eso puede ser un problema si utiliza un microcontrolador con pocos pines y quieres utilizar muchos periféricos.
El funcionamiento del pin CS es muy sencillo ya que simplemente lo usa el microcontrolador para "avisar" al periférico que va a hablar con el, poniendo el pin a nivel alto (VCC). Cuando el microcontrolador termina la conversación, podrá de nuevo el pin CS a nivel bajo (0V)
Es importante que solo se "levante" un pin CS a la vez, sino ¡se puede liar parda en el bus! Lo normal es levantar el primer pin CS ( basta con un digitalWrite(pin, HIGH) ), realizar la comunicación, bajarlo y levantar el siguiente, así hasta completar la comunicación con todos los periféricos.
Todo esto nos permite tener tantos dispositivos esclavos como pines disponibles para pines CS.
(Créditos: https://microchipdeveloper.com/harmony:drv-spi)
Como todo en este mundo, el bus SPI no es ni perfecto ni ideal y hay que saber si es la mejor opción para nuestro proyecto valorando las ventajas y desventajas del bus SPI. Podemos resumir lo siguiente:
Ventajas:
Desventajas:
Una vez sabemos cómo funciona el bus SPI, en función de la placa de microcontrolador que utilicemos, tendremos que localizar cuales son los pines SPI. En la siguiente tabla, veremos unos pocos modelos de placas y cuales son los pines SPI por hardware.
NOTA: Se puede emular el bus SPI por software, pero es mucho más lento y no es recomendable hacerlo así a no ser que sea absolutamente necesario.
MODELO | MOSI | MISO | CLOCK |
Arduino UNO | 11 | 12 | 13 |
Arduino Nano (Nano Every) | 11 | 12 | 13 |
Arduino MEGA 2560 | 51 | 50 | 52 |
Sparkfun Pro Micro | 14 | 16 | 15 |
Adafruit Feather Basic (Atmega32U4) | 16 | 14 | 15 |
Arduino MKR 1000 | 10 | 8 | 9 |
NodeMCU (ESP8266) | 6 | 7 | 5 |
ESP32 Wroom (ESP32) | 12 | 13 | 11 |
Recuerda que a parte de los pines MOSI, MISO y CLOCK, debes reservar un pin extra por cada dispositivo SPI que quieras conectar. Estas son solo unas cuantas placas compatibles con Arduino. Si la placa que quieres utilizar no se encuentra en ésa placa, consulta su documentación.