segunda-feira, 5 de março de 2012

2º aula de MCUs: Controlando um Display de LCD

Nessa aula, vou ensinar a usar a IHM (interface homem-maquina) mais comum: os displays de LCD.

1.Os displays


Existem dois tipos de displays de LCD: os gráficos e os alfanuméricos. Os gráficos são aqueles onde vc consegue criar imagens personalizadas como esse:


Um display gráfico com resolução de 128x64 pontos

Esses são mais caro, na faixa de uns R$50, R$60. Eles possuem várias resoluções, como 128x64 e 256x128, e é medida em pontos.

Já os alfanuméricos, que é o tipo que iremos usar, é usado apenas para letras, números e alguns símbolos. Pode-se desenhar neles, mas fica estranho. Esse é mais barato, na faixa de R$20. 

Display alfanumérico


 Esses displays não são identificados pela resolução, mas sim pelo número de caracteres (linha x coluna). Usaremos um display 16x2, ou seja, duas linhas que possuem capacidade para 16 caracteres (espaço também conta como caracter).

2.Programa

O controle de um display de LCD pelo mikrobasic é extremamente fácil. O programa a seguir escreve a palavra "Scroll" e faz ela ficar passando de um lado para o outro do display e da uma piscada no backlight (luz de fundo). O programa deve ser baixado aqui, e deverá ser aberto no mikrobasic. Deverá ser criado um projeto, o codigo então será copiado e vc compilará (se não sabe como fazer isso, leia a ultima materia aqui). O código está com tudo explicado, então irei ressaltar apenas os comandos do Display:

No início do programa, eu mostro a configuração dos pinos do display, ou seja: qual pino do MCU será conectado ao display.

Os comando em sí são:

LCD_Init() : inicializa o display;
LCD_Out(x,y,"texto") : escreve texto na linha x e coluna y (é nescessário a palavra estar entre aspas);
LCD_Out_CP("texto") : escreve texto na posição corrente, ou seja, na posição após a posição do ultimo caracter inserido (na posição onde estará o cursor). Se o último caracter está na 3º coluna, o texto será inserido na 4º coluna;
LCD_Chr(x,y,"caracter") : escreve um caracter na linha x e coluna y;
LCD_Chr_CP("caracter") : escreve um caracter na posição corrente;
LCD_Cmd(_Comando) : dá um comando para o display. Ex: LCD_Cmd(_LCD_CLEAR) (limpa o display).

A tabela completa de comandos segue a baixo (está em inglês mas acredito que vocês consigam ler, se não, me perguntem):


 3.Circuito

O circuito não é complicado, ainda mais pelo fato de você definir os pinos a serem usados. No caso do programa passado, usaremos o PORTB seguindo a seguinte esquema:


ATENÇÃO: ESQUECI DE POR O OSCILADOR NO ESQUEMA, MAS É SÓ FAZER COMO NO ESQUEMA DO LED TEMPORIZADO!!!!!
O bloco cinza é o controle do backlight. Confira no datasheet do fabricante do sue display, mas geralmente, a tensão de alimentação do backlight é de 4.2V (por isso o resistor de 56R) e a corrente é mais alta do que o PIC pode lidar, por isso usamos um transistor. O bloco azul é apenas um potenciômetro/trimpot para controlar o contraste do display. Os pinos do backlight estão marcados como NC, mas são sim os pinos do BL. Normalmente a numeração do display vem impressa no conector, caso contrario busque a pinagem na internet. O meu, se alguem comprar igual, é um Winstar WH1602A (16x2).
DICAS:

Se vc quiser prever como vai ficar uma frase ou palavra no seu LCD, vc pode usar o LCD screenshot generator. Um programinha em Java bem útil e fácil de se usar. Link: http://avtanski.net/projects/lcd/

Se você quiser fazer uma seta no display (tipo assim -->), digite o ~. O til faz uma flecha no display (não me pergunte o porque!)

Qualquer dúvida é so perguntar. Espero imagens e videos dos projetos funcionando.
Ateh mais!

2 comentários:

  1. The reason that right arrow is displayed instead of "~" is that most LCD display modules have this character at address 0x7E (in ASCII 0x7E is tilde).

    Here is a typical character table of a text LCD module: http://www.industrologic.com/mt1char.gif

    --
    Alex

    ResponderExcluir
    Respostas
    1. Thanks by this explanation and by the character table. Thanks by read my blog. Stay with us!

      Excluir