PAINEL DE MENSAGENS COM MICROCONTROLADOR PIC16F877
Atualizado! Agora com lay-out do circuito impresso!



A PROPOSTA

No ano de 1999 vi um artigo, na edição 318 da revista Saber Eletrônica, que me chamou muita a atenção. Tratava-se do Display Alfanumérico Programável do autor Alfonso Perez. Esse projeto foi republicado na revista Eletrônica Total 92 de julho de 2002. Porém, para mim, haviam dois pequenos problemas: o microcontrolador utilizado e a Linguagem de Programação adotada. O microcontrolador 87C751  naquela época (2002), já não era facilmente encontrado no mercado, apenas seus similares e a Linguagem Assembly para microcontroladores 8051 não era lá muito "prática". O que eu queria fazer era meu próprio painel usando algo, digamos, mais “moderno”. E a resposta veio com a linha Microchip e a Linguagem de Programação "C" (não tão novo assim, mas digamos, um pouco mais novo apenas...). Para isso foi necessário reestruturar o circuito, desenhar um novo lay-out e desenvolver um novo programa em uma nova Linguagem e assim nasceu um novo projeto com o microcontrolador PIC16F877 Microchip® e a Linguagem C. E é este projeto que vou apresentar neste artigo.

O meu painel tem  as seguintes características:

- 60 colunas no total;
- até 12 caracteres por linha;
- 24 caracteres ou mais no buffer de escrita;
- comunicação RS-232 para entrada de dados (comunicação com PC, modem GSM, teclado serial, etc);
- pequeno número de componentes externos.

O controle do painel é feito pelo Microcontrolador PIC16F877 Microchip®, velho conhecido daqueles que já usam a família de microcontroladores 16F Microchip. As características deste microcontrolador são as seguintes:

- Memória FLASH de programa com 8k bytes;
- 368 bytes de RAM;
- 256 bytes de EEPROM;
- 32 pinos de I/O com dreno de corrente na ordem de 20mA;
- 10 conversores analógicos (AD) de 10 bits;
- Dois timers de 8 bits e um de 16 bits;
- Dois canais CCP (Capture, Compare and PWM);
- Um canal USART para comunicação RS-232;
- Comunicação SPI ou I2C;
- Várias opções para oscilador;

- RC;
- Cristal ou ressonador;
- Cristal de alta freqüência (acima de 10MHz);
- Clock externo.

- 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 40 pinos;
- etc.

Se você quer obter mais informações sobre este microcontrolador, aconselho o download e leitura do datasheet no site do fabricante, http://www.microchip.com.



O CONCEITO POR TRÁS DESTE TIPO DE EQUIPAMENTO

Obs.: Sou engenheiro eletrônico de formação e um curioso com relação a outras ciências. Portanto, peço desculpas aos "experts" no assunto se eu falar alguma besteira a seguir. Os dados abaixo são resultados de uma breve pesquisa que fiz há alguns anos e achei interessante usá-la aqui. Creio que cada um poderá, de acordo com seu próprio interesse, promover uma pesquisa mais profunda caso julgue necessário.

Antes de prosseguir com qualquer explanação sobre o funcionamento do circuito, seria interessante tentar compreender mais sobre o principio “fisiológico” e também “psicológico” sobre o qual este tipo de painel se apóia: a Persistência Retiniana e o fenômeno Phi.

O conceito da Persistência Retiniana é conhecido desde o antigo Egito e apesar dos trabalhos desenvolvidos por "sir Isaac Newton", só em 1824 é que Peter Mark Roget definiu-o satisfatoriamente como "a capacidade que a retina possui para reter a imagem por cerca de 1/20 à 1/5 segundos após o seu desaparecimento do campo de visão".

Por muito tempo acreditou-se que este fenômeno fisiológico fosse o responsável pela síntese do movimento. Porém posteriormente chegou-se a conclusão que ele constitui um obstáculo à formação das imagens animadas, pois tende a sobrepô-las na retina, misturando-as entre si.

O que salvou o cinema, por exemplo, como aparato técnico foi a inserção de um intervalo “negro” entre a projeção de um fotograma para outro, permitindo atenuar a imagem persistente que ficava retina pelos olhos (retina). O fenômeno da retina explicada através do exemplo do cinema, é o fato de justamente não se ver este intervalo (quadro) negro.

A síntese do movimento pode, na verdade, ser explicada através de um fenômeno psíquico e não óptico ou fisiológico, e foi analisado por Max Wertheimer e Hugo Musterberg entre 1912 e 1916 ao qual se deu o nome de fenômeno Phi. Este providencia uma “ponte” mental entre as figuras expostas aos olhos permitindo ver uma série de imagens estáticas como apenas um movimento continuo, isto é, se duas imagens são expostas aos olhos em diferentes posições uma após a outra e com pequenos intervalos de tempo, os observadores julgam que se trata apenas de uma imagem que se move da primeira para a segunda posição.

