14 maio 2013

Display LCD Nokia 5110

Hoje o assunto é o display LCD Nokia 5110, que é um módulo contendo um display monocromático com resolução de 84 x 48 pixels, o que permite algumas variações interessantes, como letras maiores e alguns efeitos gráficos.

display lcd nokia 5110 Arduino

Também tive alguns problemas para fazer esse display funcionar perfeitamente, porque se você procurar no Google, verá que quase todas as buscas apontam para a famosa biblioteca do Philips PCD8544. Ok, funcionou depois de várias tentativas, mas eu queria alguma coisa mais prática. Acabei encontrando uma biblioteca disponibilizada pela Adafruit, que comercializa este tipo de display no exterior.

Antes de mais nada, gostaria de frisar que este procedimento foi testado no display AZUL, que funciona com 5v. Se você tem um display desses na cor vermelha, tudo bem, mas use resistores limitadores de corrente, para que o seu display não seja danificado. O display vermelho, pelo que pesquisei, funciona apenas com 3,3 v.

Montar a biblioteca necessária para que esse display funcione é um capítulo à parte, mas vou resumir da seguinte maneira :

1 - Baixe a biblioteca principal e coloque na pasta \Libraries\PCD8544
2 - Baixe a biblioteca gráfica e coloque na mesma pasta

Resumido, vamos ao procedimento. Monte o circuito, observando a ligação :

  • Pino 12 do Arduino ligado no Pino 1 (RST) do display
  • Pino 11 do Arduino ligado no Pino 2 (CE) do display
  • Pino 10 do Arduino ligado no Pino 3 (DC) do display
  • Pino 9 do Arduino ligado no Pino 4 (Din) do display
  • Pino 8 do Arduino Ligado no Pino 5 (Clk) do display
  • Vcc no pino 6 (Vcc) do display
  • Vcc com resistor de 220 ohms no pino 7 (BL) do display
  • GND no pino 8 (GND) do display

display lcd nokia 5110



Circuito em funcionamento - Display Nokia 5110


As bibliotecas foram armazenadas pela Adafruit num site chamado GITHUB. Acesse a biblioteca principal nesse link, ou copie e cole no seu navegador :

https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library

Aparecerá uma tela como esta, e você deve clicar em ZIP (seta vermelha), para baixar os arquivos desta biblioteca :

Display LCD Nokia 5110 - Biblioteca


Conforme comentei, descompacte e coloque os arquivos numa pasta chamada PCD8544, dentro da pasta Libraries da IDE do seu Arduino.

Repita o procedimento para a biblioteca gráfica :

https://github.com/adafruit/Adafruit-GFX-Library

Sua pasta PCD8544 deve ficar mais ou menos assim :

Display LCD Nokia 5110 - Biblioteca instalada


Pronto. Para testar, carregue o programa abaixo :

 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
//Programa : Teste display Nokia 5110 usando biblioteca Adafruit
//Autor : Arduino e Cia

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// pin 8 - Serial clock out (SCLK)
// pin 9 - Serial data out (DIN)
// pin 10 - Data/Command select (D/C)
// pin 11 - LCD chip select (CS/CE)
// pin 12 - LCD reset (RST)

Adafruit_PCD8544 display = Adafruit_PCD8544(8, 9, 10, 11, 12);

void setup()   
{
  Serial.begin(9600);
  display.begin();
  display.setContrast(50); //Ajusta o contraste do display
  display.clearDisplay();   //Apaga o buffer e o display
  display.setTextSize(1);  //Seta o tamanho do texto
  display.setTextColor(BLACK); //Seta a cor do texto
  display.setCursor(0,0);  //Seta a posição do cursor
  display.println("Arduino & Cia!");  

  //Texto invertido - Branco com fundo preto
  display.setTextColor(WHITE, BLACK); 

  display.println("Arduino & Cia!");

  display.setTextSize(2); 
  display.setTextColor(BLACK);
  display.print("Arduino");
  display.display();
  delay(2000);
}

void loop()
{
  // Codigo adicional
}

Para finalizar, carregue o programa de exemplo da biblioteca, que mostra o uso das funções de círculo, retângulo, triângulo e gráficos. Carregue o programa de exemplo a partir da IDE do Arduino :

ARQUIVO -> EXEMPLOS -> pcd8544 -> PCDTEST

Por hoje é só. até a próxima !


