Montagem de um LCD
Agora temos aqui a montagem de um lcd
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. |
- Para escrever um dado no LCD:
Exemplo: Escrever a letra 'M' (código ASCII) - 01001101b ou 4Dh com RS (H) e RW (L)
- Para ler um dado do LCD:
- 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 |