Cube LED 3*3*3 na Atmega8

Cube LED 3*3*3 na Atmega8

INFORMACJA: Poniższy post nie wydostał się z Poczekalni :(

Witam!

Chciałbym przedstawić wam mój projekt świecącej kostki z LED-ów.  Jest to mój pierwszy projekt z wykorzystaniem mikrokontrolera AVR, a także mój pierwszy artykuł. To tyle ze słów wstępu przejdę do opisu projektu.

Potrzebne jest:

  • Atmega8
  • 27 diod dyfuzyjnych niebieskich
  • 9 rezysorów 82 Ohm
  • 3 rezystory 4,7 kOhm
  • 3 tranzystory BC557B
  • stabilizator 7805
  • kondensator do stabilizatora 100uF lub inny
  • kondensatro 100nF
  • złacze IDE10 albo goldpiny
  • dodatkowo jakis włacznik, podstawka 28DIP do Atmega8

Ja jeszcze użyłem  opornika 10 kOhm i microswitch do resetu, który okazał się zbędny.

Schemat

Bez tytułu

 

Opis
piny P1-P9 – tu bedą podłączone anody diod(po 3 w słupku)
piny K1-K3 – tu będą podłączone katody diod(po 9 w poziomie)
P10 – podłączenie z programatora

Schemat płytki tu: Płytka, ale jak ktoś potrzebował plików do jakiś zmian, proszę pisać.

Montaż LED-ów

Żeby sobie ułatwić pracę dobrze sobie przygotować deskę, w której powiercimy otwory na diody.
Bierzemy 9 diod zaginamy katody i lutujemy ze sobą(ma nam powstać coś takiego jak na rysunku). Do tego dolutujemy kabelek, który podłączymy do pinu K. Wykonujemy takich 3.DSCF0365 DSCF0367

Zostało nam połączyć te trzy takie razem. Lutujemy je anodami i powstaje mam kostka z LED- ów. Montujemy to do płytki i wlutowujemy wspomniane kabelki z poszczególnych poziomów tak jak na ostatnim rysunku.

DSCF0373 DSCF0375 DSCF0451

Program

#define F_CPU 1000000UL

#include "avr/io.h"
#include "avr/delay.h"

#define Led(kod) PORTB = kod
#define Led_9 PORTD |= 16

#define P_1 PORTD = (1<<5)|(1<<6)
#define P_2 PORTD = (1<<5)|(1<<7)
#define P_3 PORTD = (1<<6)|(1<<7)
#define P_FULL  PORTD = 195

#define powtorz(co, i) \
        ile=i;\
while(1)\
        { \
co; \
            ile--; \
if(!ile) \
            break; \
}

void mruganie_po_kolei();
void gwiazda();
void walec_bok();
void walec_gora();
void walec_przod();
void wlaczajaca_kostka();
void matrix();

int main(void)
{

    DDRB |= 0xFF;
DDRD |= (1<<2) | (1<<5) | (1<<3) | (1<<4);
    int ile;
while(1)
    {
mruganie_po_kolei();
        powtorz(matrix(), 15);
wlaczajaca_kostka();
        powtorz(walec_bok, 3);
gwiazda();
        powtorz(walec_przod(), 2);
powtorz(gwiazda(), 3);
        powtorz(walec_gora(), 4);
powtorz(matrix(), 10);
        powtorz(walec_przod(), 3);
powtorz(gwiazda(), 5);
        mruganie_po_kolei();
}
    return 0;
}

void gwiazda()
{
P_2;
    Led(16);
_delay_ms(75);
    short int time=0;
while(1)
    {
time++;
        P_1;
Led(16);
        P_2;
Led(186);
        _delay_us(10);
P_3;
        Led(16);
if(time == 6000)
            break;
}
    time = 0;
while(1)
    {
time++;
        P_1;
Led_9;
        Led(255);
P_2;
        Led_9;
Led(255);
        P_3;
Led_9;
        Led(255);
if(time == 5000)
        break;
}
}

#include <stdlib.h>

void matrix()
{
    static unsigned char srand_value;
srand_value++;
    srand(srand_value);

    char tab[3];
tab[0] = rand();
    tab[1] = rand();
tab[2] = rand();
    char led[3];
led[0] = rand()%2;
    led[1] = rand()%2;
led[2] = rand()%2;
    short int time = 0;
while(1)
    {
Led(0);
        P_1; Led(tab[0]); if(led[0]) Led_9;
_delay_us(10);
        Led(0);
P_2; Led(tab[1]); if(led[1]) Led_9;
        _delay_us(10);
Led(0);
        P_3; Led(tab[2]); if(led[2]) Led_9;
time++;
        if(time>2000)
break;
    }
}

void mruganie_po_kolei()
{
#define TIME 50
        P_1;
Led(1);_delay_ms(TIME);
        Led(2);_delay_ms(TIME);
Led(4);_delay_ms(TIME);
        Led(8);_delay_ms(TIME);
Led(16);_delay_ms(TIME);
        Led(32);_delay_ms(TIME);
Led(64);_delay_ms(TIME);
        Led(128);_delay_ms(TIME);
P_2;
        Led(1);_delay_ms(TIME);
Led(2);_delay_ms(TIME);
        Led(4);_delay_ms(TIME);
Led(8);_delay_ms(TIME);
        Led(16);_delay_ms(TIME);
Led(32);_delay_ms(TIME);
        Led(64);_delay_ms(TIME);
Led(128);_delay_ms(TIME);
        P_3;
Led(1);_delay_ms(TIME);
        Led(2);_delay_ms(TIME);
Led(4);_delay_ms(TIME);
        Led(8);_delay_ms(TIME);
Led(16);_delay_ms(TIME);
        Led(32);_delay_ms(TIME);
Led(64);_delay_ms(TIME);
        Led(128);_delay_ms(TIME);
#undef TIME
}

void walec_bok()
{
    P_1;
Led(56);
    _delay_ms(100);
P_2;
    Led(7);
_delay_ms(100);
    P_3;
Led(56);
    _delay_ms(100);
P_2;
    Led_9;
Led(192);
    _delay_ms(100);
}

void walec_przod()
{
P_1;
    Led(146);
_delay_ms(100);
    P_2;
Led(73);
    _delay_ms(100);
P_3;
    Led(146);
_delay_ms(100);
    P_2;
Led_9;
    Led(36);
_delay_ms(100);
}

void walec_gora()
{
    P_FULL;
Led(128);
    _delay_ms(100);
P_FULL;
    Led(32);
_delay_ms(100);
    P_FULL;
Led(2);
    _delay_ms(100);
P_FULL;
    Led(8);
_delay_ms(100);
}

void wlaczajaca_kostka()
{
    short int time=0;
while(1)
        {
time++;
            if(time<4000)
{
                 P_1;Led(4);
_delay_us(10);
                 Led(0);
time += 4;
            }
else
            {
if(time<8000)
                {
Led(0);
                    P_1; Led(4);
_delay_us(10);
                    Led(0);
P_2; Led(16);
                }
else
                {
if(time<12000)
                    {
P_1; Led(5);
                        _delay_us(10);
Led(0);
                        P_2; Led(16);
_delay_us(10);
                        Led(0);
P_3; Led_9;
                    }
else
                    {
if(time<16000)
                        {
Led(0);
                            P_1; Led(5); Led_9;
_delay_us(10);
                            Led(0);
P_2; Led(16);
                            _delay_us(10);
Led(0);
                            P_3;  Led(68); Led_9;
}
                        else
{
                            if(time<20000)
{
                                Led(0);
P_1; Led(69); Led_9;
                            _delay_us(10);
Led(0);
                            P_2; Led(16);
_delay_us(10);
                            Led(0);
P_3;  Led(69); Led_9;
                            }
else
                                return;
}
                    }
}
            }
}
}

Na zakończenie – kilka zdjęć.DSCF0439 DSCF0423 DSCF0401

 

INFORMACJA: Poniższy post nie wydostał się z Poczekalni :(

Ocena: 5/5 (głosów: 1)

Podobne posty

14 komentarzy do “Cube LED 3*3*3 na Atmega8

Odpowiedz

anuluj

Masz uwagi?