|
|



|
|
|
|
|
Descrição
O
objectivo desta montagem é escrever um conjunto de carateres
num LCD 16x2, com controlador HD44780U
ou KS0066U
(compatível com o anterior).
Para
tal, existe todo um conjunto de regras ou protocolos, que há
que conhecer e implementar, de forma a conseguir a correcta
comunicação entre o LCD e o microcontrolador.
A comunicação é estabelecida de forma paralela,
usando um bus de 4 ou 8 bits, dependendo da forma como o hardware
está implementado, através do qual são
enviados/recebidos dados ou intruções. Há
também um bus de controlo, composto por 3 bits, que são:
E
- enable (abilita escrita ou leitura)
RW - selecciona escrita ou leitura de dados(H)
ou instruções(L)
RS - selecciona entrada de dados(H) ou
instruções(L)
Para
que o LCD funcione correctamente há que o inicializar,
e apresenta-se a seguir o diagrama de inicialização
para um bus de dados/instruções de 8 bits:

É
necessário saber também, como está mapeada
a memória do controlodar do LCD, para que se saiba exactamente
como endereçar um caracter. Apresenta-se então
um mapa com a posição vs endereço de memória,
até 24 carateres por linha (com o tipo de controlador
usado é possível ter um LCD de até 40 colunas)

Sobre
o bit E
Para
enviar dados/instruções ao LCD, colocam-se essa
informação no bus (8 bits neste caso) e pulsa-se
o bit E (enable) para que o LCD interprete o dado que tem colocado
no seu bus.
Sobre
os bits RS e R/W
Basicamente
as funções destes dois bits podem ser entendidas
pela seguinte tabela:
| RS |
R/W |
Função |
| 0 |
0 |
Escreve
instruções na memória |
| 0 |
1 |
Lê
instruções da memória (Busy Flag e
Contador) |
| 1 |
0 |
Escreve
dados na memória |
| 1 |
1 |
Lê
dados da memória |
-
Para
endreçar a memória, se o LCD estiver configurado
para usar apenas 1 linha, os endereços vão de
00h a 4Fh. se for configurado para usar 2 linhas, os endereços
da 1ª linha vão de 00h a 27h e os da 2ª linha,
de 40h a 67h:

Exemplo:
Posicionar o cursor no início da 2ª linha - 11000000b
ou C0h com RS (L) e RW (L)
Porquê
C0h e não 40h que é o endreço do
1º caracter da 2ª linha?
Para endereçar
memória o bit DB7 tem que estar ao nível
lógico 1, isto é, temos que colocar no bus
10000000b ou 80h. Assim, se quisermos posicionar o cursor
na 2ª linha, 1ª coluna, endreço 40h ou
01000000b, somamos o comando para enviar o endreço
80h á posição de cursor pretendida
40h. Temos então que enviar na realidade para o
bus, o valor C0h ou 11000000b que é o resultado
da soma dos 2 anteriores.
Num ecrã 20*4, portanto com 4 linhas, a 1ª
posição de cursor da 3ª linha tem o
valor de 14h, portanto para colocar o cursor nessa posição
enviamos o valor 80h+14h que é 94h. Para a 1ª
posição da 4ª linha o endereço
é 54h e o valor a envi |
-
Para
escrever um dado no LCD:

Exemplo:
Escrever a letra 'M' (código ASCII) - 01001101b ou 4Dh
com RS (H) e RW (L)
-
Para
verificar se o LCD está ocupado a processar a informação
que lhe foi enviada, afim de se verificar se é possível
ou não enviar-lhe nova instrução ou dado,
pode recorrer-se a uma flag de estado do LCD, a Busy
Flag (em DB7), que enquanto estiver ao nível
lógico alto (1), assinala que o LCD se encontra ocupado.
Quando for colocada ao nível lógico baixo (0)
pelo controlador do LCD, este encontra-se em condições
de poder receber novo dado ou instrução.

