
Figura 1: Protótipo de cubo LED controlado por AVR ATMega16
Trabalhando:
O cubo de LED possui 64 LEDs (4x4x4). Cada LED é dedicado a uma porta IO em um microcontrolador. O cubo de LED depende de um fenômeno óptico chamado Persistência de Visão. Se você piscar um LED muito rápido, ele permanecerá na sua retina por algum tempo, mesmo depois que o LED for desligado. Ao piscar cada camada do cubo muito rapidamente, uma após a outra, dá a sensação de 3D. Com esta configuração precisaremos de apenas 16 (ânodo) + 4 (camadas) portas IO para controlar cada LED. O LED tem duas pernas, uma positiva e outra negativa. A extremidade positiva está conectada aos pilares do cubo de LED que atua como ânodo enquanto a negativa está conectada à camada. Assim, para ligar um determinado LED temos que fornecer corrente ao pilar correspondente e aterrar a camada.Diagrama de bloco:

Figura 2: Diagrama de blocos do cubo LED controlado por AVR ATMega16
Fonte de energia: Usamos fonte de alimentação regulada de 5V usando regulador de tensão 7805 e bateria de 9V, para nosso projeto.
Microcontrolador:
É o coração do projeto que permite controlar o LED Cube gerando animações predefinidas. As portas de entrada/saída do microcontrolador são utilizadas para esta finalidade. Usamos o microcontrolador Atmega 16 em nosso projeto.
Figura 3: Diagrama de pinos do AVR ATMega16

Figura 4: Protótipo de circuito de controle de cubo LED baseado em AVR ATMega16
Cubo LED:
A conexão do cubo de LED é feita da seguinte maneira. Todos os ânodos de uma camada estão conectados como um pilar do cubo e os cátodos estão em curto-circuito ao redor da camada. Assim, temos 4 pinos de cátodo em 4 camadas de cubo e 16 pinos de cátodo como pilares do cubo.

Figura 5: Imagem de representação do cubo de LED

Figura 6: Protótipo de LED Cube controlado por AVR ATMega16
O circuito :
{Verifique a guia do diagrama de circuito para ver o circuito completo do 3D LED Cube (4x4x4)}
Programação:
A programação é feita no Eclipse IDE em Embedded C. O código está anexado a este documento. Eu criei 4 padrões de animações em cada 'for loop'.Código fonte do projeto
###
#incluir
#incluir
vazio principal
{
DDRA=0xff;
DDRB=0xff;
DDRD=0xff;
interno eu,j,k,l,m;
enquanto(1)
{
para(eu=0;eu<6;eu++)
{
PORTD=~1;
PORTA=0b00010001;
PORTB=0b00010001;
_atraso_ms(200);
PORTD=~2;
PORTA=0b00010001;
PORTB=0b00010001;
_atraso_ms(200);
PORTD=~4;
PORTA=0b00010001;
PORTB=0b00010001;
_atraso_ms(200);
PORTD=~8;
PORTA=0b00010001;
PORTB=0b00010001;
_atraso_ms(200);
PORTD=~4;
PORTA=0b00100010;
PORTB=0b00100010;
_atraso_ms(200);
PORTD=~2;
PORTA=0b01000100;
PORTB=0b01000100;
_atraso_ms(200);
PORTD=~1;
PORTA=0b10001000;
PORTB=0b10001000;
_atraso_ms(200);
PORTD=~2;
PORTA=0b10001000;
PORTB=0b10001000;
_atraso_ms(200);
PORTD=~4;
PORTA=0b10001000;
PORTB=0b10001000;
_atraso_ms(200);
PORTD=~8;
PORTA=0b10001000;
PORTB=0b10001000;
_atraso_ms(200);
PORTD=~4;
PORTA=0b01000100;
PORTB=0b01000100;
_atraso_ms(200);
PORTD=~2;
PORTA=0b00100010;
PORTB=0b00100010;
_atraso_ms(200);
}
para(j=0;j<6;j++)
{
PORTD=~8;
PORTA=0b10011111;
PORTB=0b11111001;
_atraso_ms(200);
PORTD=~4;
PORTA=0b10011111;
PORTB=0b11111001;
_atraso_ms(200);
PORTD=~2;
PORTA=0b10011111;
PORTB=0b11111001;
_atraso_ms(200);
PORTD=~1;
PORTA=0b10011111;
PORTB=0b11111001;
_atraso_ms(200);
}
para(k=0;k<6;k++)
{
PORTD=~1;
PORTA=~0b10011111;
PORTB=~0b11111001;
_atraso_ms(200);
PORTD=~2;
PORTA=~0b10011111;
PORTB=~0b11111001;
_atraso_ms(200);
PORTD=~4;
PORTA=~0b10011111;
PORTB=~0b11111001;
_atraso_ms(200);
PORTD=~8;
PORTA=~0b10011111;
PORTB=~0b11111001;
_atraso_ms(200);
PORTD=~8;
PORTA=0b10011111;
PORTB=0b11111001;
_atraso_ms(200);
PORTD=~4;
PORTA=0b10011111;
PORTB=0b11111001;
_atraso_ms(200);
PORTD=~2;
PORTA=0b10011111;
PORTB=0b11111001;
_atraso_ms(200);
PORTD=~1;
PORTA=0b10011111;
PORTB=0b11111001;
_atraso_ms(200);
}
para(eu=0;eu<6;eu++)
{
PORTD=~1;
PORTA=1;_atraso_ms(100);
PORTD=~2;
PORTA=0b00100000;_atraso_ms(100);PORTA=0;
PORTD=~4;
PORTB=0b00000100;_atraso_ms(100);
PORTD=~8;
PORTB=0b10000000;_atraso_ms(100);
PORTD=~4;
PORTB=0b00001000;_atraso_ms(100);PORTB=0;
PORTD=~2;
PORTA=0b10000000;_atraso_ms(100);
PORTD=~1;
PORTA=0b00001000;_atraso_ms(100);
PORTD=~2;
PORTA=0b01000000;_atraso_ms(100);PORTA=0;
PORTD=~4;
PORTB=0b00000010;_atraso_ms(100);
PORTD=~8;
PORTB=0b00010000;_atraso_ms(100);
PORTD=~4;
PORTB=0b00000001;_atraso_ms(100);PORTB=0;
PORTD=~2;
PORTA=0b00010000;_atraso_ms(100);
}
para(m=0;m<10000;m++)
{
PORTD=~1;
PORTA=0b10011111;
PORTB=0b11111001;
_atrasar_nos(100);
PORTD=~2;
PORTA=0b00001001;
PORTB=0b10010000;
_atrasar_nos(100);
PORTD=~4;
PORTA=0b00001001;
PORTB=0b10010000;
_atrasar_nos(100);
PORTD=~8;
PORTA=0b10011111;
PORTB=0b11111001;
_atrasar_nos(100);
}
}
}
###
Diagramas de circuito
| Diagrama de circuito-AVR-ATMega16-LED-Cube | ![]() |
