Caçador de LED usando AVR ATMega16

Você pode ter visto muitos projetos diferentes de perseguidores de LED. O caçador de LED simples pode ser construído usando IC555 e chips de contador digital. Muitos caçadores de LED são construídos usando microcontroladores. O caçador de LED baseado em microcontrolador tem uma variedade de efeitos de perseguição diferentes. Pode-se gerar um incrível efeito de perseguição de LED usando a programação de microcontroladores. Pode haver 8 ou 10 ou 16 ou até mais LEDs conectados ao microcontrolador e ele ligará/desligará os LEDs ou variará seu brilho ou os piscará para criar efeitos maravilhosos. Principalmente há LED de cor única (provavelmente VERMELHO), mas agora você pode encontrar caçadores de LED multicoloridos com diferentes cores de LED, como VERMELHO, VERDE, AZUL, AMARELO, LARANJA, etc. Os caçadores de LED mais recentes são baseados em LEDs RGB. O LED RGB pode gerar uma variedade de cores e efeitos diferentes.

Este projeto aqui apresentado utiliza microcontrolador AVR ATMega16. Existem 35 LEDs multicoloridos (VERMELHO, VERDE, AZUL e VERDE) conectados para gerar um efeito de perseguição atraente. Para fins de demonstração, são usados ​​apenas 35 LEDs conectados a apenas uma porta do ATMega16, mas é possível conectar até 200 LEDs para gerar diferentes efeitos de perseguição. Então vamos ver como isso é feito.

Diagrama de circuito

Como você pode ver, o circuito é construído usando microcontrolador AVR ATMega16 e chip Darlington ULN2003A.

  • Conforme mostrado na figura 5, LEDs da mesma cor são conectados em paralelo, formando um grupo. Existem 7 desses grupos de LED, cada um com 5 LEDs, totalizando 35 LEDs.

  • Todos esses grupos de LEDs são conectados ao PORTB através do chip Darlington ULN2003A. UNL2003A é usado como driver de corrente para fornecer corrente suficiente aos LEDs.

  • Os pinos PORTB PB0 a PB6 são conectados às entradas do ULN2003A e as saídas do ULN2003A são conectadas ao cátodo comum do grupo de LEDs.

  • Os ânodos comuns de todos os grupos de LED são conectados ao Vcc através de um resistor limitador de corrente 300E.

  • Um botão está conectado ao pino PORTD PD2 que gera interrupção externa quando pressionado

  • Um cristal de 8 MHz com dois capacitores de 22 pF é conectado aos pinos de entrada do cristal que fornece clock básico para operação do microcontrolador

Protótipo de circuito LED Chaser baseado em AVR ATMega16 projetado em placa de ensaio

Fig. 1: Protótipo de circuito LED Chaser baseado em AVR ATMega16 projetado em placa de ensaio

Trabalho e operação:

Existem 6 efeitos de perseguição diferentes e o efeito é alterado pressionando o botão. Inicialmente quando o projeto é ligado o 1st o efeito de perseguição começará. Isso continuará até que o botão não seja pressionado. À medida que o botão é pressionado, a interrupção é gerada e o controlador mudará para 2e efeito de perseguição. Da mesma forma, pressionando o botão pela segunda vez, pela terceira vez e da mesma forma, mudará os 3terceiro 4º 5º e 6º efeito de perseguição. Mais uma vez, se o botão for pressionado, o microcontrolador iniciará 1st efeito de perseguição. Agora vamos ver quais são esses diferentes efeitos de perseguição.

1st efeito de perseguição: este é o efeito de perseguição mais simples. Ele pisca todos os LEDs a 10 Hz por 5 segundos e depois pisca os LEDs alternados a 10 Hz por 5 segundos e repete isso continuamente.

2e efeito de perseguição: acenderá um por um LED da esquerda para a direita e depois da direita para a esquerda

3terceiro efeito de perseguição: irá variar a intensidade dos LEDs alternet de máximo para mínimo e de mínimo para máximo. Assim como quando os grupos de LED L1, L3, L5 e L7 têm intensidade máxima, L2, L4 e L6 têm intensidade mínima. Então, lentamente, a intensidade L2-L4-L6 aumenta e atinge o máximo, enquanto a intensidade L1-L3-L5-L7 diminui e atinge o mínimo. Este ciclo é contínuo.

4º efeito de perseguição: este efeito é igual a 2e mas uma pequena mudança é que ele acenderá dois LEDs por vez, da esquerda para a direita e novamente da direita para a esquerda.

5º efeito de perseguição: este efeito LIGA todos os LEDs um por um da esquerda para a direita e depois os DESLIGA da direita para a esquerda

6º efeito de perseguição: este efeito acenderá todos os LEDs de ambos os lados para o centro e os desligará do centro para os lados.

