1
Apresentação O adaptador ADP.v01 é utilizado para facilitar a instalação de display Lcd 16x2 ou display Lcd 20x4 nos CLP PIC28 ou CLP PIC40 através de um flat cable de 10vias de acordo com a necessidade do cliente. Sem dúvida, o display Lcd é um dos recursos mais interessantes quando utilizamos microcontroladores. Isto porque podemos desenvolver IHM (Interface Homem Máquina) agregando grande valor ao projeto. A comunicação utilizando o ADP.v01 é feita em 4 vias de dados, de DB4 á DB7. Utilizando os pinos RB0, RB1, RB2 e RB3 do portb do microcontrolador. O pino RB4 é ligado no RS e o pino RB5 é ligado no Enable do display. O pino R/W do display fica ligado direto ao terra. Desta forma, só é possível escrever no Display Lcd. Foto nr1 O adaptador possui um trimpot para ajuste do contraste (pino VEE do display lcd), conforme foto nr1. O adaptador também possui um jumper para controle do back light, conforme foto nr2. Foto nr2 Se for retirado o jumper o back light ficará permanentemente desligado. Se ficar posicionado conforme a foto nr2, o back light ficará ligado direto. E se o jumper ficar posicionado na outra extremidade o back light será controlado pelo pino RB7 do microcontrolador, através de software. 2
Os displays já possuem internamente um microcontrolador que gerencia as funções dos mesmos. Isto facilita bastante o desenvolvimento de projetos, pois o programador se preocupa apenas em enviar os dados e a localização onde quer que os mesmos apareçam no display. Abaixo temos algumas informações importantes relativas aos dois Lcds que trabalhamos. Tabela com os 32 caracteres do display 16x2 e seus endereços absolutos (em hexadecimal) Coluna 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Linha 0 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F Linha 1 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF Tabela com os 80 caracteres do display 20x4 e seus endereços absolutos (em hexadecimal) Coluna 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Linha 0 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 Linha 1 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 Linha 2 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 Linha 3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 Pinos do display Lcd 16x2 com back light 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 A K VSS VDD VEE RS R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 Pinos do display Lcd 20x4 com back light 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 VSS VDD VEE RS R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 K A Descrição de cada pino do Display Lcd VSS - Gnd VDD - Positivo (Alimentação - 5Vcc) VEE - Ajuste do contraste RS - Tipo de informação ( 0 = comando e 1 = dado ) R/W - Leitura de dados ("1") / Escrita de dados ("0") E - Habilita leitura/escrita no barramento de dados DB0 - DB1 - DB2 - DB3 - DB4 - DB5 - DB6 - DB7 - K - A - Barramento de dados paralelo - A comunicação pode ser realizada pelas 8 vias de dados (DB0 á DB7) ou por 4 vias de dados (DB4 á DB7).. No adaptador ADP.v01 a comunicação é realizada por 4 vias de dados (DB4 á DB7). Usados para ligação do back light (iluminação de fundo). Dependendo do lote esses pinos podem vir invertidos 3
Em seguida apresentaremos dois exemplos para se trabalhar com os Lcds. Um em linguagem C, usando o compilador MikroC e outro em linguagem Assembly, utilizando o compilador MPLab No MikroC podemos utilizar um Lcd em dois modos: - Modo 4 bits - Modo 8 bits Quando utilizamos o modo 8 bits, utilizamos um port para envio dos dados e para os sinais de controle utilizamos alguns pinos de outro port. Por exemplo: RB0 a RB7 para dados e RC0, RC1 e RC2 para sinais E, R/W e R/S. Quando utilizamos o modo 4 bits, podemos utilizar somente um port para dados e controle ou utilizar dois ports, um para dados e outro para controle. No CLP PIC 40 e CLP PIC 28 utilizaremos o modo 4 bits usando o PortB para envio de dados e também sinais de controle. Temos então: R/S = RB4, EN = RB5, R/W = RB6, dados = RB3, RB2, RB1 e RB0. O comando lcd_config( ) inicializa o lcd e também configura os respectivos pinos de dados/controle na qual o módulo lcd irá trabalhar. Sintaxe: lcd_config(&portx, R/S, EN, R/W, pin_dado, pin_dado, pin_dado, pin_dado) Onde: &portx = Port utilizado A, B, C ou D; (em nossa aplicação será o PortB) R/S = pino utilizado para controle R/S; EN = pino utilizado para controle EN; (enable) R/W = pino utilizado para controle R/W; Pin_dados = pinos utilizados para envio de dados Para o nosso Clp Pic 28 ou Clp Pic 40 deverá ser configurado da seguinte forma: lcd_config(&portb,4,5,6,3,2,1,0); - mas o pino R/W do Lcd ficará aterrado direto, desta forma, será possível apenas escrever no Lcd. 4
O comando lcd_cmd( ) envia comando para o Lcd. Você pode passar uma das constantes pré-definidas para a função. A lista completa dos comandos disponíveis esta na tabela abaixo. Ex.: lcd_cmd(lcd_clear); Tabela: Comandos disponíveis LCD Command Purpose lcd_first_row Move cursor para 1ª. linha lcd_second_row Move cursor para 2ª. linha lcd_third_row Move cursor para 3ª. linha lcd_fourth_row Move cursor para 4ª. linha lcd_clear Limpa o display lcd_return_home Move cursor para a 1ª. coluna da 1ª. linha lcd_cursor_off Desliga o cursor lcd_underline_on Liga o underline no cursor lcd_blink_cursor_on Liga o modo piscante do cursor lcd_move_cursor_left Move o cursor para a esquerda sem mover o texto lcd_move_cursor_right Move o cursor para a direita sem mover o texto lcd_turn_on Liga o visor do LCD lcd_turn_off Desliga o visor do LCD sem perder os dados lcd_shift_left Move o texto para a esquerda lcd_shift_right Move o texto para a direita O comando lcd_chr( ) Imprime um caractere na tela do Lcd a partir da linha e coluna especificados. Ex.: lcd_chr(1,2, a ); Onde: "1" = representa a linha em que será feito à impressão do caractere. "2" = representa a coluna em que será feito à impressão do caractere. a = caractere a ser impresso no Lcd. 5
O comando lcd_out( ) Imprime o texto na tela do Lcd a partir da linha e coluna especificados. Ex.: lcd_out(1,2,"texto"); Onde: "1" = representa a linha em que será feito à impressão do texto. "2" = coluna a partir do qual será iniciada a impressão do texto. "texto" = texto a ser impresso no Lcd. Abaixo apresentamos um trecho de programa para um Lcd de 20 colunas x 4 linhas. lcd_config(&portb,4,5,6,3,2,1,0); lcd_cmd(lcd_cursor_off); lcd_out(1,2,"vwsolucoes.com.br"); lcd_out(2,6,"apresenta"); lcd_out(3,2,"comando basico p/"); lcd_out(4,2,"uso do Display Lcd"); 6
Agora faremos uma breve explanação de como utilizar o Lcd em linguagem Assembly com o compilador MPLab. Existem basicamente duas formas para se trabalhar com o Lcd, sendo elas: - através da leitura da busy flag na qual indica o momento exato da finalização de uma operação no lcd. - através da utilização de rotinas de atraso que garante o término das operações internas do módulo Lcd. Como a proposta aqui é para utilização do adaptador ADP.v01, utilizaremos a comunicação de dados em 4 vias e os pinos de controle da mesma forma como descritos na programação em linguagem C. Toda vez que alimentarmos um Lcd, devemos executar o procedimento de inicialização do Lcd para que ele venha a funcionar. A seqüência seria: 1 Aguardar 15ms 2 Com RS em 0, enviar 0x30 para o display (inicialização) 3 Aguardar pelo menos 4ms 4 Com RS em 0, enviar 0x30 para o display (inicialização) 5 Aguardar pelo menos 100us 6 Com RS em 0, enviar 0x30 para o display (inicialização) 7 Aguardar pelo menos 40us 8 Com RS em 0, enviar B 00101100 (comunicação por 4 vias) 9 Aguardar pelo menos 40us 10 Com RS em 0, enviar B 00000001 (limpar display e posicionar o cursor na 1linha / 1 coluna) 11 Aguardar pelo menos 1,8ms 12 Com RS em 0, enviar B 00001100 (liga o display sem cursor) 13 Aguardar pelo menos 40us 14 Com RS em 0, enviar B 00000110 (deslocamento automático do cursor p/ a direita) 15 Aguardar pelo menos 40us 7
Tabela de Comandos do LCD RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 OBSERVAÇÃO 0 0 0 0 0 0 0 0 0 1 Limpa display e retorna a 1 posição (1,53ms) 0 0 0 0 0 0 0 0 1 - Retorna cursor na 1 posição (1,53ms) 0 0 0 0 0 0 0 1 I/D SH Estabelece sentido de deslocamento. I/D=1 - cursor desloca-se para a direita após uma operação de escrita ou leitura. I/D=0 - cursor desloca-se para a esquerda após uma operação de escrita ou leitura. SH=0 - desliga o deslocamento da mensagem. SH=1 - Liga o deslocamento da mensagem. Serve para implementar as funções de insert e backspace. 0 0 0 0 0 0 1 D C B 0 0 0 0 0 1 SC RL - - 0 0 0 0 1 DL N F * * D=0 - Desativa visualização do display. D=1 Ativa visualização do display. C=0 - Desliga visualização do cursor. C=1 - Liga visualização do cursor. B=0 - Desliga o cursor piscante. B=1 - Liga o cursor piscante. SC=1 Move mensagem. SC=0 Move cursor. RL=1 Move cursor ou mensagem para a direita. RL=0 Move cursor ou mensagem para a esquerda. DL=1 Via de dados de 8 bits (DB0 á DB7). DL=0 Via de dados de 4 bits (DB4 á DB7). N e F = 00-1 linha com matriz de 7x5 + cursor. N e F = 01-1 linha com matriz de 10x5 + cursor. N e F = 1* - 2 linha com matriz de 7x5 + cursor. 0 0 0 1 Endereço CG RAM Endereça a CG RAM 0 0 1 Endereço DD RAM Endereça a DD RAM 0 1 BF Contador de endereço usado tanto para DD RAM & CG RAM BF=1 - Leitura da busy flag. BF=0 - Leitura do contador de endereço. 1 0 Dados de escrita Escreve dados na CG ou DD RAM. 1 1 Dados de leitura Lê dados na CG ou DD RAM. 8
A tabela a seguir mostra os códigos correspondentes ás instruções mais utilizadas e a sua influencia na informação exibida no visor do Lcd. Instrução Modo RS R/W Código da instrução Display ativo sem cursor 0 0 0Ch Display ativo com cursor 0 0 0Eh Controle do display Display piscando c/ cursor ativo 0 0 0Fh Display inativo 0 08h Limpa display e retorna cursor á 1 posição da 1 linha. 0 0 01h Retorna cursor á 1 posição da 1 linha e á mensagem a sua posição original 0 0 02h Sentido de deslocamento do cursor à esquerda 0 0 10h à direita 0 0 14h Sentido de deslocamento do cursor na à esquerda 0 0 04h entrada de um novo caractere à direita 0 0 06h Sentido de deslocamento da mensagem à esquerda 0 0 07h na entrada de um novo caractere à direita 0 0 05h Deslocamento da mensagem s/ a à esquerda 0 0 18h entrada de um novo caractere à direita 0 0 1Ch Endereço da primeira posição 1 linha 80h 0 0 2 linha C0h A tabela a seguir apresenta os caracteres que podem ser exibidos no display e os respectivos valores, em hexa, que podem ser enviados pela linha de dados do Lcd. No CD que acompanha o Clp Pic 28 e/ou Clp Pic 40 tem um exemplo básico de programa para escrever no Display Lcd 16x2 e Display Lcd 20x4, nas linguagens C e Assembly. 9
10