Aqui você encontrará meus projetos, dicas e pesquisas saiba mais

Conectando display 128×64 no Arduino Mega

Tirar suas ideias do papel com Arduino é algo fantástico, que as vezes me faz pensar: “era isso que faltava”. Hoje temos um mundo de novas possibilidades quando se pensa em desenvolver algo divertido ou resolver um pequeno problema que nos incomoda muito.

O mundo é feito de interações, seja psicológicas ou com objetos físicos. Um display de 128×64 pontos é uma excelente tela para um aplicativo pequeno e medio, onde moderadas informações precisam ser passadas para o usuário gerando então uma Interface de comunicação com este.

Podemos com ele apresentar desde grandes textos, para pessoas que tenham dificuldade na leitura de telas comuns, e até imagens convertidas de um bmp. Portanto, se seu projeto exige boa interação com o usuário, é indispensável o uso de um display 128×64.

O display

Sem muitos segredos, abaixo algumas imagens do display, para que possamos ter melhor uma ideia de seu tamanho (eu mesmo antes de tê-lo ficava em dúvida qual suas medidas práticas).

Display lcd 128x64 com Arduino Mega

Visão de cima segurando o display lcd 128x64 conectado ao Arduino Mega

display lcd 128x64 Arduino Mega e Potenciômetro

Simplicidade de conexões entre Arduino e Display 128x64

display lcd 128x64 em funcionamento

Display 128x64 exibindo texto

As conexões

Apesar de existirem vários displays no mercado, com controladoras diferentes, não é difícil descobrir qual o padrão de comunicação deste RT12864J-1. Seguindo a tabela encontrada no site oficial do Arduino[1] podemos facilmente ver como funcionam as conexões para os diversos modelos de display e Arduinos. O display aqui usado, com o Arduino Mega usa as seguintes conexões:

Pino do Display LCD 128×64 Pino do Arduino Mega Comentários
1 GND
2 5V
3 Externo Pino do centro do trimpot
4 36 Data Instrunsion
5 35 Read / Write
6 37 Enable Signal
7 22 D0
8 23 D1
9 24 D2
10 25 D3
11 26 D4
12 27 D5
13 28 D6
14 29 D7
15 33 CCEL 1
16 34 CCEL 2
17 Reset Desconectar durante gravação
18 Externo Pino lateral do trimpot
19 5V Backlight
20 GND Backlight

O Trimpot

Basicamente um trimpot é um potenciômetro não usado por usuários. Normalmente pequenos, estão disponíveis no circuito para que possamos fazer pequenos ajustes definitivos. Nos displays LCD em geral os usamos para ajustar o brilho da imagem, e sem esse ajuste simplesmente não é possível vermos algo! Por isso, sempre cuide ao trabalhar com um display LCD, tive sérios problemas até descobrir que o trimpot é sim importante para seu correto funcionamento.

Mas o que faz um trimpot/potenciômetro?
Basicamente ele funciona como um resistor que tem sua resistência alterada de acordo com o giro de ajuste presente no componente. Simples assim.

Trimpot display LCD 128x64No nosso display, precisamos fazer as conexões dos pinos 3 e 17 no meio e lateral do trimpot respectivamente. A imagem ao lado, retirada do datasheet do display[2], ilustra tal conexão. Podemos ver que tanto um potenciômetro de 10 quanto de 20Kohms pode ser usado. Usei um de 10k.
Lembre-se que o outro pino da lateral do trimpot (que ficou livre) deve ser conectado em GND.
Potenciômetro 10k com Arduino

Potenciômetro usado no lugar de um Trimpot para ajuste da imagem do display LCD

Software utilizado

Para começar a usar o display, baixe a biblioteca e alguns exemplos aqui. Caso esse link não fique mais disponível, apenas acesse o site oficial do Arduino encontrando logo no início esse download.

Para exibir o texto no display (que será usado em um projeto em andamento e que publicarei aqui), de acordo com a imagem do início deste post, usei o seguinte código:

#include <ks0108.h>  // library header
#include <Arial14.h>  // font definition for 14 point Arial font.
#include "SystemFont5x7.h"   // system font
unsigned long startMillis;
unsigned int iter = 0;
unsigned int iterStart = 0;

void setup(){
  GLCD.Init(NON_INVERTED);   // initialise the library
  GLCD.ClearScreen();
  GLCD.ClearScreen();
  GLCD.SelectFont(System5x7);       // select fixed width system font

  GLCD.DrawRect(0, 0, 127, 63, BLACK);
  GLCD.CursorTo(2,1);
  GLCD.Puts("IDENTIFICADOR");
  GLCD.CursorTo(3,3);
  GLCD.Puts("E BLOQUEADOR");
  GLCD.CursorTo(4,5);
  GLCD.Puts("DE CHAMADAS");
}
void loop(){}

