25 setembro 2013

Display gráfico LCD 128x64 - ST7920

Displays LCD, na minha opinião, são itens indispensáveis para quem mexe com Arduíno. São componentes relativamente baratos e oferecem, dependendo do uso, uma forma mais eficaz do que o serial monitor para acompanhamento de dados.

Já utilizei displays LCD em muitos artigos aqui no Arduino e Cia, seja mostrando indicadores de temperatura e umidade em um LCD Nokia 5110, ou as distâncias lidas por um sensor ultrasônico, em um LCD 16x2.

Tenho agora a oportunidade de mostrar um outro display LCD gráfico, este com resolução de 128x64, baseado no chip ST7920, que adquiri na FILIPEFLOP.

Display gráfico LCD 128x64 Arduino

Este display tem backlight azul e escrita branca, e com ele (e a biblioteca certa) você consegue efeitos gráficos muito legais como rotação de tela, mudança de fontes de texto, rotação de texto e, claro, desenhar. Publiquei um pequeno vídeo no Youtube mostrando algumas dessas funções :


O display tem 20 pinos, numerados da direita para a esquerda, conforme podemos ver na foto abaixo. Ele pode ser utilizado para se comunicar com o Arduino tanto de forma serial como paralela. Neste artigo, onde a velocidade de atualização do LCD não é um ponto crítico, vamos utilizar a comunicação serial, ocupando apenas 4 portas do Arduino :

display grafico lcd 128x64

Informações mais detalhadas sobre a pinagem do LCD podem ser encontradas no datasheet do produto.

Atualizado: Veja como ligar este display em modo paralelo no artigo Display gráfico LCD 128x64 ST7920 em modo 8 bits.

Atualizado: Monte um relógio analógico/digital com esse display. Veja no post Relógio com Display LCD 128x64 e módulo RTC DS3231

O circuito usa um potenciômetro (utilizei um de 50K) para regulagem do contraste do display, e a alimentação é feita pelos 5v do Arduino. Para alimentar o backlight, eu usei os 3.3v do Arduino Uno R3 (mas segundo as especificações, também pode ser  ligado em 5v):

Ligação Arduino - Display LCD 128x64 - ST7920



















Tabela conexão LCD 128x64 - Arduino














A biblioteca que vamos usar é a U8Glib , uma biblioteca bem completa (e complexa, às vezes), com muitos exemplos de utilização. Recomendo uma visita à página da u8glib (em inglês) , onde você vai encontrar instruções sobre o funcionamento da biblioteca e também informações detalhadas sobre a utilização de cada comando. Vale a pena explorar.

O programa abaixo é baseado no exemplo "GraphicsTest", que já vem com a biblioteca. Conforme as instruções do desenvolvedor, conservei o cabeçalho com as informações de direitos autorais :

  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
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
/*  
GraphicsTest.pde  
>>> Before compiling: Please remove comment from the constructor of the   
>>> connected graphics display (see below).  
  
Universal 8bit Graphics Library, http://code.google.com/p/u8glib/  
  
Copyright (c) 2012, olikraus@gmail.com  
All rights reserved.  
 
Redistribution and use in source and binary forms, with or without 
modification, are permitted provided that the following conditions 
are met:  
 
* Redistributions of source code must retain the above copyright notice, 
  this list of conditions and the following disclaimer.  
     
* Redistributions in binary form must reproduce the above copyright 
  notice, this list of conditions and the following disclaimer in the
  documentation and/or other materials provided with the distribution.  
  
  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND   
  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,   
  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF   
  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE   
  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR   
  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,   
  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT   
  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;   
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER   
  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,   
  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)   
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF   
  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.   
*/  
   
#include "U8glib.h"  
// A linha abaixo define as ligacoes e deve ser 
// ajustada conforme o display utilizado. 
U8GLIB_ST7920_128X64_1X u8g(6, 5, 4 ,7); //Enable, RW, RS, RESET  
int display = 1;  
   
void u8g_prepare() 
{  
  u8g.setFont(u8g_font_6x10);  
  u8g.setFontRefHeightExtendedText();  
  u8g.setDefaultForegroundColor();  
  u8g.setFontPosTop();  
}  
   
void u8g_Tela1()  //Tela 1 - Arduino e Cia - Retangulos  
{
  u8g.setFont(u8g_font_unifont);  
  u8g.drawStr( 11, 35, "Arduino e Cia");  
  u8g.drawStr( 12, 35, "Arduino e Cia");  
  u8g.drawFrame(0,0,128,64);  
  u8g.drawFrame(2,2,124,60);   
}  
   
