24 janeiro 2014

Ligando display LCD 16x2 em modo 8 bits

Estava aqui observando os meus posts usando display LCD 16x2 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.

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 :

Ligacao LCD HD44780 - Modo 8 bits

lcd 16x2 modo 8 bits hd44780

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, testando os 2 modos e tirando suas próprias conclusões :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// Programa : Teste LCD 16x2 em modo 8 bits

// 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 é 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 ? Notou diferença ? Compartilhe a sua opinião na área de comentários. Obrigado !

23 comentários:

  1. Ótimo post, informações muito úteis!
    Parabéns pelo blog!

    ResponderExcluir
  2. 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?

    ResponderExcluir
    Respostas
    1. 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 !

      Excluir
  3. 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

    ResponderExcluir
    Respostas
    1. Bom dia Cleverson,

      Valeu pela contribuição. Abraço !

      Excluir
  4. 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.

    ResponderExcluir
    Respostas
    1. 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.

      Excluir
  5. 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!

    ResponderExcluir
    Respostas
    1. Bom dia Raquel !

      Concordo com você. Melhor deixar para usar o modo 8 bits com displays gráficos como o 128x64.

      Abraço !

      Excluir
  6. Boa tarde!
    Vou programar o display do LCD através do arduino Uno.....e depois tenho que desconecta o LCD 16x2 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.

    ResponderExcluir
    Respostas
    1. 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 !

      Excluir
  7. 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.

    ResponderExcluir
    Respostas
    1. 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-16x2-arduino.html

      Abraço !

      Excluir
  8. 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 ?

    ResponderExcluir
    Respostas
    1. 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.

      Excluir
  9. 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?

    ResponderExcluir
    Respostas
    1. Boa tarde Filipe,

      Onde você comprou esse display ? Sabe qual controlador usa ?

      Abraço!

      Excluir
  10. 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 ?

    ResponderExcluir
  11. Muito válida a informação da postagem, parabéns.

    ResponderExcluir
  12. Oi eu estou aprendendo agora e queria saber se é possível ligar dois displays 16x20 em paralelo no msm Arduíno .

    ResponderExcluir
    Respostas
    1. Boa noite,

      É possível sim, pq a biblioteca permite que você mude os pinos de conexão.

      Abraço!

      Excluir