Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2026:tarik_ilhan.omer:andrei.balica [2026/05/05 12:11]
andrei.balica
pm:prj2026:tarik_ilhan.omer:andrei.balica [2026/05/05 12:31] (current)
andrei.balica [Descriere generala]
Line 2: Line 2:
  
 ===== Introducere ===== ===== Introducere =====
-Acest proiect consta in realizarea unei console de jocuri retro (asemanatoare clasicului GameBoy), construita "from scratch"​ pe un breadboard in jurul unui microcontroler ATmega328P standalone.  
  
-  * **Ce face:** Consola ruleaza jocuri clasice (precum Snake, Pong etc.) care nu sunt stocate in mod permanent in memoria procesorului,​ ci sunt incarcate dinamic de pe carduri MicroSD, acestea actionand asemenea "​casetelor"​ fizice din anii '90. +Acest proiect consta in realizarea unei console de jocuri retro (asemanatoare clasicului GameBoy), construita "from scratch"​ pe un breadboard in jurul unui microcontroler ATmega328P standalone. 
-  * **Scopul lui:** Depasirea limitarilor hardware ale arhitecturii Harvard (separarea memoriei de date de cea de program) de pe ATmega328P, prin implementarea unui SD Bootloader custom care permite auto-reprogramarea (self-programming) microcontrolerului pe loc. + 
-  * **Ideea de la care am pornit:** Nostalgia consolelor clasice si dorinta de a crea un sistem modular, in care schimbarea jocului sa presupuna o actiune fizica (schimbarea cardului), fara a mai conecta placa la un laptop pentru scriere de cod. +  ​* **Ce face:** Consola ruleaza jocuri clasice (precum Snake, Pong etc.) care nu sunt stocate in mod permanent in memoria procesorului,​ ci sunt incarcate dinamic de pe carduri MicroSD, acestea actionand asemenea "​casetelor"​ fizice din anii '90. 
-  * **De ce este util:** Pentru mine este un exercitiu excelent de intelegere a memoriei flash, protocolului SPI si sistemelor de fisiere (FAT32) la nivel bare-metal. Pentru ceilalti, poate servi ca platforma educationala de dezvoltare a jocurilor embedded cu resurse extrem de limitate.+ 
 +  * **Scopul lui:** Depasirea limitarilor hardware ale arhitecturii Harvard (separarea memoriei de date de cea de program) de pe ATmega328P, prin implementarea unui SD Bootloader custom care permite auto-reprogramarea (self-programming) microcontrolerului pe loc. 
 + 
 +  * **Ideea de la care am pornit:** Nostalgia consolelor clasice si dorinta de a crea un sistem modular, in care schimbarea jocului sa presupuna o actiune fizica (schimbarea cardului), fara a mai conecta placa la un laptop pentru scriere de cod. 
 + 
 +  * **De ce este util:** Pentru mine este un exercitiu excelent de intelegere a memoriei flash, protocolului SPI si sistemelor de fisiere (FAT32) la nivel bare-metal. Pentru ceilalti, poate servi ca platforma educationala de dezvoltare a jocurilor embedded cu resurse extrem de limitate.
  
 ===== Descriere generala ===== ===== Descriere generala =====
-Arhitectura sistemului se bazeaza pe o unitate centrala de procesare minimala, a carei functionalitate se extinde prin periferice de intrare (butoane), iesire (display) si memorie (card SD).+ 
 +Arhitectura sistemului se bazeaza pe o unitate centrala de procesare minimala, a carei functionalitate se extinde prin periferice de intrare (butoane, joystick), iesire (display) si memorie (card SD).
  
 **Module si interactiune:​** **Module si interactiune:​**
-  - **Unitatea de procesare:​** Microcontrolerul ATmega328P. Acesta orchestreaza intregul sistem. La pornire (reset), executa codul din sectiunea de bootloader. 
-  - **Sistemul de memorie (SPI):** Modulul MicroSD comunica pe magistrala SPI. Bootloader-ul monteaza sistemul FAT, cauta un fisier binar (.HEX sau .BIN) si, daca gaseste o "​caseta"​ noua, scrie continutul in memoria Flash interna a MCU, dupa care cedeaza controlul jocului. 
-  - **Sistemul grafic (I2C):** Un ecran OLED de 0.96 inch (sau 1.3 inch) primeste bufferele de pixeli prin protocolul I2C. Consuma doar doi pini (SDA, SCL) si ofera un contrast perfect pentru jocurile retro pixel-art. 
-  - **Interfata de control (Digital IO):** Un set de butoane configurate in format D-Pad (Sus, Jos, Stanga, Dreapta + Actiune). Acestea folosesc rezistentele interne de pull-up ale MCU-ului si comuta in LOW la apasare, eliminand nevoia componentelor externe. 
-  - **Modulul de alimentare:​** O sursa externa (baterie 9V) este stabilizata la 5V curat de un regulator liniar L7805CV, protejat de condensatori de decuplare, oferind curentul necesar atat cipului, cat si ecranului si modulului SD. 
  
