HomeProdutos › Módulo LCD TFT SPI baseado em chip ILI9341, com leitor SD.

Módulo LCD TFT SPI baseado em chip ILI9341, com leitor SD.

ILI9341_DSC01460_automalabs.com.br

  • Área visível: 2.2 polegadas;
  • Resolução: 320×240;
  • Alimentação: 5 ou 3.3V (veja adiante);
  • Sinalização: 3.3V;
  • A operação do leitor SD é completamente independente;
  • Esta tela não tem touchscreen.

ILI9341_fundo_DSC01453_automalabs.com.br

Componentes relevantes

  • U1: regulador de tensão XC6206P332MR/LM6206N3 de 3.3Vx250mA.
  • Q1: transistor de controle do backlight;
  • U3: posição para memória flash SPI, como a EN25F80 (o pinout desta confere com o do módulo). Essa memória é selecionada pelo terminal F_CS e os demais sinais SPI são compartilhados com os do cartão SD.
  • Os resistores R1, R2 e R3, todos de 10K, funcionam como pull-ups para os terminas SS (SD_CS), SI (SD_MOSI) e SCK (SD_SCK) do cartão SD, respectivamente.

O leitor SD

Tenha em mente que apesar do leitor SD ter um conector quase exclusivo, você ainda precisa alimentá-lo pelo conector da tela. E cartões SD operam com 3,3V na alimentação e sinalização, por isso é recomendável que você conecte os terminais SPI do leitor SD aos terminais SPI da tela para aproveitar qualquer level shifter que você esteja usando. Eu fiz isso para aproveitar os terminais do HCF4050 (veja explicação adiante) e não encontrei nenhum problema.

A presença dos resistores R1 a R3 poderia interferir com o funcionamento da tela, que não tem esses pull-ups. Na realidade a resistência medida dos terminais SPI da tela para +3,3V é de 10M e para GND varia de 130 a 250K, então é possível argumentar que a tela usa resistores de pull-down nos terminais SPI, mas aparentemente não interferiu. É possível que essa diferença é que tenha feito o projetista do módulo separar os terminais SPI.

Terminais da tela

  • SDO/MISO: Não é realmente necessário usar e pode ser deixado desconectado. O terminal MISO é usado para “ler” informações do dispositivo SPI escravo e em quase 100% dos casos você não precisa ler nada de uma tela;
  • LED: Aciona o transistor Q1 para ligar o backlight. Isso significa que você não precisa se preocupar com a corrente neste terminal e qualquer sinal positivo ligará o backlight com brilho máximo. Acionar este terminal por PWM controla o brilho do backlight. Nos meus testes, o valor 10 no comando analogWrite já foi o bastante para leitura do display;
  • SCK: Clock SPI. Precisa ser ligado a um terminal do microcontrolador.
  • SDI/MOSI: Dados SPI. Precisa ser ligado a um terminal do microcontrolador.
  • DC/RS: Data/Command. Usado para alternar entre o modo de dados e o modo de comando da tela. Precisa ser ligado a um terminal do microcontrolador.
  • RESET: Pode ser deixado permanentemente ligado a +3,3V para operação normal do display, mas dessa forma o display só pode ser resetado desligando a alimentação e o ideal é que o display possa ser restado depois da alimentação ter estabilizado. Em algumas situações o display pode travar justamente ao ser conectada a alimentação  e levar algumas tentativas de desligar/religar até que o display “colabore”. Se você tiver uma saída sobrando no arduino/ESP8266, conecte-a a RESET e configure a biblioteca de acordo porque assim o display poderá ser resetado pelo programa e a operação será mais confiável.
  • CS: Chip Select da tela. Se você não estiver usando mais nada no bus SPI (como o leitor SD) pode ser deixado permanentemente ligado a GND para operação normal do display.
  • GND: Alimentação
  • VCC: Alimentação. Como o display tem um regulador de 3,3V você precisa alimentar aqui com 5V. Se quiser alimentar o display com 3,3V você precisa unir o jumper J1 com um ponto de solda. Pode ser que o módulo funcione com 3,3V aqui mesmo sem unir o jumper, mas você deverá notar o backlight tremeluzir e o funcionamento da tela pode não ser estável.