18 comentários:

  1. Estou começando com Arduino e este exemplo funcionou muito bem!!!! Obrigado

    ResponderExcluir
    Respostas
    1. Obrigado pelo retorno. Abraço e volte sempre que possível. Valeu !

      Excluir
  2. Olá, utilizei seu exemplo no meu projeto e funcionou bem, porém estou com um probleminha, eu uso um sensor de temperatura e um beep, sempre que há uma variação de temperatura eu emito um beep e mudo os valores no display, porém quando o beep é emitido o display apaga e não exibe mais nada, você tem idéia de como resolver?

    ResponderExcluir
    Respostas
    1. Boa tarde Vantuil,

      Vamos tentar descobrir se isso é um problema eletrônico ou do programa. Você já tentou desconectar o beep e rodar o programa para ver se o problema continua ?

      Excluir
  3. Olá, boa noite, descobri o problema, para não ter que mexer no projeto eu utilizei os pinos de 6 ao 10, e inicializei com estes pinos, vendo novamente seu projeto, apesar de achar que não tinha nada haver, pois eu posso setar os pinos que quiser eu alterei para os pinos de 8 ao 12 e agora tá funcionando. Obrigado pela atenção, valeu mesmo...

    ResponderExcluir
    Respostas
    1. Opa, legal Vantuil ! Obrigado pelo retorno.

      Qualquer coisa, estamos aí. abraço !

      Excluir
  4. Muito bom. Testei com o display vermelho e por pouco não liguei em 5V. Deu certinho em 3.3V. Parabéns e obrigado por compartilhar seus conhecimento.

    ResponderExcluir
    Respostas
    1. Boa tarde José,

      Obrigado pelo retorno. Fiquei contente em ver que você leu o artigo inteiro e não danificou o display. rs. Continue assim. :-)

      Abraço e obrigado !

      Excluir
  5. Olá amigo ! Ótimo site ! parabéns ! Sucesso sempre .....
    Bem . eu acho que o meu display nao ta bom ! fiz a conexão exatamente que esta aqui no site. , baixei as bibliotecas necessárias .. mais não funcionou , acendeu a tela , mais nao apareceu nenhuma informação . nada..

    obs : meu display e da cor AZUL .

    Tem algo que posta testar . alguma coisa para fazer , para ver se realmente ta ruim o display ?

    Abraços

    ResponderExcluir
    Respostas
    1. Boa tarde Andre !

      Valeu amigo... espero sua visita sempre que possível. :)

      Olha, o que eu posso te falar é para rever a soldagem dos conectores, e também ver se não há nenhum mal contato no display propriamente dito. Estou falando isso pq já tive (e tenho, às vezes), exatamente o mesmo problema que você : o display acende, mas as letras não aparecem.

      O que não solucionou o problema, mas melhorou muito, foi não só soldar novamente os conectores, como desmontar o display (a parte da moldura, em alumínio), limpar, verificar os encaixes e montar novamente.

      Essa parte da desmontagem eu fiz em último caso, quando o display não queria mais funcionar, e deve ser feita com cuidado, porque esses displays são muito frágeis.

      Espero ter ajudado, e se conseguir descobrir qual o problema com o seu display, compartilhe aqui, por favor.

      Abraço !

      Excluir
  6. Olá! Parabéns pelo site e pela iniciativa! Aprendi bastante coisa sobre o mundo do Arduíno por aqui! Estou passando pelo mesmo problema do colega Andre Rds. Fiz a ligação conforme o sugerido e nada acontece. Pesquisei em outras fontes, mas o problema permanece. Também fiz como disse acima, desmontei, refiz a solda e montei novamente e nada. Mais alguma sugestão? Está faltando apenas este display para implementar um projeto. Obrigado!!

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Entendi. Acho que esgotei as alternativas. rs. Obviamente é muito chato quando não funciona.... vc teria condições de testar com outro display. Esse que você tem já funcionou alguma vez ?

      Abraço !

      Excluir
  7. Alguem pode me ajudar?
    alisoneletricista@hotmail.com
    In file included from Arduino\libraries\Robot_Control\Adafruit_GFX.cpp:35:
    Arduino\libraries\Robot_Control\/glcdfont.c:13: warning: only initialized variables can be placed into program memory area
    Arduino\hardware\tools\avr\bin\avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105
    Arduino\libraries\Robot_Control\ArduinoRobot.cpp: In constructor 'RobotControl::RobotControl()':
    Arduino\libraries\Robot_Control\ArduinoRobot.cpp:8: error: 'LCD_CS' was not declared in this scope
    Arduino\libraries\Robot_Control\ArduinoRobot.cpp:8: error: 'DC_LCD' was not declared in this scope
    Arduino\libraries\Robot_Control\ArduinoRobot.cpp:8: error: 'RST_LCD' was not declared in this scope
    Arduino\libraries\Robot_Control\ArduinoRobot.cpp: In member function 'void RobotControl::begin()':
    Arduino\libraries\Robot_Control\ArduinoRobot.cpp:18: error: 'MUXA' was not declared in this scope
    Arduino\libraries\Robot_Control\ArduinoRobot.cpp:18: error: 'MUXB' was not declared in this scope
    Arduino\libraries\Robot_Control\ArduinoRobot.cpp:18: error: 'MUXC' was not declared in this scope
    Arduino\libraries\Robot_Control\ArduinoRobot.cpp:18: error: 'MUXD' was not declared in this scope
    Arduino\libraries\Robot_Control\ArduinoRobot.cpp:19: error: 'MUX_IN' was not declared in this scope
    Arduino\libraries\Robot_Control\ArduinoRobot.cpp:22: error: 'BUZZ' was not declared in this scope
    Arduino\libraries\Robot_Control\ArduinoRobot.cpp:25: error: 'Serial1' was not declared in this scope

    Obrigado e abraços!

    ResponderExcluir
  8. No meu caso que até postei aqui a dúvida tive que mudar o código, e instalar o Arduino 1.5 e desistalar o 1.5 rv2.
    segue:
    //Programa : Teste display Nokia 5110 usando biblioteca Adafruit
    //Autor : Arduino e Cia

    #include
    #include
    #include

    // pin 8 - Serial clock out (SCLK)
    // pin 9 - Serial data out (DIN)
    // pin 10 - Data/Command select (D/C)
    // pin 11 - LCD chip select (CS/CE)
    // pin 12 - LCD reset (RST)

    Adafruit_PCD8544 display = Adafruit_PCD8544(8, 9, 10, 11, 12);

    void setup()
    {
    Serial.begin(9600);
    display.begin();
    display.setContrast(50); //Ajusta o contraste do display
    display.clearDisplay(); //Apaga o buffer e o display
    display.setTextSize(1); //Seta o tamanho do texto
    display.setTextColor(BLACK); //Seta a cor do texto
    display.setCursor(0,0); //Seta a posição do cursor
    display.println("Arduino & Cia!");

    //Texto invertido - Branco com fundo preto
    display.setTextColor(WHITE, BLACK);

    display.println("Arduino & Cia!");

    display.setTextSize(2);
    display.setTextColor(BLACK);
    display.print("Arduino");
    display.display();
    delay(2000);
    }

    void loop()
    {
    // Codigo adicional
    }

    ResponderExcluir
  9. AQUI O EXEMPLO NÃO FUNCIONA

    O MEU LCD NOKIA 5110 PERCEBI QUE A PINAGEM ESTA EM ORDEM DIFERENTE DA DO SEU

    VEJA A IMAGEM >> http://mlb-s1-p.mlstatic.com/13916-MLB4182638722_042013-O.jpg

    FOI ASSIM QUE LIGUEI NO ARDUINO E RODEI O SEU EXEMPLO

    Pino 12 do Arduino ligado no Pino 4 (RST) do display
    Pino 11 do Arduino ligado no Pino 3 (SCE) do display
    Pino 10 do Arduino ligado no Pino 5 (DC) do display
    Pino 9 do Arduino ligado no Pino 6 (Din) do display
    Pino 8 do Arduino Ligado no Pino 7 (SClk) do display
    Vcc no pino 1 (Vcc) do display
    Vcc com resistor de 220 ohms no pino 8 (LED) do display
    GND no pino 2 (GND) do display

    SÓ LIGA O DISPLAY MAS NÃO APARECE NADA

    SABE COMO ARRUMAR ISSO?
    TEM ALGUMA IDEIA rs.

    ResponderExcluir
    Respostas
    1. Bom dia,

      Se o seu display for o mesmo da imagem que você enviou, provavelmente é o modelo que funciona com alimentação de 3.3v. O display desse post funciona com 5 volts e é na cor azul. Eu menciono isso no texto.

      Espero que o display não tenha sido danificado. Tente liga-lo em 3.3v e se o problema persistir, tente baixar a versão 1.5 da IDE, que segundo um comentário aqui no post, funcionou com a biblioteca da Adafruit.

      Abraço !

      Excluir
  10. obrigado pelo retorno

    eu conseguir fazer compilar com esse exemplo:

    lcd arduino

    /*1- VCC 3v
    2-GND GND
    3-SCE 7
    4-RST 6
    5-D\C 5
    6-DN(MODI) 4
    7-SCLK 3
    8-LED 3v

    Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 3, 4);

    uma duvida, só compilou aqui pq eu incluir o spi.
    vc esqueceu de colocar no exemplo ou vc compilou assim mesmo?

    se compilou vc usou qual versão do arduino?

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Não precisei incluir a SPI, apenas as bibliotecas da Adafruit.

      A IDE que eu usei foi a versão 1.0.5.

      Abraço !

      Excluir