TPL04 Arduino Displaylcd

Você também pode gostar

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 6

Arduino MKR1000 :: Interface a Display de Cristais Lı́quidos (LCD)

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

ˆ 1 e 2 são pinos de alimentação do LCD

ˆ 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.

ˆ 15 e 16 são pinos de controlo de brilho da retroiluminação

1.2 Esquema de ligações do LCD


Atendendo a esta descrição, optamos por realizar a seguinte ligação de alguns dos pinos

ˆ 1 - Vss → GND

ˆ 2 - Vdd → +5V (nesta montagem usaremos os +5V disponı́veis no pino do Arduino)

ˆ 3 - V0 (na figura VEE) → GND

ˆ 4 - RS → IO digital do Arduino 0

1
1 OBJECTIVO

ˆ 5 - R/W → GND (isto é sempre em modo de escrita - Write)


ˆ 6 - E → IO digital do Arduino 1
ˆ 7 - DB0 → não usada
ˆ 8 - DB1 → não usada
ˆ 9 - DB2 → não usada
ˆ 10 - DB3 → não usada
ˆ 11 - DB4 → IO digital do Arduino 2
ˆ 12 - DB5 → IO digital do Arduino 3
ˆ 13 - DB6 → IO digital do Arduino 4
ˆ 14 - DB7 → IO digital do Arduino 5
ˆ 15 - LED+ → usar uma resistência de 220R para ligar a +5V
ˆ 16 - LED- → GND

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>

LiquidCrystal lcd(0, 1, 2, 3, 4, 5);

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:

ˆ Incluir a biblioteca das funções pré-definidas para interagir com o LCD

#include <LiquidCrystal.h>

ˆ Inicializar o LCD

LiquidCrystal lcd(0, 1, 2, 3, 4, 5);

Repare-se que lcd cria um objecto do tipo LiquidCrystal que recebe os parâmetros

LiquidCrystal(rs, enable, d4, d5, d6, d7)

ver https://www.arduino.cc/en/Reference/LiquidCrystalConstructor
ˆ Inicializar o LCD

lcd.begin(16,2);

ˆ Indicar qual a posição de inicio de escrita

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

3.1 Sequência de Mensagens


Verifique o que observa com o seguinte código

#include <LiquidCrystal.h>

LiquidCrystal lcd(0, 1, 2, 3, 4, 5);

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.

int time; % variavel global

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();

Não se esqueço do delay!

4 Programação de carateres especiais


Para gerar caracteres especiais devemos criar um o caracter na forma de uma variável global de 8 elementos
binarios (cada rectângulo do display tem 5 por 8 pixels). Neste caso vamos criar um array de bytes com 8
elementos, sendo cada elemento composto por 5 bits. O prefizo 0b significa que a informação introduzida é
reconhecida como uma sequência de bits

byte Sino[8] = {
0b00100,
0b01110,
0b01110,

5
4 PROGRAMAÇÃO DE CARATERES ESPECIAIS

0b01110,
0b11111,
0b00000,
0b00100,
0b00000
};

Este array corresponde à seguinte matriz de pixels 5x8:

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.

Você também pode gostar