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

Cube LED 3*3*3 na Atmega8

 

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.Cube LED 3*3*3 na Atmega8 Cube LED 3*3*3 na Atmega8

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.

Cube LED 3*3*3 na Atmega8 Cube LED 3*3*3 na Atmega8 Cube LED 3*3*3 na Atmega8

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ęć.Cube LED 3*3*3 na Atmega8 Cube LED 3*3*3 na Atmega8 Cube LED 3*3*3 na Atmega8

 

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

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

Podobne posty

UTO – MIEJSKI BIEGACZ

UTO – MIEJSKI BIEGACZ

WitamTym razem chciałbym wam przedstawić relację z remontu i modernizacji Rollpeta, można też spotkać nazwę…

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

Odpowiedz

anuluj

Cube LED 3*3*3 na Atmega8

Nie przegap nowych projektów!

Zapisując się na nasz Newsletter będziesz miał pewność, że nie przegapisz żadnego nowego projektu opublikowanego w Majsterkowie!

Od teraz nie przegapisz żadnego projektu!

Masz uwagi?