Ligando display LCD 16×2 em modo 8 bits
Estava aqui observando os meus posts usando display LCD 16×2 e notei uma coisa: todos os circuitos usam os pinos D4, D5, D6 e D7 do display, mas nenhum usa os pinos D0, D1, D2 e D3. Se o display funciona corretamente, pra que servem esses pinos, afinal ?
Esse tipo de display pode funcionar em modo 4 bits (usando 4 pinos), ou no modo 8 bits, usando todos os pinos de dados. Certamente quem usa o Arduino Uno e outras placas Arduino menores precisa economizar portas, especialmente se for ligar, ao mesmo tempo, o display e vários sensores.
“Teoricamente” (prestem atenção às aspas), se você necessita de uma taxa de atualização mais eficiente do display e não vai utilizar tantos sensores, pode utilizar o modo de 8 bits e observar um ganho de performance no LCD.
Conexão do display LCD 16×2 em modo 8 bits
Para tentar observar isso, liguei um display com o controlador HD44780 na protoboard, utilizando 8 pinos, e rodei o programa exemplo que vem junto com a biblioteca Liquid Crystal, chamado Autoscroll. Para a montagem do circuito, utilizei a tabela abaixo:
Seguindo a tabela acima, temos a seguinte conexão com uma placa Arduino Uno:
O comando LiquidCrystal tem a seguinte sintaxe se você for usar o display no modo 4 bits:
LiquidCrystal(rs, enable, d4, d5, d6, d7)
Já no modo 8 bits, basta acrescentar os pinos referentes ao D0, D1, D2 e D3 do display:
LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
Então no programa eu coloquei os dois comandos, e você mesmo pode comentar uma linha ou outra. Teste os dois modos e veja se para você faz alguma diferença:
// Programa: Teste LCD 16x2 em modo 8 bits // Autor: Arduino e Cia // include the library code: #include <LiquidCrystal.h> //Habilite a linha abaixo se for usar o display no modo 4 bits //LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Modo 4 bits //Habilite a linha abaixo se for usar o display no modo 8 bits LiquidCrystal lcd(12, 11, 6, 7, 8, 9, 5, 4, 3, 2); //Modo 8 bits void setup() { // set up the LCD's number of columns and rows: lcd.begin(16,2); } void loop() { // set the cursor to (0,0): lcd.setCursor(0, 0); // print from 0 to 9: for (int thisChar = 0; thisChar < 10; thisChar++) { lcd.print(thisChar); delay(500); } // set the cursor to (16,1): lcd.setCursor(16,1); // set the display to automatically scroll: lcd.autoscroll(); // print from 0 to 9: for (int thisChar = 0; thisChar < 10; thisChar++) { lcd.print(thisChar); delay(500); } // turn off automatic scrolling lcd.noAutoscroll(); // clear screen for the next loop: lcd.clear(); }
Faz diferença ? Na minha opinião, pouquíssima. A não ser que o seu programa exija muito do display, o que eu acho um pouco difícil. Em se tratando de um display basicamente para texto, não vale a pena gastar 4 pinos a mais do Arduino para usar o modo de 8 bits.
Vale o aprendizado e para usos futuros, quem sabe em outros displays.
Você fez o teste do display LCD 16×2 em modo 8 bits? Notou diferença? Compartilhe a sua opinião na área de comentários e confira outros posts usando displays aqui mesmo no Arduino e Cia!
Ótimo post, informações muito úteis!
Parabéns pelo blog!
Valeu César ! Abraço e obrigado !
Bom dia. Responda-me, por gentileza. Qual o valor do potenciômetro? É que sou novo no "Universo Arduino" e achei sua página uma das mais didáticas.
Grato
P.S. Como me inscrevo nela, se é possível?
Bom dia Evandro, e muitissimo obrigado pela visita.
Olha, o valor do potenciômetro que eu usei nesse experimento é de 10 K, mas você pode usar sem problemas outros de maior valor, como de 50 K, 100 K, pois serve apenas para controle da luminosidade do display.
Quanto à inscrição, no lado direito da página você tem a opção de curtir a página do Arduino e Cia no facebook, e assim receber as atualizações, ou então seguir pelo twitter.
Tenho também a opção de email, preenchendo o campo "Receba as atualizações do blog por email".
Qualquer uma delas vai atender às suas necessidades. Aguardo a sua inscrição.
Grande abraço e obrigado mais uma vez !
A grande vantagem em se utilizar os 8 bits de dados do lcd é a velocidade do programa, se você tem um programa que necessita de muito processamento, o uso de 8 bits é vantajoso, visto que a velocidade do lcd é muito menor que a do microcontrolador.
Cleverson V. Lima
Bom dia Cleverson,
Valeu pela contribuição. Abraço !
Olá.
Eu tentei fazer aqui em casa.
Porém após a gravação do programa no arduino, no meu display aparecem duas linhas completas com quadrados brancos.
Sabe o que pode estar acontecendo?
Obrigado, desde já.
Ótimo trabalho, belo site.
Boa tarde,
Isso parece ser algum problema na conexão dos fios, ou então excesso de contraste. Você tentou em modo 4 bits ?
Abraços.
Não uso 8 bits nem que tenha muitos pinos sobrando. Pra que complicar as coisas se com 4 bits funciona perfeitamente? Se um dia eu fizer um programa que exija tanto do display eu usarei. Valeu pela informação!
Bom dia Raquel !
Concordo com você. Melhor deixar para usar o modo 8 bits com displays gráficos como o 128×64.
Abraço !
Boa tarde!
Vou programar o display do LCD através do arduino Uno…..e depois tenho que desconecta o LCD 16×2 do Arduino, e mantendo com fonte propria, toda a programação do display…..é possível fazer isso?…..ter um display LCD programado e alimentado por fonte propria?…aguardo resposta, Rene.
Boa noite,
Até onde eu sei, isso não é possível, já que o display não tem memória para guardar as informações. Você vai precisar de algum tipo de circuito auxiliar, seja ele Arduino, PIC ou outro microcontrolador, para enviar dados ao display.
Abraço !
Boa tarde!
Eu gostaria de saber qual o máximo de displays que eu consigo controlar usando o arduino. Normalmente eu sei que seria 1 com o uno e 2 com o mega. Queria saber se posso controlar 5 ou 10 por exemplo, usando apenas um arduino com algum outro hardware, ou apenas outro hardware como por exemplo o raspberry.
Boa noite Frederico,
Tente o módulo I2C. Com ele você consegue ligar pelo menos 8 displays no Arduino:
http://www.arduinoecia.com.br/2014/12/modulo-i2c-display-16×2-arduino.html
Abraço !
fiz todas as ligações certas , mais a minha tela so ascende e fica azul , nao escreve nada ja nao sei o que fazer ,alguem mais ja teve esse problema ?
Boa noite Antonio,
Você utilizou um potenciometro para regulagem do contraste ? Se possivel, faça uma ligação básica, usando as instruções deste post : http://www.arduinoecia.com.br/2013/12/lcd-16-x-2-backlight-azul-hd44780.html
Abraço.
Boa tarde! Tenho 2 displays, um 20/4 e um 16/2. O 16/2 é um KeypadShield. Já tentei ligá-los de todas as formas que encontro na internet e a única coisa que acontece nos dois é ligar o backlight! Já não sei mais o que fazer. Pode me ajudar?
Boa tarde Filipe,
Onde você comprou esse display ? Sabe qual controlador usa ?
Abraço!
Bom dia tenhu uma duvida quando carrego outra programação pro arduino o display não muda fica a msm programação anterior oque poderia ser ?
Muito válida a informação da postagem, parabéns.
Valeu Felipe. Abraço!
Oi eu estou aprendendo agora e queria saber se é possível ligar dois displays 16×20 em paralelo no msm Arduíno .
Boa noite,
É possível sim, pq a biblioteca permite que você mude os pinos de conexão.
Abraço!
Olá tudo bom ? Estou usando o ldmicro para o atmega2560, funciona perfeito o arquivo .hex. Mas ando tendo uma dificuldade com o esquema de ligação para lcd 20×4 p/ monstrar os setups do sistema. Não localizo o esquema de ligação, se precisa ser 4 ou 8bits e quais pinos. É possivel ligar a 10 ou 14 fios ou apenas com interface i2c ?
me ajudaria muito com uma luz.
É possivel utilizar o mega 2560, programado em ladder pelo ldmicro para monstrar os setup do sistema no lcd 20×4 ? Estou tendo dificuldade com relação ao esquema de ligações dos pinos no 2560, se conecto a 4 ou 8bits ou ainda só aceita i2c.
Me ajudaria muito com uma luz.
Olá!
Montei um projeto onde o display tem de ficar a mais ou menos 1 metro e meio da placa arduino.
Como não encontrei cabo para ligar, usei cabo de rede.
Quando compilo o projeto aparece normal, o que tem de aparecer. Porém depois de um tempo começa a aparecer uns caracteres estranhos, apagar algumas colunas, e dai fica parecendo “TV fora do ar”, passando algumas coisas que não dá para identificar.
Gostaria de uma orientação para poder resolver esse detalhe.
O programa roda normal, somente os dados é que não são mostrados.
Já testei outro display, e quando coloco em uma protoboard e faço o teste próximo do arduino funciona normal.
Boa noite,
Um metro e meio não é uma distância muito grande… vc está alimentando o Arduino pela USB ou por fonte externa? Se for pela USB, recomendo que você faça um teste com uma fonte, se possível.
Abraço!
Adilson
Bom dia
Dá pra fazer o mesmo com o display 128×64?
Oi Juliana,
O esquema de conexão é diferente, mas dá pra fazer sim. Inclusive eu tenho um post sobre isso:
https://www.arduinoecia.com.br/2015/05/display-grafico-128×64-st7920-modo-8-bits-paralelo.html
Abraço!
Adilson
Parabéns pelo post, me ajudou muito no meu projeto para iniciantes!
Valeu Antonio!
Abraço.
Adilson
[…] Para conexão do display ao Arduino utilizamos a tabela abaixo abaixo. Repare que os pinos 7, 8, 9 e 10 não estão conectados pois vamos utilizar uma comunicação básica de 4 bits, mas esses pinos podem ser utilizados em uma conexão de 8 bits, conforme mostrado no post Ligando Display LCD 16×2 em modo 8 bits. […]