- Á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.
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.
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.
- 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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
ILI9341 Test! Display Power Mode: 0xCE MADCTL Mode: 0x24 Pixel Format: 0x2 Image Format: 0x0 Self Diagnostic: 0xE0 Benchmark Time (microseconds) Screen fill 2560984 Text 288852 Lines 2754540 Horiz/Vert Lines 221428 Rectangles (outline) 146300 Rectangles (filled) 5319152 Circles (filled) 1091852 Circles (outline) 1198160 Triangles (outline) 874832 Triangles (filled) 2192096 Rounded rects (outline) 463884 Rounded rects (filled) 5940368 Done! |
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)
|
ILI9341 Test! Benchmark Time (microseconds) Screen fill 1304756 Text 104336 Lines 696360 Horiz/Vert Lines 113608 Rectangles (outline) 73504 Rectangles (filled) 2709936 Circles (filled) 469572 Circles (outline) 296424 Triangles (outline) 222052 Triangles (filled) 1057928 Rounded rects (outline) 149840 Rounded rects (filled) 3021632 Done! |
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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
ILI9341 Test! Display Power Mode: 0xCE MADCTL Mode: 0x24 Pixel Format: 0x2 Image Format: 0xCE Self Diagnostic: 0xE0 Benchmark Time (microseconds) Screen fill 1521872 Text 122196 Lines 921612 Horiz/Vert Lines 127000 Rectangles (outline) 81808 Rectangles (filled) 3160328 Circles (filled) 501896 Circles (outline) 396332 Triangles (outline) 293488 Triangles (filled) 1312328 Rounded rects (outline) 183784 Rounded rects (filled) 3473180 Done! |
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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
Operação leva cerca de 5,7s (removendo delays) Benchmark Time (microseconds) Screen fill 277151 Text 53933 Lines 540120 Horiz/Vert Lines 24577 Rectangles (outline) 17279 Rectangles (filled) 576138 Circles (filled) 179718 Circles (outline) 235195 Triangles (outline) 171326 Triangles (filled) 246032 Rounded rects (outline) 83370 Rounded rects (filled) 669703 Done! 5756 ms total |
ESP8266 @160MHz (biblioteca não registrada)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
Operação leva cerca de 3,5s (removendo delays) Benchmark Time (microseconds) Screen fill 179731 Text 31423 Lines 317352 Horiz/Vert Lines 15771 Rectangles (outline) 10918 Rectangles (filled) 373386 Circles (filled) 106662 Circles (outline) 138346 Triangles (outline) 100676 Triangles (filled) 153272 Rounded rects (outline) 52079 Rounded rects (filled) 429006 Done! 3582 ms total |
Comentários