DISPLAY SERIAL II COM MICROCONTROLADOR PIC


Um display LCD tipo caracter com comunicação serial para uso com microcontroladores e outros dispositivos com comunicação RS-232. Neste artigo você receberá as informações necessárias para montar o seu próprio Display Serial.



O DISPLAY SERIAL II - PROPOSTA

O Display Serial II possui as seguintes características:

  • Desenvolvido com microcontrolador Microchip; 
  • LCD tipo caracter com 16 colunas e duas linhas;
  • Velocidade de comunicação selecionável através de jumper;
  • Dois formatos para a comunicação: RS-232 e TTL;
  • Presença de um “Drive” para comunicação RS-232;
  • Tamanho reduzido para facilitar a sua instalação na parte traseira de um LCD 16 x 2;
  • Quatro comandos previamente implementados:
    • Apaga display;
    • Muda para linha 1;
    • Muda para linha 2;
    • Posiciona cursor na linha/coluna desejada.

Observando as características apresentadas é fácil perceber que este display, apesar de simples em sua concepção, poderá atender as necessidades da maioria dos hobistas e estudantes. E se você tiver alguma experiência na Linguagem  "C" ficará bem simples a implementação de mais comandos internos, aumentando assim as possibilidades de uso para o display.



ONDE USAR

Um display serial pode ser utilizado em uma série de aplicações. Suas principais vantagens em relação a um display LCD normal são:

  • Redução do número de pinos de I/O utilizados de um microcontrolador qualquer para o controle do LCD. Geralmente, para um display LCD comum (paralelo) são necessários de 6 a 11 pinos, contra apenas um único pino para o Display Serial;
  • Tamanho reduzido para o programa final. Com o uso de um display serial você não tem que se preocupar com o desenvolvimento das rotinas de controle do LCD, inicialização do mesmo, etc. Desta forma o código fonte final fica menor e mesmo os microcontroladores com área de programa reduzidas podem se beneficiar do uso de um LCD Serial.

Você já deve ter percebido que este display é ideal para aplicações com microcontroladores, mesmo com aqueles que não possuem grandes espaços em sua memória de programa, como é o caso do Basic Step 1.

Porém este display também pode ser ligado a equipamentos que possuam uma porta de comunicação RS-232 como um PC, por exemplo. Desta forma pode-se levar informações a uma certa distância a um usuário de uma máquina no chão de fabrica ou a um balcão de atendimento (no caso de uma automação comercial), etc. Para automação as chances de aplicação deste display são grandes e só dependerão da criatividade de cada um.



O CIRCUITO

Na figura abaixo pode ser visto o circuito eletrônico do Display Serial II. Todo o controle é feito pelo microcontrolador (CI1) PIC16F628 Microchip, um velho conhecido. As principais características deste microcontrolador são:



- 2k bytes de FLASH (área de programa);
- 224 bytes de RAM;
- 128 de EEPROM;
- 15 pinos de I/O com dreno de corrente na ordem de 20mA;
- 2 comparadores Analógicos;
- 2 “timer’s” de 8 bits e um de 16 bits;
- 1 canal CCP (Capture, Compare and PWM);
- 1 canal USART para comunicação RS-232 ou SPI;
- Opções para oscilador, inclusive interno a 4MHz;
- Wath Dog Timer (cão de guarda) interno;
- Controle de Power-on Reset e Power-up Timer;
- Proteção de código contra cópias;
- Código de instruções reduzido (35 instruções);
- Encapsulamento DIP com 18 pinos.

Se você quer saber mais sobre este microcontrolador, aconselho o download do data sheet no site do fabricante, Microchip.

CI2, um MAX232 ou equivalente, permite converter os níveis de tensão do padrão RS-232 de um PC (+/-12VDC) para o padrão TTL (0-5VDC) do PIC, e vice-versa.

