TPL04 Arduino Displaylcd
TPL04 Arduino Displaylcd
SDM/SE/TSE
Novembro 2023
1 Objectivo
Elaborar um circuito de teste e respectivo programa de exploração para um interface com um display de
cristais lı́quidos (LCD) de 16 colunas e 2 linhas (16x2). Á semelhança do trabalho da semana anterior,
o presente trabalho deve ser encarado como preparatório para um trabalho futuro mais elaborado. Para
tal o aluno necessita de compreender como funciona o display LCD e como é realizado o seu interface e
programação.
1.1 Enquadramento
O LCD 16x2 que usaremos neste trabalho não possui um controlador com interface em bus série (I2C ou SPI).
Estas normas de comunicação são muitas vezes usadas para comunicar com sensores e actuadores (como o
caso deste LCD) permitindo uma simplificação do esquema de ligações. Ao invés, o interface com o LCD é
realizada por intermédio de linhas digitais dedicadas num protocolo de comunicação de 4 bits de dados.
O esquema de ligações desta componente é semelhante ao da figura (e standard para este tipo de displays de
controlo por 4 ou mais bits).
Da observação do esquema de ligações é possı́vel encontrar conjuntos de sinais
3 (no esquema designado VEE mas no nosso LCD designado V0) é um pino de controlo de contraste
do display
4, 5 e 6 são sinais de controlo (Register Select, Read/Write e Enable, respectivamente)
7 até 14 são sinais de dados. Repare-se que nem todos são usados num protocolo de 4 bits.
1 - Vss → GND
4 - RS → IO digital do Arduino 0
1
1 OBJECTIVO
Este esquema de ligações é o suficiente para efectuar a ligação ao módulo do Arduino (MKR1000). Repare-se
que os pinos 7 a 10 apenas são usados em protocolos de 8 bits de dados pelo que não usaremos no nosso caso
(não temos tantos sinais digitais disponı́veis no módulo usado).
2
3 PROGRAMAÇÃO DO LCD
1.3 Material
Módulo Arduino MKR1000. Iremos usar alguns componentes do kit
https://create.arduino.cc/projecthub/products/arduino-mkr-iot-bundle?f=1
Ambiente de desenvolvimento IDE do módulo Arduino.
Componentes electrónicos
– Display LCD 16x2
– Resistência 220R
– fios de ligação
2 Montagem do LCD
Siga os seguinte passos na montagem do display de cristais liquidos
a. Certifique-se que o Arduino se encontra desligado do computador garantindo que este não se encontra
alimentado (LEDs apagados)
b. Monte o LCD na breadboard onde tem o MKR1000. Neste circuito iremos usar uma breadboard maior
para garantir que temos espaço para ligar todos os pinos dos 2 elementos (MKR1000 e Arduino)
c. Faça as ligações descritas na listagen anterior (secção Esquema de ligações do LCD)
d. Confirme que todas as ligações estão correctas e não observa curto-circuitos. Se tiver dúvidas peça ao
professor para confirmar as ligações numa primeira tentativa.
e. Ligue o Arduino ao computador.
3 Programação do LCD
Para controlar o LCD vamos fazer uso de funções previamente definidas para o efeito. Vamos analisar o que
deve conter um exemplo básico de configuração e controlo do LCD
Exemplo Hello World
#include <LiquidCrystal.h>
void setup()
{
lcd.begin(16,2);
lcd.setCursor(0, 0); // Lcd first row is 0
lcd.print("hello, world!");
3
3 PROGRAMAÇÃO DO LCD
void loop() {}
Assim devemos:
#include <LiquidCrystal.h>
Inicializar o LCD
Repare-se que lcd cria um objecto do tipo LiquidCrystal que recebe os parâmetros
ver https://www.arduino.cc/en/Reference/LiquidCrystalConstructor
Inicializar o LCD
lcd.begin(16,2);
lcd.setCursor(0, 0);
Escrever a mensagem
lcd.print(”hello, world!”);
Repare que a função loop() não tem instruções pelo que a mensagem que observa deve ser estática.
Experimente escrever outras mensagens no LCD em diferentes posições (primeira, segunda linha e em várias
colunas).
Por exemplo, tente reproduzir o seguinte aspecto da mensagem escrita
4
4 PROGRAMAÇÃO DE CARATERES ESPECIAIS
#include <LiquidCrystal.h>
void setup()
{
lcd.begin(16,2);
lcd.clear();
}
void loop() {
lcd.setCursor(0, 1);
lcd.print(millis() / 1000);
}
Verifique o que acontece quando junta numa mesma mensagem caracteres fixos e variáveis.
void loop() {
lcd.setCursor(0, 1);
lcd.print("Segundos:");
lcd.print(millis() / 1000);
}
Verifique o que sucede quando adiciona outras funções da biblioteca de funções LiquidCrystal, como por
exemplo:
lcd.scrollDisplayLeft();
% ou
lcd.scrollDisplayRight();
byte Sino[8] = {
0b00100,
0b01110,
0b01110,
5
4 PROGRAMAÇÃO DE CARATERES ESPECIAIS
0b01110,
0b11111,
0b00000,
0b00100,
0b00000
};
De seguida, necessita de criar este caractere para que o possa usar no programa. Isto deverá ser feito na
rotina de setup() após a inicialização do LCD.
lcd.createChar(0, Sino);
A partir deste momento podemos usar o caratere criado referenciando-se como byte(0). Verifique o que
observa se usar a função
lcd.setCursor(0, 1);
lcd.write(byte(0));
O byte(0) representa o caractere de um sino definido atrás. Poderá criar outros icones ou simbolos bastando
para tal criar outro(s) array(s) de bytes com a distribuição gráfica pretendida. Pode criar os bytes 0, 1, 2,
etc.