-{{:​pm:​prj2026:​tarik_ilhan.omer:​andreibalica:​schema_bloc.png?600|Schema Bloc a Consolei}}+  - **Unitatea de procesare:​** Microcontrolerul ATmega328P. Acesta orchestreaza intregul sistem. La pornire (reset), executa codul din sectiunea de bootloader. 
 + 
 +  - **Sistemul de memorie (SPI):** Modulul MicroSD comunica pe magistrala SPI. Bootloader-ul monteaza sistemul FAT, cauta un fisier binar (.HEX sau .BIN) si, daca gaseste o "​caseta"​ noua, scrie continutul in memoria Flash interna a MCU, dupa care cedeaza controlul jocului. 
 + 
 +  - **Sistemul grafic (I2C):** Un ecran OLED de 0.96 inch (sau 1.3 inch) primeste bufferele de pixeli prin protocolul I2C. Consuma doar doi pini (SDA, SCL) si ofera un contrast perfect pentru jocurile retro pixel-art. 
 + 
 +  - **Interfata de control (Digital IO):** Un joystick 5D (5-directional navigation switch) pentru navigare, completat de 5 butoane tip push pentru actiuni suplimentare (A, B, Start, Select, Reset). Toate folosesc rezistentele interne de pull-up ale MCU-ului si comuta in LOW la apasare, eliminand nevoia componentelor externe. 
 + 
 +  - **Modulul de alimentare:​** O sursa externa (baterie 9V) este stabilizata la 5V curat de un regulator liniar L7805CV, protejat de condensatori de decuplare, oferind curentul necesar atat cipului, cat si ecranului si modulului SD. 
 + 
 +{{:​pm:​prj2026:​tarik_ilhan.omer:​schema_bloc_consola_retro.png?600|}}
  
 ===== Hardware Design ===== ===== Hardware Design =====
 +
 Design-ul fizic a fost conceput pentru a fi cat mai compact si stabil, folosind fire rigide pe breadboard pentru a minimiza "​padurea"​ de cabluri si a oferi un aspect curat. Design-ul fizic a fost conceput pentru a fi cat mai compact si stabil, folosind fire rigide pe breadboard pentru a minimiza "​padurea"​ de cabluri si a oferi un aspect curat.
  
 **Lista de piese:** **Lista de piese:**
