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).
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.
No 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.
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




agosto 17th, 2011 - 20:47
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.
agosto 18th, 2011 - 09:48
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?
novembro 2nd, 2011 - 12:40
ola acabei de ligar meu display 128* 64 ele apareceu um monte de quadrados e pontos
precisa configurar algo no lcd.
obrigado
novembro 3rd, 2011 - 09:17
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
fevereiro 9th, 2012 - 15:30
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?
fevereiro 23rd, 2012 - 16:46
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!
março 8th, 2012 - 17:34
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
março 8th, 2012 - 17:37
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
março 10th, 2012 - 18:09
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