Andrei-Mircea HÎRGĂU (25441) - Space Invaders

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul ales de mine este un joc Space Invaders pe LCD. Ideea a pornit de la un proiect din anii trecuti la care eu as vrea sa ii adaug in plus controlul navei jucatorului printr-un accelerometru, stocarea scorurilor cele mai bune si dificultate progresiva.

Scopul proiectului este sa aplic notiunile invatate in cadrul laboratoarelor de PM prin crearea unui joc fun.

Descriere generală

Schema bloc a proiectului arata in felul urmator:

Input:

  • Butoane:
    • shoot / interact - folosit pentru lansarea proiectilelor (in timpul jocului efectiv) si pentru selectie (in meniuri)
    • pause - folosit pentru a pune pauza in timpul jocului
    • navigate_up - folosit pentru a nagiva in sus selectia in cadrul meniului
    • navigate_down - folosit pentru a navia in jos selectia in cadrul meniului
  • Accelerometru - determina miscarea stanga-dreapta a navei player-ului
  • Interfata SPI - citeste scorurile

Output:

  • Interfata SPI - scrie scorurile
  • Ecran LCD

Modulele software vor arata in felul urmator:

Modulele au urmatoarele roluri:

  • Modul I/O - scriere / citire pe cardul SD utilizand interfata SPI si preluarea input-urilor de la accelerometru si butoane
  • Modul UI - controlare a user-interface-ului (navigare meniuri + update high score sau obiecte cu care nu se poate interactiona / mesaje informative)
  • Modul joc - controlare a jocului in sine (invadatorii + jucatorul)
  • Modul IA inamici - ajustarea dificultatii invadatorilor
  • Modul afisaj - afisarea tuturor obiectelor pe ecranul LCD

Hardware design

Lista componentelor:

Schema electrica:

Am folosit regulatorul de tensiune LP2950-33LPE3 impreuna cu condensatorul de 100uF pentru a avea o tesniune de alimentare a placutei de 3.3V (in loc de 5V), deoarece toate componentele mele hardware (exceptand butoanele si cititorul de card SD, care avea intrari atat pentru 3.3V, cat si pentru 5V) functionau la 3.3V, ceea ce ar fi facut utilizarea unor divizoare de tensiune destul de anevoioasa si muncitoreasca (ar fi trebuit cate un divizor de tensiune pentru fiecare input al fiecarei componente + condensator pentru masa).

De asemenea, pentru butoane nu am folosit rezistente externe, ci am activat rezistentele de pull-up ale microprocesorului pentru fiecare buton.

Legaturile dintre microprocesor si componente au fost facute dupa urmatoarele rationamente:

  • Accelerometrul MPU6050 functioneaza cu interfata I2C, ceea ce inseamna ca trebuie legat neaparat la PORTC (PC0 - SCL, PC1 - SDA)
  • Cititorul de card SD foloseste interfata SPI pentru comunicare, deci trebuie legat la PORTB
  • Biblioteca aleasa pentru Nokia 5110 implementeaza protocolul de comunicatie la nivel software, deci display-ul poate fi legat la orice port.
  • Butoanele pot fi legate la orice port (cu cateva exceptii, de exemplu daca sunt activate intreruperile, ar trebui evitati PD2 si PD3, la fel pentru timere si PB3, etc)

Software Design

Software utilizat:

  • Linux
  • avr-gcc
  • Sublime Text 2

Lista cu bibliotecile folosite se gaseste la resurse.

Observatii:

  • Am folosit biblioteca pff din laborator pentru operatiile cu cardul SD, care nu poate sa creeze fisiere noi, si nici nu poate sa scrie peste EOF, ceea ce inseamna ca trebuie pus pe cardul SD un fisier de pe un mediu extern, care sa aiba cel putin 30 de octeti, eventual cu padding (scorurile sunt de tip short ⇒ in cel mai rau caz, fisierul va avea 5 numere a cate 5 cifre + cate 1 newline ⇒ 30 de caractere); am atasat un exemplu de fisier cu scoruri in arhiva
  • Am adaugat functii de draw la nivel de pixel bibliotecii folosite pentru LCD Nokia 5110
  • Am adaugat un build special fisierului makefile, care va genera un hex ce va testa inainte de rularea efectiva a codului jocului functionalitatea anumitor componente (LCD, accelerometru, butoane)
  • Pentru compilare + flash-uire, se poate apela make flash (pentru varianta fara verificarile componentelor) sau make flash-sanity (pentru build-ul cu verificarea componentelor). Este nevoie ca variabila LOADER_PATH din Makefile sa fie setata la path-ul catre bootloader

Rezultate Obţinute

Concluzii

A fost probabil cel mai interesant proiect din toata facultatea, deoarece am pus in practica multe cunostinte de la diverse materii.

Download

Bibliografie/Resurse

pm/prj2016/csoare/spaceinvaders.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