O jumper JP1 permite selecionar a velocidade de comunicação do display. Com o jumper aberto a mesma é de 2400 bps (nível lógico “1” no pino 3 - RA4 - do microcontrolador) e fechado de 9600 bps (nível lógico “0” no pino 3 - RA4 - do microcontrolador).

O jumper JP3 permite selecionar o tipo de “entrada” desejado. Quando na posição 1-2 ela será feita no padrão RS-232 (no caso da ligação do mesmo em um PC) e na posição 2-3 esta será feita no padrão TTL (para a ligação do display em um microcontrolador, por exemplo).

Os capacitores C1 e C6 atuam como “desacopladores” (filtros) para CI1 e CI2, respectivamente. Os capacitores C2 a C5 são capacitores auxiliares para a CI2. Eles ajudam na “adaptação” dos níveis de tensão TTL para RS-232 e vice-versa. O trimpot P1 permite ajustar o contraste do LCD.

O LCD utilizado deve ser, necessariamente, tipo caracter com 16 colunas e 2 linhas. Acredito que um LCD 16x2 é mais que suficiente para a maioria das aplicações (pelo menos para mim, sempre foi). Nenhum outro é admitido, pois o programa de controle do microcontrolador foi desenvolvido apenas para este tipo exclusivamente. A adaptação de outros tipos de LCD como 20x4, 16x4, 16x1, 40x2 é possível, porém você mesmo deverá providenciar as alterações no circuito e programa para obter sucesso.

A entrada da comunicação, assim como da fonte é feita através do conector “IN”. No pino “1” deste conector deverá ser ligado o sinal TX do transmissor (PC ou microcontrolador), no pino “2” a tensão de alimentação 5 VDC e no pino “3” o GND da comunicação e alimentação.

A alimentação do circuito poderá ser retirada do próprio circuito onde o Display Serial for ligado ou ainda de uma fonte externa com 5VDC e capacidade de fornecer pelo menos 300 mA de corrente.



MONTAGEM

Na figura abaixo você leitor tem minha sugestão para o lay-out para a confecção do circuito impresso. O mesmo tem apenas uma face e sua confecção não será trabalhosa. A montagem do circuito em placas tipo padrão ou mesmo em matrizes de contato também é possível. A escolha de um método ou outro é livre.

Utilize suportes para todos os CI’s (CI1 e CI2). Os capacitores C2 a C5 são do tipo eletrolíticos e, portanto polarizados. Tome cuidado ao monta-los na placa. Os jumpers JP2, JP4 e JP5 podem ser feitos com pequenos pedaços de fios rijo.

O uso de “barra de pinos” para JP1 e JP3 é recomendável. Desta forma, com o uso de straps fica fácil a seleção da velocidade (2400 ou 9600 bps) e tipo de entrada admitida (TTL ou RS-232). Na falta deste tipo de terminal você poderá utilizar chaves “H-H” comuns, por exemplo.

Para o conector “IN” você poderá utilizar também “barra de pinos” 180º ou ainda 90º. Outros tipos de conectores também podem ser experimentados. A montagem de fios diretamente na placa também é possível, sendo esta uma opção bem barata e também muito funcional.

O trimpot P1 deve ser necessariamente do tipo mini horizontal. A montagem de outros tipos na placa dependerá de alterações na mesma.

Aconselho o uso de um terminal “barra de pinos fêmea” para o encaixe do LCD a placa. Desta forma você também poderá utilizar o LCD em outras montagens e testes. No caso de uma montagem definitiva, o uso de uma barra de pinos macho 180º com 14 pontos, soldada diretamente ao display e a placa, é uma excelente alternativa. O uso de fios para as ligações também é possível. Use a opção que melhor lhe convier.