Tenha em mente que apesar de você poder escolher entre alimentar o módulo com 5V ou 3,3V, a sinalização precisa ser de 3,3V. Aparentemente o módulo não é danificado se você sinalizar com 5V (ligar direto a um Arduino) mas não aparecerá imagem. Algumas pessoas tiveram sucesso usando divisores de tensão com resistores mas eu prefiro usar um “level shifter” como o HCF4050. Outras opções são o HEF4050, o 74LVX245 e o 74AHC125

Mas se você usar um módulo microcontrolador de 3.3V como o ESP8266, pode e deve ligar os terminais diretamente. A propósito, este módulo foi testado com sucesso ligado a um ESP-03.

Sugestão de interface para uso com microcontroladores de 5V como o Arduino

Eu usei um HCF4050, que é o modelo de alta velocidade do 4050, mas é possível que funcione com o modelo tradicional, CD4050. O chip é colado com uma gota de cola Super Bonder ao header.

No exemplo abaixo eu fiz RST e CS passarem pelo level shifter, mas se você optar por não controlar esses sinais (leia todo o texto) isso não é necessário.

ILI9341_interface_4050_DSC01478_automalabs.com.br

interface_ili9341_4050_automalabs.com.br

Reparação

A informação a seguir foi obtida por medições enquanto eu reparava um módulo defeituoso e só é importante se você também precisar reparar um módulo. a tela pode ser descolada passando com cuidado um estilete entre ela e a placa.

ILI9341_DSC01456_automalabs.com.br

  • 1 – GND
  • 2 – RST
  • 3 – SCK
  • 4 – DC/RS
  • 5 – CS
  • 6 – MOSI
  • 7 – MISO
  • 8 – GND
  • 9 e 10 – +3,3V
  • 11, 12, 13 e 14 – Para o transistor Q1 (controle do backlight)

Problemas com alimentação

Se o display estiver apresentando estranhos pontos aleatórios piscando ou mudanças inesperadas de cor (por exemplo, uma região programada para ser verde aparecer parcial ou totalmente em outra cor e permanecer assim até ser redesenhada), experimente usar uma fonte de alimentação melhor. O display não é realmente exigente mas fontes chaveadas muito vagabundas podem causar problemas.

Bibliotecas

É importante escolher a biblioteca com cuidado se você vai controlar o display com um arduino. A velocidade e o consumo de flash variam muito entre bibliotecas.

Este módulo funciona igualmente com as versões ILI9340 e ILI9341 das bibliotecas Adafruit e também outras. Neste texto eu vou usar a medição de velocidade do exemplo graphicstest da Adafruit

Todas as variações a seguir requerem a biblioteca Adafruit_GFX instalada.

Adafruit_ILI9341 original

Download aqui.
Operação total leva cerca de 42s (removendo delays)

Adafruit_ILI9341_AS

Esta é uma modificação que encontrei para download aqui. Esta biblioteca tem o dobro da velocidade mas requer muito espaço na flash do Arduino. Só por usá-la você já precisa de 25KB. A biblioteca Adafruit original requer menos de 17KB na mesma situação.

Operação total leva cerca de 17s (removendo delays)

Adafruit_ILI9341_by_casemod
Download aqui (post 191)

Testada no arduino 1.0.5 em conjunto com Adafruit GFX Library version=1.1.3

Para adaptar o exemplo graphicstest para esta versão basta declarar assim:
Adafruit_ILI9341 tft = Adafruit_ILI9341();
em vez de
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, _rst);

Mas o display precisa estar ligado assim (hardware SPI):

  • DC: D9
  • CS: 10
  • SCLK: D13
  • MOSI: D11
  • RESET: +3,3V

Operação leva cerca de 22s (removendo delays)

Esta versão leva cerca de 20% a mais de tempo que a versão AS, mas compila graphicstest para apenas 20K. O mesmo que a versão original.
Esta versão tem suporte e um demo para ler um arquivo do cartão SD e exibir na tela, mas não testei ainda.

Apenas para comparação, aqui está o benchmark quando rodando em um ESP8266 @80MHz (biblioteca não registrada)

ESP8266 @160MHz (biblioteca não registrada)

2 Comments.[ Leave a comment ]

  1. […] ← ESP8266: O propósito especial de GPIO0, GPIO2 e GPIO15 (boot e programação). Módulo LCD TFT SPI baseado em chip ILI9341, com leitor SD. → […]

  2. […] nada. Eu tive sucesso ao usar essa tensão de referência do CH340G para alimentar o CI HCF4050 da interface que criei para o ILI9341, mas não recomendo ficar abusando da […]

Leave a Comment

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">