void u8g_Tela2() //Tela 2 - Moldura e relógio  
{
  u8g.drawRFrame(0,0,128,64,3);  
  u8g.drawStr( 3, 10, "Hor.: 13:00");  
  u8g.drawStr( 3, 25, "Temp: 27");  
  char s[2] = " ";  
  s[0] = 176;  
  u8g.drawStr(51, 25, s);  
  u8g.drawStr( 3, 40, "Umid: 25%");  
  u8g.drawCircle(95,32,28);  
  u8g.drawCircle(95,32,29);  
  u8g.drawLine(95, 9, 95, 4);  
  u8g.drawLine(123, 32, 118, 32);  
  u8g.drawLine(95, 55, 95, 60);  
  u8g.drawLine(67, 32, 72, 32);  
  u8g.drawLine(95, 32, 95, 12);  
  u8g.drawLine(95, 32, 100.8, 21.87 );  
  u8g.setFont(u8g_font_04b_03);  
  u8g.drawStr(89,43, "Tag");  
  u8g.drawStr(85,50, "Heuer");  
}  
   
void u8g_Tela3() //Tela 3 - Caracteres Ascii - Pag. 1  
{
  char s[2] = " ";  
  u8g.drawStr( 0, 0, "ASCII page 1");  
  for(int y = 0; y < 6; y++ ) 
  {  
    for(int x = 0; x < 16; x++ ) 
    {
      s[0] = y*16 + x + 32;  
      u8g.drawStr(x*7, y*10+10, s);  
    }  
  }  
}  
   
void u8g_Tela4()  //Tela 3 - Caracteres Ascii - Pag. 2  
{
  char s[2] = " ";  
  uint8_t x, y;  
  u8g.drawStr( 0, 0, "ASCII page 2");  
  for( y = 0; y < 6; y++ ) 
  {  
    for( x = 0; x < 16; x++ ) 
    {  
      s[0] = y*16 + x + 160;  
      u8g.drawStr(x*7, y*10+10, s);  
    }  
  }  
}  
   
void u8g_Tela5() //Tela 5 - Arduino e Cia - Retangulo preenchido  
{
  u8g.setFont(u8g_font_unifont);  
  u8g.drawBox(0,0,128,64);  
  u8g.drawBox(2,2,124,60);   
  u8g.setColorIndex(0);  
  u8g.drawStr( 11, 35, "Arduino e Cia");  
  u8g.drawStr( 12, 35, "Arduino e Cia");  
  u8g.drawFrame(2,2,124,60);  
}   
   
void u8g_Tela6()  //Tela 6 - Arduino e Cia em 0, 90 e 270 graus  
{
  u8g.setFont(u8g_font_helvB08);  
  u8g.drawStr(50,31, " Arduino");  
  u8g.drawStr90(50,31, " e");  
  u8g.drawStr270(50,31, " Cia");  
}  
   
void u8g_Tela7() //Tela 7 - Fontes diferentes  
{
  u8g.setFont(u8g_font_robot_de_niro);  
  u8g.drawStr(5,13, "Arduino e Cia !");  
  u8g.setFont(u8g_font_helvB08);  
  u8g.drawStr(5,25, "Arduino e Cia !");  
  u8g.drawBox(5,31, 118,11);  
  u8g.setColorIndex(0);  
  u8g.setFont(u8g_font_8x13);  
  u8g.drawStr(5,41, "Arduino e Cia !");  
  u8g.setColorIndex(1);  
  u8g.setFont(u8g_font_ncenB10);  
  u8g.drawStr(5,60, "Arduino e Cia !");  
}  
   
void draw() //Rotina Desenho  
{
  u8g_prepare();  
  switch(display) //Carrega a tela correspondente  
  {
   case 1:  
    u8g_Tela1();  
    break;  
   case 2:  
    u8g_Tela2();  
    break;  
   case 3:  
    u8g_Tela3();  
    break;  
   case 4:  
    u8g_Tela4();  
    break;  
   case 5:  
    u8g_Tela5();  
    break;  
   case 6:  
    u8g_Tela6();  
    break;  
   case 7:  
    u8g_Tela7();  
    break;  
  }  
}  
   