Durante a montagem da placa de controle ao LCD, note que a mesma é feita de maneira que os componentes da placa de controle ficarão voltados para fora. Oriente-se pela numeração dos pinos de ligação tanto da placa quanto do LCD (14 pinos). Alguns LCDs com “backligth” possuem dois pinos a mais, e estes devem ser ignorados durante a montagem. Um outro cuidado muito importante é não encostar as placas! Não monte uma placa encostada na outra!!! Tenha muita atenção para evitar curto-circuitos!!!

Se você deseja utilizar um LCD com backligth com a placa deverá fazer as ligações do sistema de iluminação à parte, com fios. Para isso basta ligar o “anodo” do backligth ao 5VDC da placa através de um resistor limitador de 56 a 100 Ohms com ¼ Watt de dissipação e o catodo ao GND da placa. Estas ligações podem ser feitas no conector “IN”, por exemplo. Lembrando que a não utilização do resistor limitador, em alguns casos, poderá causar a queima do backligth do seu display.

O cabo de comunicação serial a ser utilizado com este circuito, no caso do uso do mesmo com equipamentos RS-232 (como um PC, por exemplo) deverá ser construído a partir das informações presentes abaixo.

DB09 fêmea                                                                          Display Serial
3-----------------------------------------------------------------------------IN-1
5-----------------------------------------------------------------------------IN-3
5VDC-------------------------------------------IN-2

No caso da comunicação TTL (entre um circuito microcontrolador e o display, por exemplo) o cabo será bem simples, com três vias, sem nenhum segredo em sua montagem.




O PROGRAMA

Mais abaixo, em downloads, você encontrará o programa de controle do display. Está disponível no pacote o código fonte e o arquivo HEX, necessário a gravação do microcontrolador. Desta forma você não precisará re-compilar o código fonte. Isto só será necessário, caso você realize alguma alteração no programa original.

Utilizei para o desenvolvimento e compilação deste programa o compilador PIC CCS C. A empresa CCS fornece uma versão demo que poderá ser utilizada em seus testes. Esta versão possui algumas limitações como os tipos de microcontroladores habilitados e também no tamanho máximo do programa a ser compilado, porém é uma boa alternativa para aqueles que desejam “entrar” no mundo da programação na linguagem C, mais especificamente dedicada aos microcontroladores PIC Microchip.

É importante salientar novamente que você não precisa baixar da Internet o compilador, pois juntamente com o código fonte, também foi fornecido o arquivo compilado com mesmo nome, porém extensão HEX (DISPLAY_SERIAL.HEX). Este arquivo será utilizado para a gravação do microcontrolador, sendo o uso do compilador necessário apenas para alterações ou estudos.

Outro detalhe. Faz algum tempo que fiz este projeto e o compilador já era um tanto "velhinho" na época. Pode ser que em alguns casos, ao compilar hoje com uma nova versão do mesmo compilador apareçam alguns erros devido justamente as diferenças de versões (e isso é bastante comum). Se isso acontecer, você deverá analisar o que o compilador está "dizendo" através das mensagens e providenciar as correções. E isso fica por conta de cada um!

O código fonte foi ricamente comentado para ajudar na sua compreensão. Porém a seguir falarei um pouco sobre o seu funcionamento, descrevendo alguns detalhes do programa. Ele começa por iniciar o microcontrolador com a direção dos pinos (entrada ou saída), o Watch Dog Timer – relógio cão de guarda que evita que o programa se “perca” e assim que o microcontrolador trave por algum motivo - e a USART do microcontrolador para a comunicação RS-232/TTL com o dispositivo de controle do display (PC, equipamentos com porta RS-232 ou um microcontrolador)

Durante a inicialização, o microcontrolador configura o LCD e lê o jumper JP1 que determinará a velocidade desejada de trabalho. Se o mesmo estiver aberto, o resistor R1 fornecerá nível lógico “1” ao pino RA4 e o programa manterá a velocidade “default” de 2400 bps. Caso o mesmo esteja fechado, o pino RA4 receberá nível lógico “0” e a velocidade de comunicação será re-programada para 9600 bps.