Tabela
ASCII
O
LCD reconhece os caracteres em código ASCII, e por isso
se apresenta a tabela de seguida:
Char Dec Hex | Char Dec Hex | Char Dec Hex | Char Dec Hex
-----------------------------------------------------------------
(nul) 0 00 | (sp) 32 20 | @ 64 40 | ` 96 60
(soh) 1 01 | ! 33 21 | A 65 41 | a 97 61
(stx) 2 02 | " 34 22 | B 66 42 | b 98 62
(etx) 3 03 | # 35 23 | C 67 43 | c 99 63
(eot) 4 04 | $ 36 24 | D 68 44 | d 100 64
(enq) 5 05 | % 37 25 | E 69 45 | e 101 65
(ack) 6 06 | & 38 26 | F 70 46 | f 102 66
(bel) 7 07 | ' 39 27 | G 71 47 | g 103 67
(bs) 8 08 | ( 40 28 | H 72 48 | h 104 68
(ht) 9 09 | ) 41 29 | I 73 49 | i 105 69
(nl) 10 0A | * 42 2A | J 74 4A | j 106 6A
(vt) 11 0B | + 43 2B | K 75 4B | k 107 6B
(np) 12 0C | , 44 2C | L 76 4C | l 108 6C
(cr) 13 0D | - 45 2D | M 77 4D | m 109 6D
(so) 14 0E | . 46 2E | N 78 4E | n 110 6E
(si) 15 0F | / 47 2F | O 79 4F | o 111 6F
(dle) 16 10 | 0 48 30 | P 80 50 | p 112 70
(dc1) 17 11 | 1 49 31 | Q 81 51 | q 113 71
(dc2) 18 12 | 2 50 32 | R 82 52 | r 114 72
(dc3) 19 13 | 3 51 33 | S 83 53 | s 115 73
(dc4) 20 14 | 4 52 34 | T 84 54 | t 116 74
(nak) 21 15 | 5 53 35 | U 85 55 | u 117 75
(syn) 22 16 | 6 54 36 | V 86 56 | v 118 76
(etb) 23 17 | 7 55 37 | W 87 57 | w 119 77
(can) 24 18 | 8 56 38 | X 88 58 | x 120 78
(em) 25 19 | 9 57 39 | Y 89 59 | y 121 79
(sub) 26 1A | : 58 3A | Z 90 5A | z 122 7A
(esc) 27 1B | ; 59 3B | [ 91 5B | { 123 7B
(fs) 28 1C | < 60 3C | \ 92 5C | | 124 7C
(gs) 29 1D | = 61 3D | ] 93 5D | } 125 7D
(rs) 30 1E | > 62 3E | ^ 94 5E | ~ 126 7E
(us) 31 1F | ? 63 3F | _ 95 5F | (del) 127 7F
LCD 20x4
Tendo
adquirido um LCD 20x4 da Optrex, exponho aqui tambem um trabalho
com o mesmo objectivo do realizado com o LCD 16x2, embora
tenha recorrido á directiva "db" (define
byte), com a qual foram definidas quatro tabelas contendo
cada uma delas, os caracteres a serem escritos nas quatro
linhas do LCD.
Datasheets
do LCD Optrex DMC20481:
Especificações
técnicas
Dimensões
físicas
Como
o LCD DMC20481 necessita de uma tensão negativa para
ajuste do contraste (pino 3 do LCD) de cerca de -3,5v usou-se
o conversor de TC7660
para gerar a requerida tensão negativa a partir dos
+5v da alimentação genérica de todo o
circuito. Este conversor requer apenas mais dois condensadores
e um potenciómetro para ajuste da tensão a fornecer
ao pino de controlo de contraste do LCD.
Mapa
de endereços de memória de diversos ecrãs
LCD:
8x1 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
| 1 |
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
8x2 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
| 1 |
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
| 2 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
16x1 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
| 1 |
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0B |
0C |
0D |
0E |
0F |
16x2 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
| 1 |
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0B |
0C |
0D |
0E |
0F |
2 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
4A |
4B |
4C |
4D |
4E |
4F |
16x4 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
| 1 |
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0B |
0C |
0D |
0E |
0F |
2 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
4A |
4B |
4C |
4D |
4E |
4F |
| 3 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
1A |
1B |
1C |
1D |
1E |
1F |
4 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
5A |
5B |
5C |
5D |
5E |
5F |
20x1 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
| 1 |
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0B |
0C |
0D |
0E |
0F |
10 |
11 |
12 |
13 |
20x2 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
| 1 |
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0B |
0C |
0D |
0E |
0F |
10 |
11 |
12 |
13 |
2 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
4A |
4B |
4C |
4D |
4E |
4F |
50 |
51 |
52 |
53 |
20x4 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
| 1 |
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0B |
0C |
0D |
0E |
0F |
10 |
11 |
12 |
13 |
2 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
4A |
4B |
4C |
4D |
4E |
4F |
50 |
51 |
52 |
53 |
| 3 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
1A |
1B |
1C |
1D |
1E |
1F |
20 |
21 |
22 |
23 |
4 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
5A |
5B |
5C |
5D |
5E |
5F |
60 |
61 |
62 |
63 |
24x2 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
| 1 |
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0B |
0C |
0D |
0E |
0F |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
2 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
4A |
4B |
4C |
4D |
4E |
4F |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
24x4 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
| 1 |
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0B |
0C |
0D |
0E |
0F |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
2 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
4A |
4B |
4C |
4D |
4E |
4F |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
| 3 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
1A |
1B |
1C |
1D |
1E |
1F |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
4 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
5A |
5B |
5C |
5D |
5E |
5F |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
40x1 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
... |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
| 1 |
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0B |
0C |
0D |
0E |
0F |
... |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
40x2 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
... |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
| 1 |
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0B |
0C |
0D |
0E |
0F |
... |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
2 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
4A |
4B |
4C |
4D |
4E |
4F |
... |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
|
|
|
|
|
|
|
 |