Todo o efeito de perseguição acima é devido ao programa baixado no FLASH interno do microcontrolador ATMega16.

Programa de software:

O programa é escrito em linguagem C. Ele é compilado usando a ferramenta de software AVR Studio. É simulado usando o simulador AVR 2 para o dispositivo ATmega16 disponível com o software AVR Studio. Aqui está o código do programa C

Código fonte do projeto

###

#include

#include

#include


 

unsigned int j,count=0,new_effect_flag=0;

unsigned char byt,byt1;

void delay(unsigned int d1)

{

unsigned int x;

for(x=0;x

_delay_us(2);

}

void effect1

{

while(new_effect_flag==0)

{

for(j=0;j<25;j++)

{

PORTB = 0x00;

_delay_ms(100);

PORTB = 0xFF;

_delay_ms(100);

}

for(j=0;j<25;j++)

{

PORTB = 0x55;

_delay_ms(100);

PORTB = 0xAA;

_delay_ms(100);

}

}

}

 

void effect4

{

unsigned char tmp;

while(new_effect_flag==0)

{

PORTB=0xFF;

_delay_ms(1000);

byt1 = 0xFC; // 1111 1100

byt = 0xFE; // 1111 1110

PORTB = byt1; // 1111 1100

_delay_ms(1000);

for(j=0;j<5;j++)

{

tmp = ~byt; // 0000 0001

byt1 = byt1<<1; // 1111 1000

PORTB = byt1 tmp;

byt = byt<<1; // 1111 1100

_delay_ms(1000);

 

}

byt1 = 0x1F; // 0001 1111

byt = 0x7F; // 1011 1111

byt = byt>>1;

for(j=0;j<5;j++)

{

tmp = ~byt; // 0100 0000

byt1 = byt1>>1; // 0000 1111

PORTB = byt1 tmp;

byt = byt>>1;

_delay_ms(1000);

}

}

}

void effect2

{

while(new_effect_flag==0)

{

PORTB=0xFF;

_delay_ms(1000);

byt1 = 0xFE; // 1111 1110

PORTB = byt1; // 1111 1110

_delay_ms(1000);

for(j=0;j<6;j++)

{

byt = ~byt1; // 0000 0001

byt1 = byt1<<1; // 1111 1100

PORTB = byt1 byt;

_delay_ms(1000);

}

byt1 = 0x7F;

for(j=0;j<6;j++)

{

byt = ~byt1; // 0000 0001

byt1 = byt1>>1; // 1111 1100

PORTB = byt1 byt;

_delay_ms(1000);

}

}

}

void effect3

{

unsigned int a,b,a1;

while(new_effect_flag==0)

{

for(a=10;a<100;a++)

{

a1 = 100-a;

for(b=0;b<10;b++)

{

PORTB = 0x55;

delay(a);

PORTB = 0xAA;

delay(a1);

}

}

for(a=99;a>10;a--)

{

a1 = 100-a;

for(b=0;b<10;b++)

{

PORTB = 0x55;

delay(a);

PORTB = 0xAA;

delay(a1);

}

}

}

}

void effect5

{

while(new_effect_flag==0)

{

PORTB=0xFF;

_delay_ms(1000);

PORTB=0xFE;

_delay_ms(1000);

for(j=0;j<6;j++)

{

PORTB=PORTB<<1;

_delay_ms(1000);

}

byt1 = 0xFE;

byt = ~byt1;

PORTB = byt;

_delay_ms(1000);

for(j=0;j<6;j++)

{

byt1 = byt1<<1;

byt = ~byt1;

PORTB = byt;

_delay_ms(1000);

}

}

}

void effect6

{

while(new_effect_flag==0)

{

PORTB = 0xFF;

_delay_ms(100);

PORTB = 0x3E;

_delay_ms(100);

PORTB = 0x1C;

_delay_ms(100);

PORTB = 0x00;

_delay_ms(100);

PORTB = 0x1C;

_delay_ms(100);

PORTB = 0x3E;

_delay_ms(100);

}

}


 

int main(void)

{

DDRB=0xFF;

MCUCR = (1<

GICR=(1<

sei ;

while(1)

{

new_effect_flag=0;

switch(count)

{

case 0:

effect1 ;

break;

case 1:

effect2 ;

break;

case 2:

effect3 ;

break;

case 3:

effect4 ;

break;

case 4:

effect5 ;

break;

case 5:

effect6 ;

break;

case 6:

count=0;

break;

}

}

}


 

ISR(INT0_vect)

{

count++;

new_effect_flag=1;

_delay_ms(200);

}###

Diagramas de circuito

Diagrama de circuito do LED Chaser baseado em AVR-ATMega16

Vídeo do projeto

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.