É importante que você entenda que a condição de JP1 só é lida durante o start-up (ligar) do circuito. Após isso, de nada adiantará alterar a condição de JP1, pois a velocidade não será alterada. Apenas desligando o display e alterando JP1 que uma nova velocidade poderá ser re-programada.

Após a inicialização do microcontrolador e LCD, o programa ficará preso na função “main” (principal). Nesta nada é feito, a não ser a re-inicialização do relógio “cão de guarda” (WDT), evitando assim que o mesmo reset o microcontrolador desnecessariamente. Pode parecer estranho para aquele sem muito conhecimento com microcontroladores, mas todas as outras funções presentes no processo são operadas por meio da interrupção da USART.

No programa a interrupção para tratamento da USART é a mais importante. Sempre que um caracter for recebido pela USART do microcontrolador, esta gera uma interrupção e então o programa é desviado para a função “RDA_isr()”. Esta faz o tratamento do dado recebido.

Este tratamento consiste em verificar se o caracter recebido é de controle ou um caracter a ser grafado no display. Para facilitar o controle do display foram inseridos alguns comandos internos. Estes comandos estão apresentados na tabela abaixo.

Tabela – Comandos presentes no display

Código do comando Descrição do comando
Decimal Hexadecimal ASCII
01 01H SOH
Start of Heading”
Apaga display e posiciona cursor na linha 1, coluna 1
02 02H STX
Start of Text”
Posiciona cursor na linha 2, coluna 1 (não apaga conteúdo da linha 1)
03 03H ETX
End of Text”
Posiciona cursor na linha 1, coluna 1 (não apaga conteúdo da linha 2)
128 a 159 80H a 9FH Caracteres especiais da tabela ASCII Posiciona cursor na coluna solicitada
128 – linha 1, coluna 1
129 – linha 1, coluna 2
130 – linha 1, coluna 3
.
.
.
157 – linha 2, coluna 14
158 – linha 2, coluna 15
159 – linha 2, coluna 16

Para enviar um byte de controle ao display, é necessário enviar antes deste um byte de “abertura de comando” FEH (254 decimal). Nenhum comando é aceito, sem que este esteja precedido do byte de “abertura de comando”. Este informará ao microcontrolador que o próximo byte recebido é na verdade um caracter de controle e não um caracter a ser grafado no display.

Ainda sobre os caracteres de controle, é necessário compreender que estes não são os caracteres ASCII 1, 2, 3, etc. Para grafar o caracter “1” no display o programa de controle (seja ele no PC ou em um microcontrolador) enviará o byte 31H (49 decimal). Aconselho estudar atentamente a tabela acima e se achar necessário pesquisar na Internet mais sobre a tabela ASCII para compreender melhor o que foi aqui colocado.

Um outro detalhe também muito importante sobre o programa é que o compilador CCS insere no código final a ser gravado no microcontrolador (arquivo HEX), comandos que permitem ligar e desligar as interrupções. Isso evita que ao atender uma determinada interrupção, o microcontrolador sofra uma segunda interrupção e assim consecutivamente. Ou seja, ao entrar em uma função de tratamento de interrupção, todas as outras (e a própria) são desabilitadas. Enquanto as operações dentro da função de tratamento de interrupção atual não se finalizarem, nenhuma outra será chamada ou atendida. Agora você pode entender a importância do Watch Dog Timer. Caso algo na lógica do programa saia errado, o WDT re-inicia o microcontrolador e suas operações.



TESTE E USO

Após a montagem, seja qual for o método escolhido, é recomendável uma verificação minuciosa na mesma. Reveja todas as ligações, as soldas, posições dos componentes, etc. Gaste alguns minutos nesta verificação. Não tenha pressa em ligar o circuito. Alguns minutos gastos em uma boa verificação poderão representar a diferença entre o sucesso e o fracasso nesta montagem.

Faça o download do arquivo HEX para gravar o microcontrolador. Grave-o e insira-o na placa, através de seu respectivo suporte.

