LedCube consta in construirea unei piese de decor si anume a unui cub 3D format din 4 x 4 x 4 (64 leduri) prin intermediul caruia se vor afisa imagini 3D sau modele diferite de aprindere a acestora. Astfel avand ocazia sa fac un proiect folosind microcontrolerul Atmega16 si vazand niste fimulete pe youtube, am decis ca vreau si eu un astfel de cub.

Coordonator: Popescu George

Introducere

Proiectul consta intr-un 3D Led Cube de latura 4.

Cubul va fi controlat de micro-controller-ul Atmel Atmega16.

Acesta va aprinde led-urile dupa modele prestabilite.

Scopul si utilitatea proiectului consta in demonstrarea multiplexarii realizata de micro-controller-ul Atmel Atmega16.

Descriere generală

Schema Bloc


Cu ajutorul interfatei seriale voi programa microcontrolerul Atmega16. In functie de program acesta va afisa anumite animatii, predefinite in program, pe cubul 3D. Cubul este legat direct la pinii microcontrolerului astfel: 16 coloane a cate 4 leduri (anodul +), si 4 nivele a cate 16 leduri (cadodul -), in total avand nevoie de 20 de pini disponibili din partea lui Atmega16.

Hardware Design

Lista de piese:

Componente Bucati
LED 64
rezistente 100Ω 16
Atmel AVR Atmega16
ULN2003AN

Schema:

Software Design

Mediul de dezvoltare

  • AVR Studio

Programarea microcontrelerului am realizat-o cu ajutorul programului WinAvr, care include compilatorul GNU GCC pentru limbajele C si C++.

Memorarea cubului se face într-o matrice 2D de tipul volatile unsigned char cube[4][4]. Matricea va avea două dimensiuni şi anume axa Z şi axa Y. Fiecare byte va reprezenta o linie de leduri de-a lungul axei X, asfel voi folosi doar cei 4 biţi inferiori. Matricea e de tipul volatile pentru a putea fi referită din funcţia de întreruperi.

Codul contine 4 fisiere C: main.c, effect.c, draw.c si frames.c. In fisierul main avem 4 functii importante: ioinit ( initializeaza porturile I/O), bootmsg (clipirea becurilor pentru a indica boot sau reboot), delay_ms si launch_effect (incarcarea efectelor). In fisierul effect.c sunt definite toate animatiile care vor aparea cand cubul este pus in functiune, iar in fisierul draw.c sunt definite functii geometrice.

Definitii

// Viteza CPU-ului si Baud rate:
#define FOSC 14745600
#define BAUD 9600

//Calculul timpilor USART
#define MYUBRR (((((FOSC * 10) / (16L * BAUD)) + 5) / 10) - 1)



// Masti petru statusul ledurilor 
#define LED_GREEN 0x01
#define LED_RED 0x02
#define BUTTON 0x08

//Folosim portul B pentru status si intrari
#define LED_PORT PORTB
#define BUTTON_PORT PORTB



// Masti pt selectarea nivelului
#define LAYER1 0x80
#define LAYER2 0x40
#define LAYER3 0x20
#define LAYER4 0x10
#define LAYERS 0xf0 // Toate nivelele
#define LAYERS_R 0x0f // Inversul nivelelor
#define LAYER_PORT PORTD // Folosim Portul D pentru nivele

// Folosim Port A si Port C pt coloanele cubului.
#define GRID1 PORTC
#define GRID2 PORTA

void ioinit (void); // Initializarea I/O 
void bootmsg (void); // Clipirea becurilor pentru a indica boot sau reboot
void delay_ms (uint16_t x); // functia delay folosita de la un capat la altul al programului
void led_red(unsigned char state); // led on or off
void led_green(unsigned char state);
void launch_effect (int effect); // incarcarea efectului.

Rezultate Obţinute


Concluzii

  • A fost un proiect foarte interesant.
  • Am devenit mai intim cu hardware-ul cum mi-a sugerat domnul Tapus.
  • Rezultatul arata frumos.

Download

Jurnal

Day 4
Dear diary,
Am inceput. Ureaza-mi noroc.

Day 8
Dear diary,
Am facut scheletul la cub.

Day 15
Dear diary,
Conectat fire, nu am gasit nici un scurt. Codul e WIP

Day 16
Dear diary,
Codul e gata. Pare sa mearga acceptabil.

Day 23
Astazi trebuie sa prezint.

Bibliografie/Resurse

pm/prj2010/pgp/ledcube/start.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0