Hola. He comprado una pantalla china TFT 2.2" ILI9341 de las que tiene el pcb rojo. He revisado la placa y he visto que tiene el convertidor de 5V a 3.3V integrado por lo que he procedido con la conexión siguiente:
- VCC a 5 V de arduino mega 256.
- Led, a través de una resistencia a 3.3V de arduino.
- Gnd común con arduino.
Las líneas de datos las he conectado usando niveladores de tensión de 5V a 3.3V para las todas las líneas:
- MOSI, MISO y SCK
- DC, CS, RST
He alimentado LV con 3.3V, HV con 5V, GND común y luego los correspondientes LV1, LV2, LV3... HV1, HV2, etc. de forma que por el lado de mega va en los HVx y por el lado del display en los LVx. He comprobado las conexiones para asegurar continuidad y que esté todo bien contectado, varias veces con el polímetro.
He usado la librería adafruit_ili9341 realizando los cambios correspondientes en los #define para poner TFT_DC, TFT_CS, TFT_RST en las líneas 10, 9 y 8 respectivamente. Además he definido TFT_MOSI, TFT_MISO Y TFT_SCK para las líneas 51, 50 y 52 respectivamente, y he usado el método de creación del objeto con el constructor que recibe todos los parámetros.
He cargado el programa de ejemplo que viene con la librería y en una copia de ese fichero .ino he realizado los cambios indicados para adaptarlo a mi placa mega 256. Cuando se ejecuta el programa, el comando de lectura de los parámetros de la placa siempre devuelve 0xFF (supongo que todo a valor alto por lo que lee MISO), a través del monitor serie.
El resultado es que la pantalla siempre aparece en blanco y sin ningún cambio. Buscando en internet he visto que a otros también les ha pasado pero ninguna de sus soluciones me han servidor. Estas son las pruebas que he realizado sin encontrar solución:
- Desconectar RST de mega y ponerlo con un pullup a 3.3v directamente.
- Cambiar a otras líneas de mega DC, CS y RST
- Asegurarme que estoy con lógica de 3.3v. Para ello he usado los niveladores de tensión. También he probado a quitar los niveladores y poner un divisor de tensión con resistencias, por si los niveladores fueran el problema. El resultado es el mismo y no hay diferencia. Sigue la pantalla en blanco.
Según el vendedor, la placa lleva el integrado ILI9341 y buscando por internet, para esa resolución de 240x320, ese es el que debe tener en principio. He probado con otro display, ya que compré 2, y el resultado es el mismo.
Ya no se me ocurre que más probar para conseguir que la pantalla me funcione o encontrar donde está la causa del problema.
1 Link de la pantalla
2 Fotos del cableado
3 Qué librerías de control estas usando
4 Ejemplo que estas intentando subir
No, nunca, jamás: conectes sin cambiadores de nivel (divisor de voltaje o cambiador de nivel) es un dispositivo de 3.3 v que a la primera que conectes a 5V sin protección se quemará.
En estos casos, el cableado es el problema: terminales flojas, hilos rotos, son los responsables, mi sugerencia es que construyas un shield en el que puedas soldar todos los pines con hilos cortos.
Lo mejor para el MEGA y esta pantalla es el CD4050BE.
PD: si me permites la sugerencia, ve directo por un teensy 4.1, la pantalla se puede conectar directamente y le podrás sacar todo el potencial con la librería ILI9341_t3, todo lo demás solo servirá para aprender.
Hola. Muchas gracias por tu ayuda.
No la he conectado a 5V directamente, salvo VCC porque he visto que tenía el convertidor a 3.3V la propia placa.
El conexionado, aunque está montado sobre una placa de prototipos, lo he comprobado pin a pin y estaba correcto. No he visto ningún error en el conexionado.
Después de seguir investigando por internet a ver si encontraba la solución, por casualidad encontré una persona con un problema similar e indicaba que si alimentas la placa sólo con 3.3V de Arduino no funciona. Al parecer necesita, al menos 3.6V para que funcione. Le he conectado una fuente de alimentación variable graduando el voltaje a 3.6V y FUNCIONA!!!.
No he tenido que cambiar el montaje en nada, sólo alimentarlo con una fuente externa. Como la fuente es regulable, lo he reducido a los 3.3V que se requiere y también funciona perfectamente.
Luego creo que el problema es los 50ma que proporcionan los 3.3V de mega son insuficientes para hacer funcionar la placa correctamente, necesitando una alimentación externa probablemente por un consumo mayor, dato que no he localizado aún por saber cual es el requerimiento.
Tendré en cuenta lo que me indicas del CD4050BE ya que quiero conectar varias placas TFT al mismo Arduino.
Por otra parte, conocía las placas teensy por encima, pero ahora que me lo has sugerido he leído el proyecto en su web con más detalle y he encontrado una cosa muy interesante que es la conexión con el simulador de vuelo X-Plane ya que el proyecto con el que estoy liado es una cabina propia para mi simulador de vuelo y resulta que tienen un sistema desarrollado estupendo. Creo que me voy a pillar una teensy 4 ya que las pruebas que he hecho con Arduino mega, la pantalla ya me funciona, pero va extraordinariamente lenta y como lo que quiero mostrar son los relojes de control del avión, pues quizás no vaya lo fluido que necesito.
Gracias por esta información y por tu ayuda.
Vaya pasé por alto el tema de la alimentación, buen punto a considerar.
Si ya estas meditando en adquirir ese tipo de MCU, ve directo por la teensy 4.1, tiene mas pines y cuenta con un lector SDIO incorporado, por si mas adelante quieres agregar funciones extra al proyecto.
Definitivamente el diseño que tienes en mente requiere de bastante poder de procesamiento del MCU para controlar la pantalla. La librería ILI9341_t3 está optimizada para obtener muy buena velocidad. Incluso puedes conectar un par de ellas en una misma placa 4 o 4.1; solo hay que definir los constructores en el encabezado.
Efectivamente, mi idea es conectar varias a una teensy 4 o 4.1, al menos 12 pantallas TFT pequeñas. Dado que la mayoría de los indicadores que voy a mostrar en las pantallas son de variación lenta (fuel, temperaturas, amps, etc.), no van a tener un refresco muy alto por lo que creo que tendré de sobra con una teensy, aunque necesitaré algunos multiplexores para la selección del display correcto. La mayoría serán TFT 1.8" más pequeñas por el hueco del indicador y por tanto no necesito las de 2.2", que las usaré sólo para los indicadores de fuel.
Gracias por los consejos.
Te sugiero que escojas un solo tipo de pantalla para el manejo de cada indicador. Posiblemente el panel central lo puedas armar con alguna pantalla táctil mas grande y con mayores capacidades, con un MCU independiente, podría ser alguna pantalla de panel táctil capacitivo, quizás de 5" y de 7". El mejor chip que podrías conseguir es el FT813 de NHD o Riverdi, hay un fabricante chino que maneja este tipo de pantallas solo que con panel táctil resistivo FT810: Hot MCU, hasta 5".
Vaya, vaya por si te interesa encontré un TFT ST7735 de 1.8" con panel táctil y va muy bien con el teensy 4.1., ya que tiene una librería optimizada: ST7735_t3.
Hice algunas pruebas para ver como podrían graficarse los datos provenientes de un sensor en forma de linea:
Solo debes cuidar que la alimentación de la retroiluminación de todas esas pantallas vaya a una fuente externa. He probado dos ILI9341 en un teensy 4 y me parece que ya va muy justo.
Realmente no necesito el táctil para nada ya que el avión que estoy implementando en el simlador no los tienes (y, ahora que lo pienso, tampoco creo que algún avión los lleve, hasta lo que yo sé). Los indicadores son todos pequeños y la tasa de refresco de cada uno puede ser de 1 segundo o más perfectamente. Con el que indicas de 1.8" o 2" va de sobra.
El experimento que has hecho va muy bien el refresco, pero como te digo, para lo que yo necesito, con poder actualizar cada pantalla 1 vez por segundo, va de sobra. Son indicadores de fuel, flaps, amperímetros, voltages, etc. variables que se toman del simulador (x-plane) y que mostraré en un indicador en la pantalla.
Lo que si me preocupa, y no he probado, es la distancia en cables que puedo tener para el SPI. Los indicadores están repartidos por todo el cuadro de mandos. Por ejemplo en el overhead van 5, en el pedestal central 3, en el lateral izquierdo 2, en subpanel del copiloto, otros 5. Puede haber como 1 metro de cable entre ellos. Si pongo el controlador en el centro, los más lejanos serán el del lateral izquierdo y del overhead. No sé si realmente va a funcionar. ¿Sabes que distancia máxima podría poner? ¿Sería mejor poner los convertidores 5V->3.3V cerca de los TFTS? No sé.
Los indicadores centrales grandes van con un monitor y su propio ordenador, pues esos van conectandos con SimVim al simulador. Para esos grandes no necesito electrónica.
En SPI, los hilos más largos creo que rondan algo así como 25 cm, mas allá de esos empiezan los errores aleatorios si no se toman medidas preventivas.
Alguna vez me topé con este artículo, deberías darle una mirada:
Un documento muy interesante. Probablemente tendré que añadir algunos repetidores o convertidores para subir la señal y sobre todo bajar la velocidad de trabajo del spi.
Gracias.