Baseado neste principio, pode-se através de uma matriz de pontos (LEDs) criar a ilusão do movimento de um caracter ou mesmo de uma seqüência deles, apenas montando-os em posições diferentes (seqüência lógica) com pequenos intervalos de tempo para cada montagem, exatamente como o que é feito com os fotogramas no cinema. O intervalo “negro” é feito com o “desligar” momentâneo de toda a matriz de LED’s.

Obs.: Existem alguns painéis que não utilizam qualquer tipo de varredura. Neste caso, os LED's são ligados/desligados para formar a frase de forma direta. É o caso de alguns painéis utilizados pela frota de ônibus em alguns estados do Brasil e também no exterior. Isso é feito desta maneira por questões práticas inerentes ao tipo de uso (uma delas é o brilho dos LEDs que é sempre maior, neste tipo de painel).



O CIRCUITO

Nas figuras abaixo apresento o circuito elétrico do painel (divido em partes para melhorar a inteligibilidade do mesmo). clique sobre as imagens para obter os arquivos PDF's. O microcontrolador CI1 é o cérebro de “controle” de todo o circuito.


-------------------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------

Note que as matrizes de LEDs utilizadas tem 5 colunas com 7 linhas, totalizando 35 LEDs por matriz. Na figura abaixo você pode ver o esquema desta matriz, extraída do datasheet da mesma (que pode ser obtido mais abaixo, em downloads). Repare que nas colunas estão ligados os anodos dos LEDs e nas linhas seus catodos. No mercado existem vários tipos, com cores, tamanhos, e outras variantes interessantes. Aconselho você, caso não encontre o tipo por mim utilizado que, baseado no datasheet cedido, adquira um “similar”. E neste caso os itens a serem observados são:

- consumo de corrente por LED;
- tensão máxima e mínima por segmento (LED);
- pinagem compatível entre linhas e colunas;
- posição do anodo e catodo em relação à linha e coluna compatíveis.



CI3, CI4, CI5 e CI6 são demux de 4 linhas para 16 (74HC154). A entrada deste CI recebe um valor BCD e este valor é refletido na sua saída na forma de posição decimal. É importante salientar que este CI tem a saída "barrada" (invertida), ou seja, o pino na saída vai a nível lógico “0” sempre que selecionado, permanecendo todos os outros em nível lógico “1”.

A aplicação destes CIs no circuito é bem clara. Temos no PIC16F877 um total de 32 I/Os apenas. Porém para controlar o display são necessários 60 pinos de I/O para as colunas e “7” pinos de I/O para as linhas. Fica claro que apenas o microcontrolador não teria condições de fazê-lo.

Todas as entradas BCD dos quatro CIs (3, 4, 5 e 6) estão interligadas. A escolha da coluna desejada é feita através do pino G1 destes CIs. Quando este pino é levado ao nível lógico “1”, todas as saídas são colocadas também em nível lógico “1”, e quando colocado em nível lógico igual a “0” temos o dado BCD da entrada, refletido na saída do CI na forma de posição decimal. Desta forma tem-se uma maneira de selecionar a coluna desejada através do CI 74HC154 ligado à mesma.

CI2 é um MAX232, um driver para comunicação serial padrão RS-232. CI7 é um regulador de tensão de 5 VDC para a parte lógica do circuito. Os LED’s (ligados aos emissores de Q1 a Q60) podem também ser alimentados por uma linha de 5 VDC externa. Essa providência foi tomada para que a escolha da matriz seja livre. Se a matriz usada for a mesma que usei, basta fazer um jumper da saída do regulador presente na placa para a entrada externa de 5VDC.

Os transistores Q1 a Q60 são do tipo PNP, pois são ativados pela saída “barrada” do 74HC154. Note que não há qualquer resistor limitador para os LEDs da matriz. Apesar de termos 5 VDC alimentando cada LED da matriz, devemos considerar a queda de tensão provocada pelo transistor de controle de linha e coluna que é da ordem de 0,6 VDC para cada. Temos assim uma queda de 1,2 VDC aproximadamente, sendo 3,8 VDC (5 – 1,2) a tensão de alimentação para os LED’s. Um outro fator importante é o tempo de varredura que é da ordem de 25 us para cada coluna.

Os transistores Q61 a Q67 são do tipo NPN e controlados diretamente pelo microcontrolador. A corrente Ic dos transistores selecionados é da ordem de 500 mA. Caso a matriz de LEDs escolhida por você tenha um consumo diferente do apontado neste artigo, é aconselhável rever o tipo do transistor a ser utilizado. Faça os seguintes cálculos:

