Space Invaders

Introducere

Proiectul consta in realizarea unei console embedded simple care ruleaza jocul Space Invaders pe un microcontroler ATmega328P Xplained Mini.

Jocul va fi afisat pe un ecran TFT SPI de 2.4 inch, cu rezolutie 240×320 pixeli si driver ST7789V. Deoarece display-ul foloseste semnale logice de 3.3V, voi folosi un level shifter pentru adaptarea semnalelor dintre microcontroler si ecran.

Utilizatorul va controla nava folosind butoane fizice. Proiectul va include si feedback sonor printr-un buzzer pasiv, un potentiometru pentru reglarea dificultatii si trei LED-uri pentru indicarea starii jocului.

Scopul proiectului este de a realiza un sistem interactiv care combina afisarea grafica, citirea inputului de la utilizator, generarea de sunete si controlul mai multor periferice de catre microcontroler.

Descriere generala

Sistemul este construit in jurul placii ATmega328P Xplained Mini, care controleaza toate componentele proiectului.

Utilizatorul va putea muta nava in stanga si in dreapta, va putea trage in inamici si va putea porni/opri sau reseta jocul folosind butoanele tactile. Ecranul TFT va afisa zona de joc, scorul, vietile ramase si starea jocului.

Potentiometrul va fi folosit pentru reglarea dificultatii, de exemplu prin modificarea vitezei cu care se misca inamicii. Buzzerul va oferi feedback sonor pentru actiuni precum tragerea, lovirea unui inamic sau terminarea jocului. Cele trei LED-uri vor fi folosite pentru afisarea vietilor ramase sau pentru stari speciale ale jocului.

Level shifter-ul va fi folosit intre microcontroler si display pentru a adapta semnalele SPI/control de la 5V la 3.3V.

Schema bloc

+---------------------------+
| ATmega328P Xplained Mini  |
+---------------------------+
   |        |        |        |
   |        |        |        |
   v        v        v        v
+------+  +---------+  +--------+  +------------------+
| GPIO |  | Butoane |  | Buzzer |  | Potentiometru   |
+------+  +---------+  +--------+  +------------------+
   |                                  |
   v                                  v
+-----------+                  +--------------------+
| 3 LED-uri |                  | ADC - dificultate  |
+-----------+                  +--------------------+


+---------------------------+
| ATmega328P Xplained Mini  |
+---------------------------+
             |
             | SPI/control 5V
             v
+---------------------------+
| Level shifter 5V -> 3.3V  |
+---------------------------+
             |
             | SPI/control 3.3V
             v
+---------------------------+
| TFT SPI 2.4 inch ST7789V  |
| 240x320 pixeli            |
+---------------------------+
             |
             v
+---------------------------+
| Afisare joc Space Invaders|
+---------------------------+

Hardware Design

Lista de componente

  • ATmega328P Xplained Mini
  • Display TFT SPI 2.4 inch, 240×320 pixeli, driver ST7789V
  • Level shifter logic 5V → 3.3V
  • 5 butoane tactile
  • buzzer piezo pasiv
  • potentiometru 10kΩ
  • 3 LED-uri
  • rezistente 220Ω / 330Ω pentru LED-uri
  • rezistente 10kΩ pentru butoane, daca nu se folosesc rezistentele interne de pull-up
  • breadboard
  • fire jumper

Conectare preliminara

Componenta Pin microcontroler Rol
TFT SCK PB5 / SCK comunicatie SPI, prin level shifter
TFT MOSI / SDA PB3 / MOSI comunicatie SPI, prin level shifter
TFT CS PC1 selectie display, prin level shifter
TFT DC / A0 PC2 comanda/date display, prin level shifter
TFT RST / RES PC3 reset display, prin level shifter
Potentiometru PC0 / ADC0 citire dificultate
Buzzer pasiv PB1 feedback sonor
Buton stanga PD2 deplasare nava
Buton dreapta PD3 deplasare nava
Buton tragere PD4 tragere proiectil
Buton pauza/meniu PD5 control joc
Buton reset/select PD6 resetare/selectare
LED 1 PB0 viata/status
LED 2 PB2 viata/status
LED 3 PD7 status/game over

Display-ul TFT va comunica prin SPI, folosind pinii SCK si MOSI ai microcontrolerului, impreuna cu pini suplimentari pentru CS, DC si RST. Deoarece display-ul foloseste logica de 3.3V, semnalele dintre ATmega328P si display vor trece printr-un level shifter.

Butoanele vor fi citite ca intrari digitale. Potentiometrul va fi conectat la o intrare analogica, iar valoarea citita va fi folosita pentru modificarea dificultatii. Buzzerul va fi controlat printr-un pin digital/PWM pentru generarea de sunete simple. LED-urile vor fi conectate prin rezistente de limitare a curentului.

TODO: Schema electrica finala va fi adaugata dupa realizarea montajului.

Software Design

Codul va implementa logica jocului Space Invaders si controlul componentelor hardware.

Functionalitati planificate:

  • initializarea ecranului TFT
  • afisarea meniului si a zonei de joc
  • citirea butoanelor
  • deplasarea navei
  • tragerea proiectilelor
  • deplasarea inamicilor
  • detectarea coliziunilor
  • calcularea scorului
  • gestionarea vietilor
  • reglarea dificultatii folosind potentiometrul
  • generarea de sunete prin buzzer
  • aprinderea LED-urilor in functie de starea jocului

Jocul va avea o bucla principala in care se citesc intrarile, se actualizeaza starea jocului si se redeseneaza ecranul.

Pentru a evita consumul mare de memorie, jocul nu va folosi un buffer complet pentru ecran. Elementele grafice vor fi desenate direct pe display, iar la fiecare actualizare se vor sterge si redesena doar zonele care se modifica.

Rezultate Obtinute

TODO

Concluzii

TODO

Download

TODO

Bibliografie/Resurse

pm/prj2026/cezar.zlatea/razvan.bercia.txt · Last modified: 2026/05/09 22:31 by razvan.bercia
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