Caçador de LED usando AVR ATMega16

Cazador de LED usando AVR ATMega16

Es posible que haya visto muchos diseños diferentes de rastreadores LED. Se puede construir un cazador de LED simple utilizando IC555 y chips contadores digitales. Muchos cazadores de LED se construyen mediante microcontroladores. El cazador de LED basado en microcontrolador tiene una variedad de efectos de persecución diferentes. Se puede generar un sorprendente efecto de persecución de LED mediante la programación del microcontrolador. Puede haber 8, 10, 16 o incluso más LED conectados al microcontrolador y éste encenderá/apagará los LED, variará su brillo o hará parpadear para crear efectos maravillosos. En su mayoría, hay LED de un solo color (probablemente ROJO), pero ahora puede encontrar cazadores de LED multicolores con diferentes colores de LED, como ROJO, VERDE, AZUL, AMARILLO, NARANJA, etc. Los últimos cazadores de LED se basan en LED RGB. El LED RGB puede generar una variedad de colores y efectos diferentes.

Este proyecto presentado aquí utiliza el microcontrolador AVR ATMega16. Hay 35 LED multicolores (ROJO, VERDE, AZUL y VERDE) conectados para generar un llamativo efecto de persecución. Para fines de demostración, solo se utilizan 35 LED conectados a un solo puerto del ATMega16, pero es posible conectar hasta 200 LED para generar diferentes efectos de persecución. Así que veamos cómo se hace esto.

Diagrama de circuito

Como puede ver, el circuito está construido utilizando el microcontrolador AVR ATMega16 y el chip Darlington ULN2003A.

  • Como se muestra en la figura 5, los LED del mismo color están conectados en paralelo formando un grupo. Hay 7 de estos grupos de LED, cada uno con 5 LED, para un total de 35 LED.

  • Todos estos grupos de LED están conectados al PORTB a través del chip Darlington ULN2003A. UNL2003A se utiliza como controlador de corriente para suministrar suficiente corriente a los LED.

  • Los pines PORTB PB0 a PB6 están conectados a las entradas del ULN2003A y las salidas del ULN2003A están conectadas al cátodo común del grupo de LED.

  • Los ánodos comunes de todos los grupos de LED están conectados a Vcc a través de una resistencia limitadora de corriente de 300E.

  • Un botón está conectado al pin PORTD PD2 que genera una interrupción externa cuando se presiona

  • Un cristal de 8 MHz con dos condensadores de 22 pF está conectado a los pines de entrada del cristal, lo que proporciona un reloj básico para el funcionamiento del microcontrolador.

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

Fig. 1: Prototipo de circuito LED Chaser basado en AVR ATMega16 diseñado en placa

Trabajo y funcionamiento:

Hay 6 efectos de persecución diferentes y el efecto se cambia presionando el botón. Inicialmente, cuando el proyecto se enciende el primer día, comenzará el efecto de persecución. Esto continuará hasta que no se presione el botón. Cuando se presiona el botón, se genera una interrupción y el controlador cambiará a 2 y al efecto de persecución. Asimismo, al presionar el botón por segunda vez, por tercera vez y de la misma manera, cambiará el efecto de persecución y 6°. Nuevamente, si se presiona el botón, el microcontrolador iniciará el primer efecto de persecución. Ahora veamos cuáles son estos diferentes efectos del acecho.

1er efecto de persecución: Este es el efecto de persecución más simple. Hace parpadear todos los LED a 10 Hz durante 5 segundos y luego parpadea alternativamente los LED a 10 Hz durante 5 segundos y lo repite continuamente.

2 y efecto de persecución: el LED se iluminará uno por uno de izquierda a derecha y luego de derecha a izquierda

3 tercer efecto persecución: variará la intensidad de los LED alternados de máximo a mínimo y de mínimo a máximo. Así como cuando los grupos LED L1, L3, L5 y L7 tienen máxima intensidad, L2, L4 y L6 tienen mínima intensidad. Luego, lentamente, la intensidad L2-L4-L6 aumenta y alcanza un máximo, mientras que la intensidad L1-L3-L5-L7 disminuye y alcanza un mínimo. Este ciclo es continuo.

Cuarto efecto de persecución: este efecto es igual a 2 y con un pequeño cambio es que encenderá dos LED a la vez, de izquierda a derecha y nuevamente de derecha a izquierda.

Quinto efecto de persecución: este efecto enciende todos los LED uno por uno de izquierda a derecha y luego los apaga de derecha a izquierda.