void setup() 
{  
  // flip screen, if required  
  //u8g.setRot180();  
   
  // assign default color value  
  if ( u8g.getMode() == U8G_MODE_R3G3B2 )   
   u8g.setColorIndex(255);   // white  
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )  
   u8g.setColorIndex(1);     // max intensity  
  else if ( u8g.getMode() == U8G_MODE_BW )  
   u8g.setColorIndex(1);     // pixel on  
    
  //u8g.setContrast(0x30);  
}  
   
void loop() 
{  
  // picture loop   
  for (display =1; display < 8; display++) //Carrega as telas de 1 a 7  
  {  
    u8g.firstPage();   
    do 
    {  
    draw();  
    } 
    while( u8g.nextPage() );  
    delay(3000);  //Pausa de 3 segundos e reinicia o processo  
  }  
}     

Um último detalhe sobre esta biblioteca é que ela suporta vários tipos de displays e controladores, bastando para isso mudar os parâmetros de comunicação dentro do programa. Para uma lista completa dos dispositivos suportados e respectiva configuração, acesse este link.


84 comentários:

  1. Parabéns cara muito bom me ajudou muito, estava sem nenhuma informação desse display, você poderia fazer um tutorial de como comunicar ele com o arduino MEGA sem ser através da serial ?
    grato

    ResponderExcluir
    Respostas
    1. Valeu ! Vou verificar essa possibilidade. Boa idéia. Abraço !

      Excluir
  2. OMG I don't know portuguese hehe but this was really helpful! It worked perfectly THANKSSSS!!! with an arduino MEga adk it works well, this was the only code that worked, it's perfect thanks a lot!

    ResponderExcluir
    Respostas
    1. Hi ! Thank you for visiting. Glad to help. If I can help with anything else, feel free to leave a message. Best regards !

      Excluir
    2. Hi I have problem about connection between LCD 12864 ST7920 and arduino mega
      I do several attempt but does not work
      I have to operate in parallel mode and I work with librery U8GLIB
      With arduino uno it work fine
      Pls can you show me your connection
      I have tried with this config but nothing to do
      U8GLIB_ST7920_128X64_4X u8g(22, 23, 24, 25, 26, 27, 28, 29, 37, 36, 35);
      Tks a lot Gianni


      does not work

      Excluir
    3. Hi Gianni,

      I´ve tested this display in parallel mode with Arduino Uno. With the code used in this post (using serial) your display works ?

      Regards,

      Excluir
  3. dae

    nao estou conseguindo imprimir variaveis como millis , somente texto , sabe como fazer?

    ResponderExcluir
    Respostas
    1. Boa tarde. Use o comando u8g.print ao inves do u8g.drawStr. Fiz um teste modificando esta parte do código para imprimir a variavel time :

      void u8g_Tela7() { //Tela 7 - Fontes diferentes
      time = 123456;
      u8g.setColorIndex(1);
      u8g.setPrintPos(5, 10);
      u8g.print(time);
      }

      Abraço !

      Excluir
  4. Como você faz para ter noção das posições ? Tentariva e erro ?

    ResponderExcluir
    Respostas
    1. Boa noite. Exatamente. Até conseguiria montar algum esquema pra simular, já que é uma matriz de 128 x 64 pontos, mas por tentativa e erro é mais rápido. rs. Abraço !

      Excluir
  5. Boas pessoal
    Tenho um arduino uno e comprei este display:http://www.buydisplay.com/default/5-2-inch-24064-lcd-240x64-t6963c-controller-module-display-black-on-white.html

    So que não consigo colocar a dar imagem, a unica coisa que aparece é uma linha ao comprido, passado 1 segundo aparece outra linha (noutra posição do display)

    O que esta errado?
    Obrigado

    ResponderExcluir
    Respostas
    1. Boa noite Hugo,

      Em texto ele funciona normalmente ?

      Abraço.

      Excluir
    2. Boas
      É de salientar que sou novato nestas coisas, tenho o arduino á 2 dias :-)

      Mas não dá nada,nem imagem, nem texto. Só aparece uma linha na horizontal, em que aparece, desaparece, volta a aparecer (noutra posição do display) e desaparece, isto num segundo apenas

      Ja corrigi a pinagem porque encontrei num site, este http://www.mikroe.com/download/eng/documents/compilers/mikrobasic/pro/pic/help/t6963c_graphic_lcd_library.htm
      Ja tirei as telas 2,3,4,5,6 da libraria (so fiquei com o texto) e dá o mesmo

      Na libraria do site do display:http://www.buydisplay.com/download/democode/ERM24064-1_DemoCode.txt
      Dá erro e nada feito

      Está mau para realizar o projecto que tinha em mente porque estou a ficar sem ideias

      Queria mudar o TID do Opel Astra (Chevroulet Astra no Brasil) mantendo as funções originais (info do radio, data, horas, temperatura exterior) e adicionar temp. interior, velocimetro, spectrum do som, voltagem, etc. O acerto de horas e data pasava a ser feito na manete do limpa vidros
      Exemplos: http://www.etlweb.com/?ref=prod_decodtool_edemulator
      http://www.youtube.com/watch?v=SvBacxqNV5c
      http://veramon.czweb.org/en_pp_astra_g_mid.html

      Excluir
    3. Bom dia Hugo !

      Legal, o seu projeto pelo jeito vai ser um pouco complexo, pra interligar tudo isso, mas o resultado vale a pena. Bacana. 8-)

      Infelizmente eu não tenho um display desses para testar, mas me parece, pela pinagem e pelo que você descreveu, que o problema está no hardware mesmo.

      Você tem condições de devolver esse display e pegar um outro ?

      Abraço.

      Excluir
  6. Sabe me dizer se tem como eu fazer essa mesma ligacao mas usando GLCD ?

    ResponderExcluir
    Respostas
    1. Boa tarde Eduardo,

      Ainda não tentei a ligação deste display usando essa biblioteca, mas pretendo tentar em breve.

      Abraço !

      Excluir
  7. Boa noite, estou usando o arduino uno e o lcd grafico e quando conecto todos os fios o arduino desliga , acho que o uno não está aguentando a corrente

    ResponderExcluir
    Respostas
    1. Boa noite Ana,

      Eu fiz esse experimento com um Arduino Uno e um display gráfico, e não tive problemas.

      Se o Arduino está desligando, acho mais provável que seja alguma ligação invertida, que aciona o sistema de proteção do Arduino e faz com que ele desligue.

      Abraço !

      Excluir
    2. Este comentário foi removido pelo autor.

      Excluir
  8. Ola Boa Noite? Esse esquema e código funciona com LCD WINSTAR WG12864A?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Eu não tenho esse LCD para testar, mas olhando o datasheet vi que a pinagem é a mesma. Creio que você não terá problemas quanto à ligação.

      Datasheet : http://www.winstar.com.tw/download.php?ProID=48

      Abraço !

      Excluir
  9. ola, estou tendo um problema na hora de conctar o vcc e o cs1, eles curtam circuitam e desligam o arduino, em fato os dois estao ligados pelo proprio lcd, ha algum problema com ele ou é outra cooisa. estou usando o lcd QC12864B com o controlador ST7920

    ResponderExcluir
    Respostas
    1. Boa noite Vitor,

      Não sei se o esquema de ligação do seu display é o mesmo, mas no circuito que eu usei o CS1 e o Vss vão no GND. Apenas o Vdd vai nos 5v do Arduino.

      Dê uma olhadinhas nas suas ligações porque estou achando que o problema é apenas a inversão de algum pino.

      Abraço !

      Excluir
    2. Boa noite Vitor, estou tendo o mesmo problema, alguma solução?

      Excluir
    3. teste com um voltimetro se ha um curto circuito entre o vcc e o cs1, se houver provavelmente o lcd esta com problema de fabricaçao, foi isso que o distribuidor me informou, ele trocou e tudo funcionou perfeitamente.

      Excluir
    4. Boa noite Vitor !

      Obrigado pelo retorno. Ainda bem que a solução é relativamente simples.

      Abraço !

      Excluir
    5. possuo lcd QC12864B com o controlador ST7920, somente precisa remover SMD R9 de 0ohm.

      Excluir
  10. Estou com o mesmo problema relatado pela Ana, alguém alguma luz?

    ResponderExcluir
    Respostas
    1. Passei pelo mesmo problema. Havia uma conecção permanente do pino 15 em HIGH (uso paralelo), via resistor R9. Foi só retirar o resistor e funcionou normal.

      Excluir
  11. opa fera
    estou com problema para compilar o arquivo eu tenho boa experiência em eletrônica mas muito pouca em programação a minha duvida é além do arquivo .pde e o de inclusão .h no caso U8glib.h
    e necessário de mais algum ? pois não compila sempre da algum erro
    abç !

    ResponderExcluir
    Respostas
    1. Boa tarde,

      No programa eu utilizo apenas a biblioteca U8glib mesmo. Que erro está apresentando ?

      Abraço.

      Excluir
  12. Ola, fiz todas as ligaçoes correspondentes, porem somente a tela liga e nenhum caracter aparece. Estou usando um potenciometro de 10k. só funcona com 50k?

    ResponderExcluir
    Respostas
    1. Boa noite Kályston,

      Não precisa ser necessariamente de 50 K. Nesse post eu usei o potenciômetro que estava disponível, mas pode ser de 10 K, 50 K, 1 Mega... é só para ajuste do contraste mesmo. Creio que seja alguma ligação invertida, ou alguma marcação errada na placa. Isso acontece com uma certa frequencia.

      Abraço !

      Excluir
  13. Olá Amigo!
    Onde posso baixar o arquivo deste display para simular no Protheus?

    ResponderExcluir
    Respostas
    1. Bom dia,

      Qual arquivo/formato você precisa ?

      Abraço !

      Excluir
    2. Acredito que sejam dois arquivos (LIB e IDX). Ainda não tenho o display e quero testar o código antes, simulando o mesmo no proteus. Obrigado!

      Excluir
    3. Boa tarde,

      Não achei esses arquivos não... :(

      Excluir
  14. Boa tarde,
    estou tentando conectar uma lcd 128x63 (QC12864B) onde o pino 15 é o PSB. Utilizei o exemplo do site e outros exemplos da internet, mas sem nenhum sucesso. Gostaria de uma ajuda para conectar com o Arduino UNO ou NANO. Esse display com o PIC funciona, mas com o arduino estou tendo dificuldades. Estou utilizando o U8GLIB_ST7920_128X64_1X u8g(6, 5, 4 ,7); //Enable, RW, RS, RESET, mas nada aparece no display. Pode me ajudar?

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Como você está ligando o pino PSB ?

      Abraço.

      Excluir
  15. quando clico em verificar na ide do arduino dar esse erro: TextRotX:159: error: 'u8g' was not declared in this scope

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Parece ser algum problema com a biblioteca u8glib, por favor reveja a instalação da biblioteca.

      Abraço.

      Excluir
  16. Heloo,

    I have an LCD identical to it
    Can you help me to make connections:
    // Software SPI (slower updates, more flexible pin options):
    // pin 7 - Serial clock out (SCLK)
    // pin 6 - Serial data out (DIN)
    // pin 5 - Data/Command select (D/C)
    // pin 4 - LCD chip select (CS)
    // pin 3 - LCD reset (RST)
    Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

    ResponderExcluir
    Respostas
    1. Hi !

      What kind of display do you have ? Can you send me a link ?

      Regards !

      Excluir
  17. Boa tarde,

    É possível ter algum tipo de animação na tela ?
    Por exemplo, um desenho assim por exemplo, represtentando uma face: O O
    -----
    E os olhos teriam uma simulação de piscar.
    Abraços e Parabéns pelo blog, que já me ajudou em muitos projetos
    Cleiton

    ResponderExcluir
    Respostas
    1. Bom dia Cleiton,

      É possível sim, só recomendo que vc não desenhe a tela inteira novamente, já que provavelmente o efeito ficará lento devido à frequencia de atualização do display. Uma opção também é utilizar o display ligado em modo parelalo (eu falo sobre isso no final do post).

      Abraço e obrigado !

      Excluir
  18. Bom dia.

    Estou tentando fazer este projeto utilizando um display AGM-12864A-801, porém não estou obtendo nenhum resultado. Vejo que a pinagem é a mesma, porém deve haver outro fator que esteja impedindo o sucesso do projeto. Já conferi e re-conferi as ligações e tentei nos modos serial e paralelo. É como se somente o BL ficasse aceso, e o contraste totalmente inoperante pelo potenciômetro, sendo que a variação de tensão ocorre perfeitamente.

    ResponderExcluir
    Respostas
    1. Bom dia João,

      Eu olhei o datasheet desse seu display, e parece que há uma diferença de pinagem nos pinos 15 e 16, talvez esteja aí o problema.

      Infelizmente não tenho nenhum display desse modelo aqui para testar... Sabe me dizer qual o controlador do seu display ?

      Abraço !

      Excluir
    2. O meu AGM usa o controlador NT7108. Estou apanhando pra fazer funcionar aqui.

      Excluir
  19. Boa noite Vítor!
    Estou com um LCD igual a este e estou usando ele para exibir as informações do módulo RTC DS3231! Quanto a isso não tenho problemas!
    Acrescentei no projeto o módulo DHT11 , mas não consigo colocar para exibir no LCD!
    Na serial,coloco para printar a temperatura e a umidade e os dados são exibidos normalmente !
    Tem alguma outra forma ? Os dados tem que ser em byte?
    Obrigado

    ResponderExcluir
  20. boa tarde, eu fiz a ligacao do jeito q diz na imagem, mas nao ta aparecendo nada.

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Seu display é do mesmo modelo desse que eu usei no post ?

      Abraço!

      Excluir
    2. 12864b, segundo oq eu pesquisei eh o mesmo controlador tb.

      Excluir
  21. Tenho no proteus AMPIRE128x64 E LGM12641BS1R qual o esquema para ligação 4 bits e 8 bits e a programação dos pinos E, R/W, RST, DI, CSS2, CSS1?

    ResponderExcluir
  22. Boa tarde, parabens pelo post primeiramente.
    Conectei o display a um sensor DHT11, e eu gostaria de mostrar ele na tela, ja declarei a variavel, porem mesmo assim ainda não consigo, qual a função e como faço para conectar um sensor e fazer ele mostrar na tela?

    ResponderExcluir
    Respostas
    1. Bom tarde.

      Tente os comandos u8g.setPrintPos para setar a posição, e u8g.print para mostrar na tela. Exemplo:

      //Obtem os dados do sensor
      temperatura = analogRead(A0)
      //Define a posicao na tela
      u8g.setPrintPos(30, 50);
      //Mostra o valor da variavel Temperatura na posicao especificada
      u8g.print(temperatura);

      Abraço !

      Excluir
  23. mto bom mano!! nao tem o model e a lib desse display para rodar no proteus? no proteus tem LGM12641BS1R e o ampire128X64 ambos com KS0108 128x64 mas nao consegui rodar nenhum!!!

    ResponderExcluir
  24. Ola.
    Estamos estudando alternativas para um projeto de automação embarcada.
    Seria possível ligar de 4 a seis displays deste em um Mega (em serial)?
    Cada um exibindo as informações de um grupo de sensores, em texto e gráficos tipo BAR ou Gauge.

    Abç.

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Acho que o ideal nesse caso seria um módulo I2C para display gráfico, mas é um módulo que eu ainda não achei para comprar, pelo menos não aqui no Brasil.

      Com ele, você pode ligar vários displays utilizando apenas 2 pinos do Arduino.

      Abraço!

      Excluir
  25. Ola Pessoal,
    Gostaria de saber qual é o comando para eu atualizar a tela, não gostaria de usar um laço while para isso

    ResponderExcluir
    Respostas
    1. Gostaria de saber, alguém poderia dar uma luz!!

      Excluir
  26. Boa tarde amigos do Arduino e Cia, estou usando esta biblioteca para o respectivo Display, gostaria de saber qual o comando que ele utiliza para limpar a tela, pois quando eu vou mudar de tela ele sobrepoe e acaba nao limpando os caracteres da tela anterior.

    ResponderExcluir
    Respostas
    1. Bom dia Marlon,

      Vou ficar te devendo essa, por enquanto, mas é uma boa sugestão para um próximo post.

      Abraço!

      Excluir
  27. Ola, comprei este display ( http://www.eletrodex.com.br/display-lcd-grafico-128x64-c-back-azul.html) que creio ser o mesmo, porem o codigo nao funciona.

    Sera que temos algum tipo de controlador diferente neste meu display??

    ResponderExcluir
    Respostas
    1. Bom dia Eron,

      O display é muito parecido, mas o controlador é outro. Tente verificar o comando para o controlador KS0108 (foi o mais próximo que eu achei), nesta página:

      https://code.google.com/p/u8glib/wiki/device

      Abraço!

      Excluir
  28. Boa tarde, eu estou usando o Proteus para emular o LCD e o arduino, mas os displays que eu encontrei na biblioteca de componentes nao tem nada a ver com esse( os terminais sao muito diferenes) como faço para ligar ele??

    Essa é a pinagem dele:

    1-Vss
    2-Vdd
    3-Vo
    4-C/D
    5-RD
    6-WR
    7-D0
    8-D1
    9-D2
    10-D3
    11-D4
    12-D5
    13-D6
    14-D7
    15-CE
    16-RST
    17-VEE
    18-MD2
    19-MS1
    20-HALT

    ResponderExcluir
    Respostas
    1. Bom dia Matheus,

      No Proteus vou ficar te devendo. Vamos ver se os outros leitores do blog conseguem te ajudar.

      Abraço!

      Excluir
  29. Olá Amigo! Estou com o lcd "MGD12864H-NS(W)-BBS-01" ( http://www.eletrodex.com.br/display-lcd-grafico-128x64-c-back-azul.html ) . No site tem a datasheet ao qual, juntamente com sua tabela, me baseei para a ligação dos pinos no arduino UNO. No entanto usando o código que você forneceu aqui, no obtive sucesso ( a tela fica apenas acesa ). Sou marinheiro de primeira viajem com relação ao arduino, assim me desculpa se falar alguma besteria, mas você acha que, no meu caso seria essa biblioteca que não funciona com essa tela? Outra duvida, pelo que entendi la da datasheet, os pinos RW,RS e Enable não são usados para efetivamente "passar" os dados do arduino pra o lcd, mas sim mais para controle, ficando o pino 16 do lcd ( Data input/output) aparentemente mais com essa função, você acha que meu problema poderia ser esse ? No seu código, os dados são passado pelo pino RW? Mais uma vez me desculpe o texto grande, é que ganhei esse lcd de um amigo que havia comprado nessa loja, e também não conseguiu botar para funcionar! Obrigado!!

    ResponderExcluir
    Respostas
    1. Boa noite Leonardo,

      O display é muito parecido, mas o controlador é outro. Tente verificar o comando para o controlador KS0108 (foi o mais próximo que eu achei), nesta página:

      https://code.google.com/p/u8glib/wiki/device

      Abraço!

      Excluir
  30. Ola, Primeiro parabens pelo blog e pelo post.. gostaria de verificar se voce ja utilizou esta biblioteca para comunicar o arduino com o display tb6560 240x148, tanto faz a placa de controle mega, uno ou nano.

    ResponderExcluir
    Respostas
    1. Oi Bruno,

      Obrigado. Infelizmente ainda não fiz esse teste, mas se eu conseguir um display desses posto os resultados aqui.

      Abraço!

      Excluir
  31. Ola Pessoal,
    Gostaria de saber qual é o comando para eu atualizar a tela, não gostaria de usar um laço while para isso

    ResponderExcluir
  32. SERIA POSSÍVEL LIGAR DIRETAMENTE O ARDUINO UNO R3 COM ESSE LCD SEM O USO DA PROTOBOARD? VC TERIA UM TUTORIAL ESPECIFICO OU SEMELHANTE?

    ResponderExcluir
    Respostas
    1. Bom dia Luiz,

      Você pode usar o mesmo esquema de ligação mostrado neste post. Você pode soldar os fios diretamente no LCD.

      Abraço!

      Excluir
  33. Bom dia, você tem exemplos desse mesmo display com o arduino uno gerando um gráfico na tela? Obrigada!

    ResponderExcluir
    Respostas
    1. Olá,

      Não tenho, mas é uma boa sugestão de post. Que tipo de grafico você gostaria de gerar ?

      Abraço!

      Excluir
  34. Como faço para mudar o tamanho da fonte?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Dê uma olhada nessa tabela de fontes da biblioteca u8glib:

      https://github.com/olikraus/u8glib/wiki/fontsize

      Abraço!

      Excluir
  35. olá alguém sabe como faço para exibir essa imagem do Arduino na tela? Tem que adicionar algum arquivo?

    ResponderExcluir
  36. Amigo, por favor poderia me ajudar? Toda vez que for utilizar esse lcd preciso criar uma nova função void para cada tela que eu quiser utilizar? não haveria uma forma de utilizar o mesmo de forma similar a biblioteca LiquidCrystal?

    ResponderExcluir
  37. Alguém sabe como posso usar essa biblioteca para exibição de mensagens de maneira similar aos displays 20x4? Vou usar no meu TCC.
    Tentei usar da maneira assim mas sempre preciso definir um loop e não consigo exibir as mensagens simultaneamente. Ele fica trocando as telas.

    ResponderExcluir