Para os transistores da coluna:
Número de LED’s por coluna x corrente do LED

Para os transistores de linha:
Número de LED’s por linha x corrente do LED

Se o valor encontrado estiver dentro da faixa estipulada, a troca dos transistores não será necessária.



MONTAGEM



Para montar este projeto, você poderá usar o lay-out oferecido no final deste artigo (desenhos acima) ou poderá desenhar seu próprio lay-out,  ou ainda usar placas do tipo padrão. A escolha é sua! Fique a vontade para fazer como achar melhor.

Solde os transistores tomando cuidado para não invertê-los de sentido e também para não trocar os tipos NPN por PNP e vice-versa. Os resistores são todos do tipo CR5 1/4 Watt e merecem atenção para evitar uma eventual troca (valores).

Você pode optar por usar ou não soquetes para os CIs. O uso de um soquete para o microcontrolador é recomendável pois permite a extração do mesmo para futuras alterações no firmware. O uso de conectores para a ligação entre as placas é também recomendável. O comprimento dos cabos que irão ligar linhas e colunas entre as placas (caso esta tenha sido sua opção) não deve exceder 50 cm. Os cabos para as colunas possuem 5 pontos de ligação e para a linha 7 pontos. Note que cada conector (CNx) na placa lógica e placa para as matrizes possui uma numeração. Siga-as para evitar qualquer erro. É adequado usar um radiador de calor para CI7, evitando assim sobre-aquecimento do mesmo.

Ao montar as matrizes de LEDs, tenha cuidado para não inverter as mesmas. Veja pelo datasheet que linhas e colunas seguem uma seqüência na ligação de seus pinos. Qualquer inversão poderá provocar o não funcionamento do painel.

Como fonte de alimentação para meu protótipo escolhi uma fonte regulada de 12VDC / 1.5A . No meu caso, fiz o jumper entre a saída do regulador de 5VDC da placa e a entrada para 5VDC externa. Se você preferir poderá desenvolver sua própria fonte, porém acredito que os custos envolvidos não compensarão.

Para a comunicação entre um PC e a placa você vai precisar de um cabo serial. Este cabo pode ser comprado no mercado especializado ou montado conforme a figura abaixo.



Após a montagem de todo o conjunto (placas, cabos, fonte, etc) verifique tudo com muita atenção. É preferível perder alguns minutos em uma boa inspeção a perder horas tentando entender porque seu lindo projeto não funcionou (e neste caso a culpa é sempre do autor né?!). Na figura de abertura deste artigo você tem uma visão geral do meu protótipo montado.



O PROGRAMA

O programa de controle foi desenvolvido na Linguagem de Programação “C”. Tanto o código fonte quanto o código HEX estão disponíveis neste site, mais abaixo na seção downloads. Eu optou-se por esta linguagem, pois é a que eu gosto mais. Caso você considere-se apto, poderá desenvolver o seu próprio programa de controle usando outra Linguagem de Programação qualquer.

Na figura abaixo é mostrado o fluxograma que explica o programa de controle. Ele inicia o microcontrolador (setup para pinos de I/O, configurações para seus periféricos, etc) e em seguida começa um laço, dentro da função “Main” para varrer a matriz inserindo cada caractere presente no buffer de escrita. Ao mesmo tempo, o microcontrolador aguarda um dado pelo canal serial (RS-232). Quando o mesmo recebe o caractere FEH (254 decimal) responde que está pronto para receber uma mensagem. Todo próximo caractere recebido é inserido no buffer auxiliar, exceto o caractere 0DH e 08H (Enter e BackSpace, respectivamente) e também retornado ao equipamento emissor como “eco”.

Toda mensagem deve terminar com o caractere 0DH (Enter). Assim o microcontrolador informa a mensagem recebida ao equipamento emissor e a grava no buffer de escrita (transferência do buffer auxiliar para o de escrita). O caractere 08H (BackSpace) apaga do buffer auxiliar o último caractere enviado.

O programa foi ricamente comentado para facilitar a sua compreensão. A sua re-compilação para gravação do microcontrolador não é necessária, pois o arquivo HEX foi fornecido para a gravação. Mas caso você deseje alterar o programa, verifique no cabeçalho do programa (linhas de comentários iniciais) maiores informações sobre o compilador usado. É importante perceber que talvez a versão utilizada não esteja mais disponível e, em alguns casos, ao se usar uma nova versão ou outro compilador (o C é portável!!!) alguns bugs poderão aparecer devido a incompatibilidade entre versões/compiladores. Neste caso, leia atentamente as mensagens apresentadas pelo seu compilador e adeque o código para que as mensagens não apareçam mais e o código possa ser compilado corretamente.




TESTE E USO