Não entrarei nos detalhes envolvidos na programação do microcontrolador PIC Microchip neste artigo. Acredito que todo aquele que se propor a montar o circuito aqui sugerido possui a experiência necessária com a gravação do microcontrolador utilizado.

Para testar o circuito existem duas alternativas: a primeira delas é testar o display ligado a um PC. Para este teste, você só precisa de uma fonte de 5 VDC, um PC com porta RS-232, um programa tipo terminal quaquer como o HyperTerminal do Windows, por exemplo, e um cabo de comunicação RS-232, conforme descrito anteriormente.

1º) Configure os jumpers como segue: JP1 “fechado” (9600 bps) e JP3 na posição 1-2 (RS-232).
2º) Conecte o cabo de comunicação entre o display e o PC, utilizando o conector IN.
3º) Execute o programa Hyper Terminal (para ambiente Windows) e configure-o (9600, n, 8, 1).
4º) Ligue a fonte e aguarde surgir o cursor no LCD.
5º) Atue sobre P1 para que o cursor fique com o contraste desejado.
6º) Tecle algo na tela do PC. Neste momento você verá o caracter teclado grafado no display.

Para testar o comando “Apagar display”, por exemplo, basta segurar a tecla “ALT” enquanto digita “0254”, solte-a, e em seguida volte a pressiona-la novamente (tecla ALT) enquanto digita “01”. Desta forma o programa não enviará os caracteres “2”, “5” e “4”, além dos caracteres “0” e “1”, mas sim os caracteres FEH e 01H, respectivamente.

Um segundo teste consiste em utilizar o circuito com um microcontrolador qualquer como um Basic Step 1, por exemplo. Neste caso, um programa como o sugerido a seguir poderá ser utilizado. Não se esqueça de mudar a posição de JP3 na posição 2-3 (TTL) e JP1 para “aberto”, pois o BS-1 não trabalha com taxas acima de 2400 bps.

Programa exemplo para BS-1

'Programa display_232.bas
'Teste do display serial Márcio Soares
'Márcio José Soares - 31/01/2006
'Compilador utilizado neste teste: 1.0.0.0
'Firmware do Step 1 - 2.5

symbol cmd = 254
symbol clear = 1
symbol linha2 = 2
symbol canal = 0
symbol tmp = 50
symbol i=b0
dirs = %11111111


inicio:
   pause 2000

   for i=1 to 2
      gosub apaga_disp
   next

      serout canal,T2400,(" Display Serial")
      pause tmp

      serout canal,T2400,(cmd, linha2)
      pause tmp

      serout canal,T2400,(" 123456")
      pause tmp


pare:
   goto pare

apaga_disp:
   serout canal,T2400,(cmd, clear)
   pause tmp
   return



CONCLUSÃO

Espero que com a montagem deste display você possa usufruir de mais uma “ferramenta” em sua bancada de testes e ainda possa ter muitas idéias para o uso da mesma. É minha intenção ajudar sempre que possível com idéias na construção de pequenas “ferramentas”, pois estas além de auxilia-lo em sua bancada, também fornecerão informações preciosas sobre o controle e uso de dispositivos interessantes. Boa montagem e até a próxima!



DOWNLOADS:

- Esquema elétrico
- Desenho da placa - lado da solda - desenho invertido
- Pacote com código fonte e arquivo HEX
- Lista de materiais


Este artigo foi publicado, com minha autorização, na revista Mecatrônica Fácil nrº 29 de Julho/Agosto de 2006.




Copyright deste conteúdo reservado para Márcio José Soares e protegido pela Lei de Direitos Autorais LEI N° 9.610, de 19 de Fevereiro de 1998. É estritamente proibida a reprodução total ou parcial do conteúdo desta página em outros pontos da internet, livros ou outros tipos de publicações comerciais ou não, sem a prévia autorização por escrito do autor.