Os microcontroladores PIC das séries PIC16F913/16F914/16F916/16F917 e 16F946 possuem um módulo integrado que possibilita sua utilização direta com displays de cristal líquido (LCDs). Esse recurso torna-os extremamente versáteis principalmente para o desenvolvimento de produtos de consumo, industriais e outros, com uma considerável economia de componentes. No seu Application Note AN1070, a Microchip ensina como utilizar essa série de PICs com LCDs. Nesse artigo procuramos resumir o conteúdo desse documento que pode ser acessado na íntegra no site da Microchip em www.microchip.com .
No seu Application Note AN1070 a Microchip mostra passo-a-passo como configurar o PIC para operar com displays LCD. Uma documentação adicional com informações sobre as características do LCD também pode ser encontrada no site da empresa. Em especial recomendamos o AN658.
O Módulo Driver LCD
A finalidade do módulo driver LCD do PIC é gerar os sinais necessários à excitação de diversas configurações de LCDs. Assim, os níveis de polarização, frequência e esquemas de excitação podem ser configurados por software no próprio PIC.
As únicas entradas que exigem a utilização de sinais externos são a VLCD1, VLCD2 e VLCD3 por onde entram os níveis de polarização.
O módulo driver LCD pode ser conectado diretamente aos segmentos e as linhas comuns do display. A comutação para que os sinais sejam enviados aos módulos é feita internamente. Através de programa, pode-se utilizar o display de modo a mostrar a informação desejada.
Setup Inicial
Antes de se gravar o software deve-se observar 3 passos de ajustes iniciais.
• Conexões de hardware: as entradas e saídas do módulo driver LCD devem estar fisicamente conectadas ao LCD.
• Inicialização do módulo LC: os registros de funções especiais devem ser configurados para operar com o display LCD que está sendo usado.
• Mapeamento dos segmentos do LCD: cada segmento precisa ser mapeado pelo software.
Vejamos como fazer isso em detalhes:
Conexões de Hardware
Essas conexões consistem na fixação dos níveis de tensão de polarização e no clock externo, que é opcional.
Os pinos de polarização são indicados por VLCD3, VLCD2 e VLCD1, consistindo em entradas analógicas para o módulo driver, as quais são comutadas internamente para as linhas comuns e de segmentos de modo a gerar os níveis de tensão exigidos pelo display para seu funcionamento.
O módulo driver LCD suporta três modos de polarização: estático, polarização ½ ou polarização 1/3. O projetista deve consultar o datasheet do módulo para saber qual é a tensão que deve ser usada na sua polarização.
Para operação estática, uma tensão de entrada é fornecida apenas ao pino VLCD3. Essa tensão é especificada no data sheet do LCD. Observe apenas que essa tensão não deve ser maior do que o Vdd do microcontrolador devido á presença de diodos clamping nessas entradas.
Na polarização de ½ e 1/3, um divisor de tensão pode ser usado para se obter metade da tensão V 1/3 da tensão V, onde V é a tensão do driver especificada no datasheet do LCD. Na figura 1 temos um exemplo de divisor resistivo que pode ser usado para esse tipo de polarização.

Nessa figura temos a polarização para ½ da tensão V. Para uma polarização com 1/3 de V temos o circuito mostrado na figura 2.

