PAINEL DE
MENSAGENS COM MICROCONTROLADOR PIC16F877 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; 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; -
RC;
- Cristal ou ressonador; - Cristal de alta freqüência (acima de 10MHz); - Clock externo. - Wath Dog Timer (cão de guarda)
interno; 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.
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).
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;
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: Para os
transistores de linha: Se o valor encontrado estiver dentro da faixa estipulada, a troca dos transistores não será necessária. 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 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.
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. 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.
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!!!
- 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!
Painel de Mensagens do Arne - Especificações: - Microcontrolador - PIC16F877 Microchip |
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. |