Painel de LED publicitário baseado no PIC16F877

Autor: andre_luis • Categoria: Eletrônica geral • Postado em 25 Mai 2014 10:22 • Visualizado: 5428x

A seguir, será apresentado o projeto de um painel de mensagens desenvolvido em 2005-2006, utilizando o microcontrolador PIC16F877A da Microchip, contendo os seguintes recursos:
1 ) Animação: Rolagem de mensagens no sentido vertical e horizontal
2 ) Armazenamento: Em EEPROM de até 10 textos de até 78 caracters.
3 ) Gravação das mensagens: Via porta Serial do PC.
4 ) Caracteres: Com tamanho de 8x12.
5 ) RTC: Com calendário programável.

Como não foi possível fabricar placas acima de determinadas dimensões, o Layout utilizado na montagem do prototipo foi dividido em 3 partes, o Controle, a Matriz de LEDs, e o driver:

Imagem

Como se pode perceber na imagem acima, o painel de LEDs propriamente dito, é montado numa placa separada, sendo soldada diretamente abaixo do driver. Ambos formam um conjunto modulável contendo 3 caracteres de 8x12 LEDs. No prototipo, foram empregadas 3 conjuntos, possiblitando uma janela de 9 caracters.

O programa escrito em C no compilador CCS pode ser baixado do seguinte link:
http://teprom.eng.br/arquivos/Firmware_PainelLED_30062006.zip

Devido á limitações do microcontrolador utilizado em lidar com arrays longos, isso gerou certa complexidade no firmware, que teve de lidar com uma fragmentação do mapa de caracteres em 4 partes. Isso pode ser constatado num trecho abaixo da função PlotaColuna, onde antes da plotagem do caratere recebido no painel, é necessário saber em que parte do mapa de caracteres se encontra:

cpp code

if ( ( Efeitos1[ PosicaoString ] && BIT0 ) && ( Piscagem ) ) PortaB = 0 ;
else
{
{
if ( StringToDisplay [ PosicaoString ] >= '`' )
{
PontMapaChar = ( ( ( StringToDisplay [ PosicaoString ] - '`' ) * TAM_FONT_COL ) + PosicaoChar ) ;
PortaD = TEXT3_H [ PontMapaChar ] ;
PortaB = TEXT3_L [ PontMapaChar ] ;
}
else
if ( StringToDisplay [ PosicaoString ] >= '@' )
{
PontMapaChar = ( ( ( StringToDisplay [ PosicaoString ] - '@' ) * TAM_FONT_COL ) + PosicaoChar ) ;
PortaD = TEXT2_H [ PontMapaChar ] ;
PortaB = TEXT2_L [ PontMapaChar ] ;
}
else
{
PontMapaChar = ( ( ( StringToDisplay [ PosicaoString ] - ' ' ) * TAM_FONT_COL ) + PosicaoChar ) ;
PortaD = TEXT1_H [ PontMapaChar ] ;
PortaB = TEXT1_L [ PontMapaChar ] ;
}
}
}


Foram empregados 1 placa de controle, 3 placas de driver e 3 placas de driver, sendo cada uma montada em cascata com a anterior.

Uma visualização do esquema geral da placa, segue abaixo:



O Layout e Esquema podem ser baixados aqui, ambos em arquivo DDB desenhado no Protel99:

http://teprom.eng.br/arquivos/Hardware_PainelLed.zip

A gravação das mensagens é feita atravéz de um programa desenvolvido no Borland C++Builder, que envia para o microcontrolador os textos de cada uma das até 10 mensagens que serão apresentadas sequancialmente no painel:

Imagem

Esse programa pode ser baixado no link abaixo:
http://teprom.eng.br/arquivos/GravadorPainel.zip

No caso da função "animação", para cada texto enviado, a mascara de bits 0 ou 1 indicam respectivamente se o caracter correspondente irá piscar ou permanecer aceso. Abaixo, um vídeo recente da placa, a título de amostra:

Observação:
a) O transistor da 4a linha está queimado
b) A imagem saiu do foco constantemente, pois a camera buscou ajuste automatico


* Depois de quase 10 anos pegando poeira e bem oxidada, seria esperar muito dessa placa...

Adicionar comentário

Registrar or Efetue login para comentar

por Vonnilmam » 19 Jul 2016 22:55

Cara, meus parabéns...ótimo trabalho.

Isso vai me servir de inspiração, vou fazer seu projeto funcionar e mandarei notícias.

Eu estou lutando para criar o meu proprio projeto, estou fazendo em assembler, isso porque ainda estou aprendendo o C...

Obrigado
Avatar do usuário
Vonnilmam
Registrado em: 19 Out 2006 14:25

x