Sexto efecto de persecución: este efecto encenderá todos los LED de ambos lados hacia el centro y los apagará desde el centro hacia los lados.

Todo el efecto de persecución anterior se debe al programa descargado en el FLASH interno del microcontrolador ATMega16.

Programa de software:

El programa está escrito en lenguaje C y se compila utilizando la herramienta de software AVR Studio. Se simula utilizando el simulador AVR 2 para el dispositivo ATmega16 disponible con el software AVR Studio. Aquí está el código del programa C.

Código fuente del proyecto

###

#incluir

#incluir

#incluir


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

byt de carbón sin firmar, byt1;

retraso nulo (unsigned int d1)

{

int sin signo x;

para(x=0;x

_delay_us(2);

}

efecto vacío1

{

mientras(new_effect_flag==0)

{

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

{

PUERTOB = 0x00;

_delay_ms(100);

PUERTOB = 0xFF;

_delay_ms(100);

}

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

{

PUERTO = 0x55;

_delay_ms(100);

PUERTOB = 0xAA;

_delay_ms(100);

}

}

}

efecto vacío4

{

tmp de carácter sin firmar;

mientras(new_effect_flag==0)

{

PUERTOB=0xFF;

_delay_ms(1000);

byt1 = 0xFC; // 1111 1100

byt = 0xFE; // 1111 1110

PUERTOB = byt1; // 1111 1100

_delay_ms(1000);

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

{

tmp = ~byte; // 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;

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

{

tmp = ~byte; // 0100 0000

byt1 = byt1>>1; // 0000 1111

PORTB = byt1 tmp;

byt = byt>>1;

_delay_ms(1000);

}

}

}

efecto vacío2

{

mientras(new_effect_flag==0)

{

PUERTOB=0xFF;

_delay_ms(1000);

byt1 = 0xFE; // 1111 1110

PUERTOB = byt1; // 1111 1110

_delay_ms(1000);

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

{

byt = ~byt1; // 0000 0001

byt1 = byt1<<1; // 1111 1100

PORTB = byt1 byt;

_delay_ms(1000);

}

byt1 = 0x7F;

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

{

byt = ~byt1; // 0000 0001

byt1 = byt1>>1; // 1111 1100

PORTB = byt1 byt;

_delay_ms(1000);

}

}

}

efecto vacío3

{

sin firmar int a,b,a1;

mientras(new_effect_flag==0)

{

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

{

a1 = 100-a;

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

{

PUERTO = 0x55;

retraso(a);

PUERTOB = 0xAA;

retraso(a1);

}

}

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

{

a1 = 100-a;

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

{

PUERTO = 0x55;

retraso(a);

PUERTOB = 0xAA;

retraso(a1);

}

}

}

}

efecto vacío5

{

mientras(new_effect_flag==0)

{

PUERTOB=0xFF;

_delay_ms(1000);

PUERTOB=0xFE;

_delay_ms(1000);

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

{

PUERTOB=PUERTOB<<1;

_delay_ms(1000);

}

byt1 = 0xFE;

byt = ~byt1;

PORTB = bytes;

_delay_ms(1000);

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

{

byt1 = byt1<<1;

byt = ~byt1;

PORTB = bytes;

_delay_ms(1000);

}

}

}

efecto vacío6

{

mientras(new_effect_flag==0)

{

PUERTOB = 0xFF;

_delay_ms(100);

PUERTOB = 0x3E;

_delay_ms(100);

PUERTOB = 0x1C;

_delay_ms(100);

PUERTOB = 0x00;

_delay_ms(100);

PUERTOB = 0x1C;

_delay_ms(100);

PUERTOB = 0x3E;

_delay_ms(100);

}

}


int principal (vacío)

{

DDRB=0xFF;

MCUCR = (1<

RCIC=(1<

saber ;

mientras(1)

{

new_effect_flag=0;

cambiar (recuento)

{

caso 0:

efecto1;

romper;

caso 1:

efecto2;

romper;

caso 2:

efecto3;

romper;

caso 3:

efecto4;

romper;

caso 4:

efecto5;

romper;

caso 5:

efecto6;

romper;

caso 6:

contar=0;

romper;

}

}

}


ISR(INT0_vector)

{

contar++;

new_effect_flag=1;

_delay_ms(200);

 } ###

Diagramas de circuito

Diagrama de circuito de LED Chaser basado en AVR-ATMega16

Vídeo del proyecto

Volver al blog

Deja un comentario

Los comentarios deben ser aprobados antes de su publicación.