Dicas

  • Você pode usar um Potenciômetro com outros valores além de 10kOhms. O único problema é que será difícil fazer a regulagem. Resistores em série ou paralelo podem servir para ajudar.
  • A biblioteca GLCD permite que você use imagens de 64×64 bmp e as converta para serem exibidas no display, muito interessante isso!
  • Outros pinos podem ser usados para conectar o Arduino ao display LCD, nunca se restrinja aos exemplos encontrados na internet. No entanto, precisará alterar arquivos de cabeçalho para que funcione, no Mega o arquivo é: ks0108_Mega.h

Conclusão

Antes de começar, parecia quase impossível a tarefa de conectar um display LCD “desse tamanho” no Arduino e fazer tudo funcionar. Em menos de uma hora desde o início consegui fazer o primeiro teste e vi, mais uma vez, o quão simples é trabalhar com Arduino.

Referências

[1] http://www.arduino.cc/playground/Code/GLCDks0108

[2] http://www.satistronics.com/myfiles/file/LCD/RT12864J-1.pdf

http://www.topwaydisplay.com/Pub/Manual/LM12864MBC-Manual-Rev0.1.pdf

9 Comentários para “Conectando display 128×64 no Arduino Mega”

  1. ola meu nome é giovan faço mecatronica em curitibanos tenho aulas com o prof. herculano
    ele falou muito bem de vc e me passou seu blog, gosto muito de eletronica entao comprei um arduino e um display quando chegar vo pidir umas dicas para programar.
    abraços.

  2. Olá Giovan,
    que bom que o Herculano indicou meu blog pra ti. Aqui tu podes conferir alguns conteúdos na área de eletrônica e principalmente na área de programação. Como vai estudar Arduino, recomendo dar uma passada no curso de programação em C que disponibilizo gratuitamente aqui: http://www.paulotrentin.com.br/programacao/curso-gratuito-programacao-c/apresentacao-e-motivacao-do-curso . Está em andamento este curso, e o tempo é curto, mas aos poucos vou continuando.

    Assim que chegar seu display me avisa, que posso dar algumas dicas práticas de como fazer a conexão. Qual o tamanho dele?

  3. ola acabei de ligar meu display 128* 64 ele apareceu um monte de quadrados e pontos
    precisa configurar algo no lcd.
    obrigado

  4. Olá Giovan,

    o que deve estar acontecendo é algum problema na regulagem do potenciômetro, você o instalou corretamente? Poderia descrever melhor o que seriam esses quadrados e pontos?

    A configuração que precisa ser feita é apenas a do potenciômetro, faz toda a diferença!
    Podes me encaminhar uma foto do display ligado?

    Abraços

  5. Olá, não entendi onde ligar o pino 17 – Reset – Desconectar durante gravação, estou colocando ele em GND.
    estou usando um arduino mega 2560 e quando rodo o programa os quadrados ficam todos acesos e nao os que quero, seria problema com o pino 17?

  6. Oi Rafael,

    desculpe a demora em responder, mas olha só, o pino 17 só atrapalha na gravação do software do computador para o Arduino.
    Seu problema parece ser simplesmente falha na configuração do trimpot (ou potenciômetro). Lembre-se que sem ele não funciona, ou quando configuramos muito brilho acontece justamente o que você citou “os quadrados ficam todos acesos”.

    Testa aí e me avisa se funcionou.
    Bons estudos!

  7. Olá Paulo, boa tarde.

    Segui teu exemplo, porém cheguei a uma situação onde eu não consegui solução por enquanto.

    Após toda a montagem conforme tua explicação, o Display permanece com o BackLight aceso e os pixels do LCD todos acesos.

    Sinceramente não entendi onde eu possa ter errado, conferi toda a fiação e a posição dos pinos do display, bem como do Arduino Mega, porém o problema persiste.

    Com o Trimpot eu consigo ajustar a luminosidade dos pixels do display, mas independentemente disso eles permanecem todos acesos.

    Será que há alguma dica p/ que possa me ajudar?

    Desde já, agradeço.

    João Paulo Thomazinho

  8. Paulo, outro detalhe.

    Meu display é o kxm12864j-4, há alguma restrição deste display para com este código/pinagem?
    Segue o DataSheet do display para facilitar: http://www.kxmlcd.com/UploadFiles/20110317134632846.pdf

    Abraços,

    João Paulo Thomazinho

  9. Olá Joao,

    seguindo o datasheet está tudo correto mesmo, é a mesma pingagem.
    No site oficial do arduino, porém, não encontrei nenhuma referência ao seu modelo específico kxm12864j-4.
    Encontrei um pessoal discutindo sobre esse display aqui: http://open-source-energy.org/forum/showthread.php?pid=1979 mas não vi nada muito conclusivo.

    Minha recomendação é que você teste essa última versão da biblioteca GLCD: http://code.google.com/p/glcd-arduino/downloads/list
    Talvez funcione.

    Você teve algum problema com o processo de compilação/upload?
    Faça os testes e me avisa se funcionou…

    Abraços

Deixe um comentário