Home › Tag Archives › LCD

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)

Módulo Display LCD alfanumérico 2004 / 20×4 (20 caracteres, quatro linhas)

Para maiores detalhes, veja a página sobre o display 16×2. O funcionamento é o mesmo.

Módulo Display LCD alfanumérico 1602 / 16×2 (16 caracteres, duas linhas)

Modulo_LCD_1602_aceso_85

Na foto abaixo existe uma película plástica de proteção na frente do display.

Modulo_LCD_1602_IMG_0893_640_85 Modulo_LCD_1602_IMG_0895_640_85

Compatível com padrão Hitachi HD44780 (o padrão mais usado no mundo).

Os 16 pinos são distribuídos mais ou menos assim:

  • 2 para alimentação geral;
  • 2 para alimentação do backlight;
  • 1 para contraste;
  • 11 para comunicação (8 bits + 3 de controle).

Usando o display no modo de 4 bits, “apenas” 7 pinos são necessários. O arduino tem um microcontrolador suficientemente rápido para que você possa e deva usar o modo de 4 bits.

Mas fique atento: se estiver usando um Arduino UNO só o uso desse display já comprometerá boa parte do I/O do arduino. Se você precisar de algo que consuma menos i/O, confira meus itens i2C. Com eles você “gasta” no máximo dois pinos do arduino.

Este display precisa ser inicializado para funcionar. Se você só estiver vendo um monte de quadrados brancos na primeira linha e nada na segunda, o display está alimentado mas não foi corretamente incializado ainda. Verifique seu programa e as conexões.

O backlight do display precisa estar aceso. É ele que dá a cor branca dos caracteres. Você precisa ligar o Backlight a +5V através de um resistor. Pode ser um de 380R. Não ligue o backlight sem o resistor.

Este display requer a conexão de um potenciômetro ou trimpot externo para ajuste do contraste ou o controle através de PWM.

Potenciômetros, trimpots e resistores são itens vendidos separadamente.

Display TFT de 3.2″ com touchscreen

Módulo TFT
Shield adaptador
Conjunto montado

Aparência do módulo ligado, rodando o demo. Na foto abaixo eu mostro um modelo azul, mas o modelo ofertado neste anúncio é vermelho.

O kit vermelho está no fim. Novos compradores deverão receber o kit azul. Funcionalmente é a mesma coisa.

Shield_Adaptador_TFT_IMG_1182_640_automalabs.com.br

É importante ter em mente que o display, a touchscreen e o leitor de cartões são independentes. Você pode testar cada um separadamente.

 

Bibliotecas necessárias:

UTFT

UTouch

Com estas bibliotecas instaladas, seus exemplos funcionam com este kit sem maiores modificações, exceto talvez a calibração do touchscreen. Mas atente para o fato de que os demos vem ajustados para o Arduino UNO e se você estiver usando um Mega precisará comentar uma linha e “descomentar” outra. Cada sketch de demo mostra qual é.

 

Coordenadas da touchscreen invertidas
Se rodando o exemplo Button Test, ao apertar um botão for acionado outro na outra extremidade, é porque o digitalizador apresenta coordenada X invertida

Troque (no sketch exemplo):

x=myTouch.getX();

por:

x=320-myTouch.getX();

Se a calibração da touchscreen não funcionar, leia as instruções (desatualizadas) a seguir, pois eu explico como resolver isso.

O que se segue está desatualizado e vou manter aqui porque pode ser útil caso você precise adaptar um programa antigo

Bibliotecas necessárias:

UTFT
http://www.henningkarlsen.com/electronics/library.php?id=51

ITDB02_Touch
http://www.henningkarlsen.com/electronics/library.php?id=55

Nota: ITDB02_Touch mudou recentemente para outra biblioteca. Talvez você tenha que fazer adaptações. Por isso estou mandando em anexo as versões que eu uso.


Para testar o display
(sem o touchscreen)

Abra o exemplo UTFT->Arduino->UTFT_Demo_320x240

