Table of Contents

3D Led Cube

Introducere

Proiectul consta in construirea unui cub de leduri si crearea de animatii pe acesta. Am considerat ca este un proiect interesant si am dorit sa il fac mai dificil prin marirea laturii cubului.

Cubul va fi animat prin aprinderea succesiva a straturilor orizontale, creand un efect de aprindere permananta daca succesiunea este rapida.

Initial am dorit folosirea de multiplexoare pentru accesarea fiecarui led dintr-un strat, dar am optat pentru un Shift-Register pentru ca era mai usor de folosit. Pentru aprinderea staturilor am folosit o matrice de tranzistori.

Componente

Total: ~ 200 lei

Se putea mai ieftin daca nu intampinam erori, in final cred ca merita.

Hardware

Software

Conexiuni hardware-microcontroller:

Un cod simplu:

led6.c
int main()
{
        //Setez Porturile A si C pe iesire
	DDRA = 0xFF;
	DDRC = 0xFF;
 
	PORTA = 0;
	PORTC = 0;
 
	int y = PA0;
	int z = PC0;
 
        //Dezactivez iesirile shiterelor
	PORTA |= (1<<PA6);
 
        //Aprind prima linie din primul strat
	PORTA |= (1<<PA0);
	PORTC |= (1<<PC0);
 
	int t = 0, u=0;
	while(1)
	{
                //Dau o bataie de ceas
		PORTA |= (1<<PA7);
 
		//delay_ms(1);
 
		PORTA &= ~(1<<PA7);
 
                //Pentru a aprinde fiecare led de pe o linie diferit, aici ar trebui modificata valoarea pinului corespunzator liniei
 
		if (t==8)
		{
			t = 0;
 
			//Activez iesirea
			PORTA &= ~(1<<PA6);
 
			delay_ms(4);
 
			PORTA |= (1<<PA6);
 
                        //Modific startul
			PORTC &= ~(1<<z);
			z++;			
			if (z - PC0 == 6)
			{
				z = PC0;
 
				if (u==8)
				{
                                        //Modific linia
					u=0;
					PORTA &= ~(1<<y);
					y++;		
					if (y-PA0 == 6)
					{
						y = PA0;
					}
					PORTA |= (1<<y);
				}
				u++;
			}
			PORTC |= (1<<z);
		}
		t++;
	}
 
	return 0;
}

Implementare

Rezultat

Inainte de a avea rezultatul final a trebuit sa repar o serie de probleme aparute, cele mai multe provenind din necitirea cu atentie a documentatiei.

Atentie la notatii si la valoarea semnalelor pentru care ar trebui sa se intample anumite salvari, de exemplu, eu am nu am vazut ca pinul de resetare al shiterelor este activat atunci cand nu este tensiune aplicata si il lasasem in aer, mi-a dat destul dem ult de cap lucrul acesta. Alta eroare intampinata a fost la microcontroller unde nu am fost atent si foloseam ultimii 6 pini ai portului C in loc de primii si nu mi se aprindeau corect straturile.

Scurt-circuiturile au fost ceva clasic, mai ales cand ma gandesc la cate fire se suprapuneau si, chiar daca aveau camasa, s-a topit si s-au unit.

Concluzii