-  * 1 x Microcontroler Microchip ATmega328P-PU (fara placa Arduino) + 
-  * 1 x Cristal oscilator de 16 MHz si 2 x Condensatori ceramici de 22pF +  ​* 1 x Microcontroler Microchip ATmega328P-PU (fara placa Arduino) 
-  * 1 x Regulator de tensiune L7805CV + Condensatori filtrare (10uF / 100uF) +  * 1 x Cristal oscilator de 16 MHz si 2 x Condensatori ceramici de 22pF 
-  * 1 x Display OLED 0.96" (sau 1.3") I2C (Driver SSD1306/​SH1106) +  * 1 x Regulator de tensiune L7805CV + Condensatori filtrare (10uF / 100uF) 
-  * 1 x Modul cititor MicroSD Card (Interfata SPI) +  * 1 x Display OLED 0.96" (sau 1.3") I2C (Driver SSD1306/​SH1106) 
-  * 5/6 x Micro-switch-uri (Butoane tip push pentru D-Pad si comenzi+  * 1 x Modul cititor MicroSD Card (Interfata SPI
-  * 1 x Breadboard 830 puncte +  * 1 x Joystick 5D (5-directional navigation switch
-  * Fire de conexiune rigide si flexibile +  * 5 x Micro-switch-uri (Butoane tip push — A, B, Start, Select, Reset
-  * 1 x Conector baterie 9V+  * 1 x Breadboard 830 puncte 
 +  * Fire de conexiune rigide si flexibile 
 +  * 1 x Conector baterie 9V
  
 ===== Software Design ===== ===== Software Design =====
 +
 Dezvoltarea software este impartita in doua mari categorii: Bootloader-ul de sistem (care gestioneaza memoria) si Engine-ul jocurilor (firmware-ul efectiv). Dezvoltarea software este impartita in doua mari categorii: Bootloader-ul de sistem (care gestioneaza memoria) si Engine-ul jocurilor (firmware-ul efectiv).
  
-  * **Mediu de dezvoltare:​** PlatformIO. +  ​* **Mediu de dezvoltare:​** PlatformIO. 
-  * **Librarii:​** Se vor folosi biblioteci adecvate pentru ecranul OLED si pentru citirea sistemului de fisiere FAT de pe cardul SD. + 
-  * **Bootloader-ul (Miezul proiectului):​** Se foloseste o varianta derivata din 2000-Lines-of-Code SD Bootloader (sau zbm-h/​sd-bootloader). Acesta ocupa primii octeti din Flash si implementeaza direct functiile SPM (Store Program Memory) ale AVR-ului. +  * **Librarii:​** Se vor folosi biblioteci adecvate pentru ecranul OLED si pentru citirea sistemului de fisiere FAT de pe cardul SD. 
-  * **Logica jocului (Ex: Snake):** Foloseste un sistem de tip Game Loop (Update & Draw). Memoria RAM de doar 2KB a ATmega328P limiteaza buffer-ul grafic, motiv pentru care randarea se face prin paginare sau direct pe componente bloc (8x8 pixeli) pentru a salva memorie. ​Butoanele ​sunt citite pe baza de polling in bucla principala sau prin Pin Change Interrupts.+ 
 +  * **Bootloader-ul (Miezul proiectului):​** Se foloseste o varianta derivata din 2000-Lines-of-Code SD Bootloader (sau zbm-h/​sd-bootloader). Acesta ocupa primii octeti din Flash si implementeaza direct functiile SPM (Store Program Memory) ale AVR-ului. 
 + 
 +  * **Logica jocului (Ex: Snake):** Foloseste un sistem de tip Game Loop (Update & Draw). Memoria RAM de doar 2KB a ATmega328P limiteaza buffer-ul grafic, motiv pentru care randarea se face prin paginare sau direct pe componente bloc (8x8 pixeli) pentru a salva memorie. ​Joystick-ul si butoanele ​sunt citite pe baza de polling in bucla principala sau prin Pin Change Interrupts.
  
 ===== Rezultate Obtinute ===== ===== Rezultate Obtinute =====
 +
 (Sectiunea va fi completata pe masura ce avanseaza asamblarea componentelor si primele teste pe breadboard.) (Sectiunea va fi completata pe masura ce avanseaza asamblarea componentelor si primele teste pe breadboard.)
  
 ===== Concluzii ===== ===== Concluzii =====
 +
 (Sectiunea va fi completata la finalizarea proiectului.) (Sectiunea va fi completata la finalizarea proiectului.)
  
 ===== Download ===== ===== Download =====
 +
 (Aici va fi adaugata arhiva cu fisierele sursa dupa finalizare.) (Aici va fi adaugata arhiva cu fisierele sursa dupa finalizare.)
  
 ===== Jurnal ===== ===== Jurnal =====
-  * **Saptamana 1:** Achizitionarea pieselor hardware. Planificarea pinilor. Realizarea montajului de baza (circuitul de alimentare pe breadboard si testarea functionarii cipului ATmega328P "in gol"​). + 
-  * **Urmeaza:​** Conectarea ecranului OLED si implementarea butoanelor de control pentru a testa partea vizuala a proiectului.+  ​* **Saptamana 1:** Achizitionarea pieselor hardware. Planificarea pinilor. Realizarea montajului de baza (circuitul de alimentare pe breadboard si testarea functionarii cipului ATmega328P "in gol"). 
 + 
 +  * **Urmeaza:​** Conectarea ecranului OLED si implementarea ​joystick-ului si butoanelor de control pentru a testa partea vizuala a proiectului.
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
-  * Datasheet-ul pentru ATmega328P. + 
-  * Documentatia modulelor OLED si SD Card. +  ​* Datasheet-ul pentru ATmega328P. 
-  * Resursele si laboratoarele din cadrul materiei de Proiectare cu Microprocesoare (I2C, SPI).+  * Documentatia modulelor OLED si SD Card. 
 +  * Resursele si laboratoarele din cadrul materiei de Proiectare cu Microprocesoare (I2C, SPI).
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
pm/prj2026/tarik_ilhan.omer/andrei.balica.1777972271.txt.gz · Last modified: 2026/05/05 12:11 by andrei.balica
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