Substitua essas quatro linhas (inclui comentários):
// Uncomment the next line for Arduino 2009/Uno
UTFT myGLCD(ITDB32S,19,18,17,16);   // Remember to change the model parameter to suit your display module!
// Uncomment the next line for Arduino Mega
//UTFT myGLCD(ITDB32S,38,39,40,41);   // Remember to change the model parameter to suit your display module!
por:
UTFT myGLCD(ITDB32S,38,39,40,41);
Execute o teste
Touchscreen
O sketch exemplo de calibração da biblioteca não funciona.
Eu já testei com várias telas e nunca funcionou. É preciso editar ITDB02_Touch.cpp para fazer a calibração.Você precisa editar o arquivo:
libraries\ITDB02_Touch\ITDB02_Touch.cpp
Substitua os quatro primeiros parâmetros por isto:
#define PixSizeX    -16
#define PixOffsX    206
#define PixSizeY    11
#define PixOffsY    380
Feche o IDE se estiver aberto e abra de novo, para validar a modificação.
Abra o exemplo ITDB02_Touch->ITDB02_Touch_ButtonTest
Substitua#include <ITDB02_Graph.h>

por

#include <UTFT.h>

Substitua:

// Uncomment the next two lines for the ITDB02 Shield
ITDB02        myGLCD(19,18,17,16);
ITDB02_Touch  myTouch(15,10,14,9,8);

// Uncomment the next two lines for the ITDB02 Mega Shield
//ITDB02        myGLCD(38,39,40,41);   // Remember to add ASPECT_16x9 if you are using an ITDB02-3.2WC!
//ITDB02_Touch  myTouch(6,5,4,3,2);

por:
UTFT myGLCD(ITDB32S,38,39,40,41);  // Remember to add ASPECT_16x9 if you are using an ITDB02-3.2WC!
ITDB02_Touch  myTouch(6,5,4,3,2);

Compile e teste.

Bibliotecas e arquivos de suporte:
UTFT
UTFT
UTFT.rar
637.8 KiB
354 Downloads
Detalhes...
ITDB02 Touch
ITDB02 Touch
ITDB02_Touch.rar
40.8 KiB
355 Downloads
Detalhes...
ITDB02 Touch.cpp
ITDB02 Touch.cpp
ITDB02_Touch.cpp
5.1 KiB
2633 Downloads
Detalhes...

Display serial UART, SPI e I2C com interface destacável, compatível com LCDSmartie.

As fotos abaixo mostram um modelo com display 1602, mas também forneço com display 2004.

O endereço I2C da interface é programável. Basta entrar no modo UART e dar um comando pela serial para definir o endereço. A velocidade da serial pode ser mudada da mesma maneira, sendo que o default é 9600BPS. Cocê escolhe os modos de operação I2C e SPI por jumpers de solda. O default é o modo UART (sem jmpers).

 

Forneço plugin para LCDSmartie.

Display LCD serial I2C 2004 com interface destacável

Este post trata apenas do específico sobre o modelo de 20 colunas e 4 linhas (2004). Para maiores informações sobre o produto, leia o post sobre o modelo 1602.

Teste básico de funcionamento:

#include <Wire.h>;
#include <LiquidCrystal_I2C.h>;
//Aqui definimos endereço, número de colunas e linhas

LiquidCrystal_I2C lcd(0x27,20,4);
void setup()
{
  lcd.init();  
 
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Linha zero 123456789");
    lcd.setCursor(0, 1);
  lcd.print("Linha um   123456789");
    lcd.setCursor(0, 2);
  lcd.print("Linha dois 123456789");
    lcd.setCursor(0, 3);
  lcd.print("Linha tres 123456789");
}

void loop()
{
}

Display LCD serial I2C 1602 com interface destacável

