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:
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 ] ;
}
}
}
Registrar or Efetue login para comentar