Após a inspeção da sua montagem é hora de testar e usar o equipamento. Grave o arquivo PAINEL_MSG_ARNE.HEX no microcontrolador.

Obs.: Não entrarei nos detalhes sobre a gravação do microcontrolador neste artigo. Julgo que se você se propôs a montar este circuito, já tem a experiência necessária com microcontroladores PIC e conhece as operações envolvidas no processo de gravação dos mesmos.

Insira o microcontrolador na placa, conecte a alimentação (certifique-se para que nada esteja invertido, ou o circuito poderá se danificar irremediavelmente!) e o cabo de comunicação entre o PC e o Painel. Rode um programa terminal qualquer no PC como o Hiper Terminal do Windows® com a seguinte configuração:

- velocidade: 9600;
- número de bits: 8;
- paridade: nenhuma;
- stop bits: 1;
- controle de fluxo: nenhum;
- porta de comunicação: COMX (porta de comunicação RS-232 livre no PC);
- sem eco local (caractere digitado).

Obs.: Não é objetivo deste artigo demonstrar como utilizar os programas do tipo terminal. Acredito que você já possui a devida experiência com estes e caso não possua, aconselho que, em caso de problemas, recorra ao help do programa para auxiliá-lo na sua configuração.

Ligue a fonte. O painel aguardará 0,5s e mostrará a mensagem “PAINEL MSG ARNE” rolando pelas matrizes (da direita para esquerda). Na tela do programa terminal a mensagem “Painel de mensagens -> operando!!!” também poderá ser vista.

Neste momento envie o caractere FEH (254 decimal). Geralmente basta segurar a tecla ALT e teclar “0254” (zero, dois, cinco e quatro) no teclado numérico sem soltar a tecla ALT. Libere-a somente quando terminar de teclar o último digito (4).

Se o caracter FEH for enviado corretamente ao painel, na tela do programa terminal poderá ser visto “Envie a mensagem->”. Neste momento tecle a mensagem desejada. Na presente versão do programa apenas as letras de A a Z em maiscula, os algarismos de 0 a 9 e espaço foram implementados. Caracteres de pontuação, o cedilha, acentuações e outros não são permitidos. Caso algum desses caracteres seja digitado, o programa irá inserir um espaço vazio no lugar do mesmo. Um outro detalhe importante é que a matriz grafa apenas caracteres maiúsculos. Caso você insira caracteres minúsculos os mesmos serão convertidos para maiúsculo.

Caso a mensagem exceda o tamanho máximo previamente definido para o buffer auxiliar (máximo de 24 caracteres) a mensagem “Buffer cheio!!! Tecle ENTER!!!” será enviada. A mensagem digitada não será perdida, porém apenas os primeiros 24 caracteres da mesma serão aceitos!

A tecla ENTER finaliza a mensagem e isso é informado através da tela do PC como “Mensagem recebida -> + mensagem digitada”. Caso você cometa algum engano durante a digitação da mensagem e deseje corrigi-lá, basta teclar BackSpace para apagar o último caractere digitado (isso só é valido durante a digitação da mensagem, antes do ENTER!).

A nova mensagem será apresentada no painel após a última passagem da antiga mensagem.

Comprovado o funcionamento, você poderá instalar o equipamento em uma caixa apropriada para tal. O uso de um acrílico vermelho à frente das matrizes de LEDs poderá ajudar na visualização das mensagens.



CONCLUSÃO

Como você pôde notar, antigas soluções podem ganhar uma nova “cara” apenas com a atualização de um ou mais componentes. Espero que esta montagem possa ser aproveitada por você, de alguma maneira! Boa montagem e até a próxima!!!



DOWNLOADS:

- Circuito elétrico/eletrônico (controle, lógica auxiliar, matrizes parte 1, matrizes parte 2, comunicação e fonte)
- Lay-out do circuito impresso (placa CPU e placa matrizes - método da transferência térmica)
- Lay-out do circuito impresso (placa CPU e placa matrizes - método manual)
- Código fonte
- Arquivo HEX
- Datasheet da matriz utilizada

O circuito foi devidamente testado. Não me responsabilizo por possíveis problemas que possam ocorrer durante a sua montagem ou pelo uso inadequado deste circuito. Você está por sua própria conta e risco!



Esse projeto foi publicado na revista Saber Eletrônica nr 386 em Março de 2005.

Painel de Mensagens do Arne - Especificações:

- Microcontrolador - PIC16F877 Microchip
- Nr. de colunas - 60
- Nr. de linhas - 07
- Tamanho da maior frase possível - 24 caracteres (facilmente estendido via software)
- Comunicação - RS-232 (9600 bps, 8 bits , sem paridade, 1 stop bit)
- Linguagem utilizada - "C"


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.