quinta-feira, maio 21, 2015

Cubo de LEDs 4x4x4 Bicolor - Parte 5

Fechando esta série de posts, vou falar um pouco sobre o software de demonstração.



Eu usei diretamente o software do Pedro. Como ele descreve, são usadas bibliotecas adicionais para controle do Timer1 (TimerOne) e do Timer2 (FlexiTimer2).

CubePWM

A nível mais baixo é o CubePWM. Em CubePWM.c está a associação dos pinos do ATmega aos LEDs (matrizes PORTMAP e BITMASK), a associação dos pinos do ATmega aos planos está fixa  no código.

Para gerar várias intensidades e alternar as cores, a atualização é dividida em 32 passos. Cada passo é apresentado por 100 microsegundos (rotina Draw chamada pela interrupção do Timer1). Em cada passo só é possível apresentar uma cor em um plano. Os primeiros 16 passos são normalmente para a cor vermelha e os 16 últimos para a cor verde, porém a rotina improveBrightness pode mudar este arranjo quando uma cor não está sendo usada, para aumentar o brilho. A matriz colors indica a cor de cada plano em cada passo.

A imagem do cubo é mantida na matriz ports, diretamente como o valor dos ports B, C e D para cada passo, plano e cor.

Com esta infraestrutura são criadas rotinas para acender um LED em uma cor cor com uma certa intensidade (rotina turnOn) e para apagar um LED ou todo o cubo (rotinas turnOff).

Cube

O módulo Cube implementa alguns efeitos visuais usando a infraestrutura do CubePWM e temporizações geradas pelo Timer2.

LedCube

LedCube é o módulo principal e utiliza as funções de Cube para fazer várias animações. O resultado pode ser visto no vídeo abaixo:






Nenhum comentário: