Valentina Mihaela MANEA - Tetris pe matrice bicoloră

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Acest proiect își propune, așa cum sugerează și numele său, să implementeze celebrul joc Tetris pe o matrice de LED-uri verzi și roșii de dimensiune 8×8. M-am gândit la acest proiect deoarece îmi place jocul și mi se pare că se potrivește cu o implementare pe matrice de LED-uri. De asemenea, nu este un proiect foarte dificil din punct de vedere hardware (sau așa pare deocamdată :P) și cred că este un început bun pentru lucrul cu microprocesoare.

Descriere generală

În centrul proiectului se află microcontroller-ul ATMEGA324. Pinii din zonele PORT B și PORT D vor comanda coloanele matricii. 3 pini din zona PORT A vor comanda un demultiplexor 3:8 care va comanda liniile matricii. Pe lângă acestea, mai există și 6 butoane (4 pentru controlul pieselor, unul pentru reset, unul pentru selectarea nivelului).

Hardware Design

Nume componentă Loc cumpărare Cost bucată Număr bucăți Cost total Observații
Matrice bicoloră TME 37.71 1 37.71 http://www.tme.eu/ro/details/tba23-12egwa/afisaje-led-matrice/kingbright-electronic/#
Demultiplexor 3:8 TME 0.5 5 2.5 http://www.tme.eu/ro/details/74hc138/circuite-logice-ttl/#
Buton Conectica ~0.7 6 ~4.2
Placuță test Conectica 12 1 12
Rezistențe 150 ohmi Conectica ~0.03 16 ~0.4

Total: ~56 RON

Matricea bicoloră:

Demultiplexor:

Software Design

Pentru dezvoltare am folosit WinAVR împreună cu Programmer's Notepad.

Fiecare piesă de Tetris are pattern-ul reținut într-o matrice 4×4. Alături de aceasta, se rețin coordonatele colțului din dreapta sus pentru a putea localiza piesa. Aceste elemente sunt incluse într-o structură. Jocul se desfășoară astfel:

- se inițializează harta

- se generează o piesă nouă

- într-o buclă, se desenează harta și se mută piesa curentă în jos, după care se așteaptă o secundă

Funcții implementate:

- turn_on_column(column), turn_on_row(row), turn_off_row(row) - așa cum sugerează și numele, acestea controlează aprinderea și stingerea unei coloane sau a unui rând

- generate_piece() - generează o piesă nouă și o pune pe hartă

- draw() - desenează harta folosind efectul Persistance of Vision - se desenează câte un rând și apoi se stinge, foarte des

- collision() - detectează eventuale coliziuni

- rotate_block() - rotește blocul curent

- move_block() - mută blocul curent

- init() - pornește jocul

Nu este implementată intracțiunea cu butoanele. De asemenea, desenarea ar trebui să se facă continuu, iar mutarea la o întrerupere de ceas.

Rezultate Obţinute

Proiectul nu a fost finalizat. Am întâmpinat următoarele probleme:

- număr foarte mare de cabluri de lipit ⇒ mișcam puțin plăcuța, mai sărea un cablu

- am reușit să comand 3 LED-uri ale matricii (prin demultiplexor) dar, brusc, nu mi-a mai fost recunoscută plăcuța; alți colegi au întâmpinat aceeași problemă și au schimbat diodele Zener - eu nu am mai avut timp să cumpăr

După aprinderea unui LED verde:

După aprinderea a două LED-uri (verde și roșu):

Concluzii

- proiectul necesita o planificare mult mai atentă, ar fi trebuit să imprim un circuit prin care să pot scoate pinii matricii prin pini exteriori, apoi să conectez așa la microprocesor

- din punct de vedere software, proiectul este foarte ușor dar din cauza problemelor hardware amintite, nu am mai ajuns la partea software

Download

Cod: tetris-cod.zip

Proiect Proteus: tetris.zip

Bibliografie/Resurse

pm/prj2013/sstegaru/tetris.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