Precisando de pinos livres extras no seu projeto ou passar um cabo com uma dúzia de fios até o LCD está te incomodando?

  • Display serial completo. Só requer alimentação de 5V e dois fios para o bus I2C. Responde no endereço 0x27 (interface vermelha) e 0x20 (interface preta);
  • Como se trata de I2C, que é um bus (compartilhado por natureza), podemos até dizer que não ocupa pino nenhum;
  • Controle de contraste via trimpot integrado;
  • Backlight pode ser desligado/ligado com comandos de software;
  • Compatível com qualquer microcontrolador que possa se comunicar por I2C, mas somente dou suporte ao Arduino;
  • Compatível com a biblioteca LiquidCrystal_I2C do Arduino;
  • Interface destacável. Você pode usá-la em qualquer display que tenha o mesmo pinout (veja pinout na foto abaixo);
  • Posso fornecer o produto na forma de kit, sem headers soldados.

Instruções de uso

O display funcionará igualmente com o Arduino Uno/Duemilanove ou Mega sem modificações nos sketches, mas atente para o fato de que o bus i2c fica em pinos diferentes em cada modelo:

  • No Uno/Duemilanove: Pinos analógicos A4 e A5
  • No Mega: Pinos 20 e 21

O display é compatível com o modelo da DFROBOT. Baixe esta biblioteca (supostamente compatível com IDE 1.0 e 0.2x,mas só testei com 0.22), descompacte no diretório libraries (certifique-se de que os arquivos fiquem em libraries/LiquidCrystal_I2C) e rode o exemplo LiquidCrystal_I2C -> Custom Chars.

Todos os displays são testados por mim e saem com o contraste ajustado, mas se por acaso você mexer no trimpot e a imagem não estiver mais aparecendo, gire o trimpot nos dois sentidos até que apareça. Um ajuste incorreto não danificará o display, por isso pode mexer à vontade.

Cópia local da biblioteca:

LCD Gráfico 128×64 (12864) compatível com ST7920

Fundo azul e letras cinzentas.

Compatível com o modelo FIT0021 da DFrobot

A visibilidade deste display não é muito boa. A escolha da cor de fundo e cor das letras não oferece um constraste muito bom.

Este display pode ser operado em dois modos: paralelo e serial. O Arduino tem velocidade suficiente para a operação serial, que economiza muitas conexões: apenas três saídas digitas são necessárias.

Compatível com a biblioteca u8glib. Para operação no modo serial, abra o exemplo GraphicsTest  e “descomente” a linha:

//U8GLIB_ST7920_128X64 u8g(18, 16, 17, U8G_PIN_NONE);

O exemplo acima requer um Arduino Mega, mas se quiser usar um Arduino UNO:

U8GLIB_ST7920_128X64 u8g(3, 9, 8, U8G_PIN_NONE);                  // E: D3, RS: D8 e R/W:D9

É só um exemplo. Você é livre para escolher que pinos usar

Os exemplos Chess , “F” (sequer compilou) e menu não funcionaram comigo, nem no Duemilanove, nem no Mega.

Exemplos retirados do demo GraphicsTest:

Você também pode usar o demo da DfRobot. Imagem retirada dele:

Ao usar o demo GraphicsTest a imagem parecerá estar “de cabeça para baixo”. É normal.

Abaixo, cópias locais de alguns arquivos (links gerados automaticamente).

Módulo display LCD 1602 serial I2C / TWI e SPI

Baseado em chip MCP23008. Endereço I2C default: 0×0, mas configurável com jumpers de solda. Este é o modelo fabricado pela Elecfreaks, que é uma variação do modelo da Adafruit

É necessário remover a biblioteca liquidcrystal e instalar a fornecida.

Backlight

O backlight pode ser controlado pelo software. Procedure setBacklight () da biblioteca.

Módulo display LCD 1602 serial I2C / TWI

Baseado em chip Philips PCF8574.

Endereço I2C: 0x27

Compatível com o modelo da DFROBOT. Biblioteca e exemplos:

http://www.robotshop.com/ProductInfo.aspx?pc=RB-Dfr-69

Backlight

O backlight pode ser controlado pelo software. Procedures backlight() e   noBackligth() da biblioteca.

O jumper serve para o controle externo do backlight. Com o jumper no lugar o backlight fica permanentemente ativo. Retirando o jumper, você pode conectar uma saída do microcontrolador para o controle do backlight.