Os resistores admitem uma grande faixa de valores. Os valores exatos podem ser obtidos experimentalmente entre 10 k e 1 M ohms.
Para o sinal necessário à temporização, podem ser usadas uma das seguintes fontes de clock do PIC disponíveis no módulo driver LCD:
• FOSC/8192
• T1OSCC/32
• LFINTOS/32
Um cristal de clock externo de 32 kHz pode ser conectado para controlar o T1OSC. A escolha do tipo de clock vai depender da aplicação.
Um recurso importante do driver LCD é sua capacidade de gerar sinais para o display mesmo quando no modo de baixa potência (sleep).
Depois de fornecer todos as conexões de entrada do módulo driver LCD, as saídas devem ser conectadas. O módulo driver LCD possui as seguintes saídas: comuns COM0, COM1, COM2 e COM3 e as saídas de segmentos SEG0, SEG1 até SEGn. Esses pinos devem ser conectados aos segmentos e pinos comuns correspondentes do display que está sendo usado.
Veja que os displays podem ter de 1 a 4 pinos comuns, dependendo do número de dígitos e modo de multiplexação. A ordem de conexão não é importante, pois o mapeamento é feito por software,
Inicialização
Para inicializar o Módulo LCD devem ser observados os seguintes passos:
1. Configure os ajustes TRIS
Quando o módulo driver LCD é habilitado ele ajusta automaticamente o TrIS mas, é importante assegurar que os ajustes TRIS do microcontrolador sejam inicializados num estado conhecido.
2. Habilitar os pinos de polarização do LCD
Os pinos da tensão de polarização do LCD (VLCD3,2 ,1) são pinos de uso geral. Quando os bits VLDCON e VLDCEN são fixados, todos os ajustes TRIS são ajustados para funcionar como entradas de polarização do LCD
3. Selecione uma fonte de clock
Diversos são os fatores que determinam a fonte de clock escolhida. Um deles é o que envolve a utilização do modo sleep para minimizar o consumo. São os seguintes os ajustes no registro LCDCON:
• CS<1:0>=00=FOSC/8192
• CS<1:0>=01=T1OSC/32
• CS<1:0>=1x=lFINTOSC/32
4. Selecione o modo de Multiplex
A multiplexação minimiza o número de pinos necessários para a conexão ao display. No datasheet do display usado, a especificação de multiplexação pode ser indicada como ½, 1/3 ou ¼. Os ajustes são feitos em função deles no registro LCDCON, da seguinte forma:
• LMUX<1:0>=00 = estático
• LMUX<1:0>=01 = ½ Mux
• LMUX<1:0>=10 = 1/3Mux
• LMUX<1:0>=11= ¼ Mux
5. Selecione o tipo de forma de onda
O módulo driver nLCD pode gerar sinais do tipo A ou do tipo B. No AN658 da Microchip o leitor pode encontrar mais informações sobre o significado desses sinais. A diferença básica entre os dois tipos de sinais está na forma como as transições são feitas. Menos transições fazem com que o display tenha melhor contraste. Isso se consegue com o sinal tipo A.
O bit LCDPS, WFT deve ser usado para fixa o tipo de sinal a ser usado.
6. Selecione o modo de polarização
O modo de polarização deve ser selecionado durante o ajuste de hardware. Esse modo é especificado no datasheet do LCD, sendo selecionado pelo bit LCDPS, BIASMD. As configurações possíveis são:
• Quando LMUX<1:0>= 00
0 = modo de polarização estática, não ajuste o bit para 1
• Quando LMUX<1:0>=01
0 = Modo de polarização ½
1= Modo de polarização 1/3
• Quando LMUX<1:0>=10
0 = modo de polarização ½
1 = modo de polarização 1/3
• Quando LMUX<1:0>=11
0 = Polarização 1/3, não ajuste esse bit para 0
7. Selecione a taxa de refresh
A qualidade da imagem do display é afetada por esse ajuste. Com menos de 30 Hz temos cintilação e com uma frequência excessiva o LCD não responde às transições e com isso temos problemas de contraste. O projetista deve testar a melhor frequência para sua aplicação.
A taxa de refresh é selecionada gravando-se um valor de 4 bits nas portas LP3 a lP0 do registro do LCD. O pre-scaler existente exige que se leve em conta o clock, o que exige um cálculo feito a partir da seguinte tabela, o qual depende do esquema de multiplexação do LCD:

8. Habilite as linhas de segmento do display
Existem diversos registros de funções especiais LCDSE, dependendo do número de linhas de segmento disponíveis. Cada bit de lCDSE está associado a um pino de segmento. Mais informações veja no datasheet do PIC16F91X). Colocando o bit LCDSE no nível alto, o pino correspondente do microcontrolador é configurado para ser usado como uma linha de segmento do LCD. No nível baixo a linha é desabilitada.
9. Limpe os registros LCDDATA
Existem diversos registros de funções especiais lCDDATA, dependendo do número de linhas de segmentos disponíveis. Cada bit de um registro LCDDATA corresponde a segmento E (AND) combinação de linhas comuns como indicado no datasheet do PICF91X.
Assim, esses bits do registro LCDDATA são mapeados para segmentos ou pixéis específicos do LCD. Fixando ou apagando esses bits podemos ligar ou desligar esses segmentos ou pixéis específicos. Limpe todos os registros do LCDDATA para inicializar o LCD num estado desligado.
Mapeamento dos Segmentos do LCD
O datasheet do LCD fornece os nomes dos segmentos. Na figura 3 temos um exemplo de como isso é feito normalmente.

Usando comandos “define” em C ou Assembly é possível definir cada bit LCDDATA, de modo a fazer o ajuste ou limpeza do bit habilitando os segmentos. Com isso é possível elaborar o código que vai produzir no display a informação desejada.
Cada segmento do LCD é conectado a um terminal comum (COM) e a uma linha de segmento (SEG). Normalmente a pinagem do LCD é incluída no datasheet desse componente de modo que eles possam ser conectados.
Na tabela abaixo temos a maneira típica como essa informação é fornecida para um display.

Usando essa tabela é possível determinar qual pino SEG do microcontrolador deve ser ligado em qual pino do LCD. Na informação fornecida que é o mapeamento do LCD também existe o endereço do LCDDATA que corresponde ao segmento. Uma vez que o mapeamento seja feito, fica fácil programar o que o display deve mostrar numa determinada aplicação.

Operação
Depois de conectar o hardware, configurar o módulo driver do LCD e mapear os segmentos do LCD, o display estará pronto para ser usado.
Os segmentos podem então ser ligados pelo simples controle dos bits do registro LCDDATA. Na tabela abaixo temos um exemplo de como isso pode ser feito pelo software.

Conclusão
O módulo driver LCD disponível nos PICs indicados podem excitar displays de cristal líquido diretamente sem a necessidade de nenhum circuito adicional como vimos nesse artigo.
Isso torna esses PICs extremamente versáteis para aplicações em que se deseja excitar esse tipo de display, economizando componentes, espaço na placa e obtendo-se uma simplificação enorme no projeto.