This shows you the differences between two versions of the page.
|
pm:prj2026:tarik_ilhan.omer:andrei.balica [2026/05/05 12:09] andrei.balica |
pm:prj2026:tarik_ilhan.omer:andrei.balica [2026/05/05 12:31] (current) andrei.balica [Descriere generala] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Consola Retro Modulara ====== | + | ====== Consola Retro Modulara (GameBoy Clone) ====== |
| ===== Introducere ===== | ===== Introducere ===== | ||
| - | Acest proiect consta in realizarea unei console de jocuri retro, construita "from scratch" pe un breadboard in jurul unui microcontroler ATmega328P standalone. | ||
| - | * **Ce face:** Consola ruleaza jocuri (precum Snake) incarcate dinamic de pe carduri MicroSD, care functioneaza ca niste "casete" fizice interschimbabile. | + | 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:** Invatarea lucrului cu memoria sistemului (implementarea unui SD Bootloader custom) si comunicarea cu periferice externe pe protocoale diferite (SPI, I2C), avand resurse hardware limitate. | + | |
| - | * **Ideea de la care am pornit:** Dorinta de a construi o consola modulara la care schimbarea jocului sa se faca fizic, prin card, fara reprogramare din laptop. | + | * **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:** Reprezinta un exercitiu practic excelent de arhitectura a sistemelor embedded si gestiune eficienta a memoriei. | + | |
| + | * **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 se bazeaza pe o unitate centrala minimala, extinsa prin periferice de intrare, iesire si memorie. | + | |
| + | 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. Coordoneaza sistemul si, la pornire, executa bootloader-ul. | ||
| - | - **Sistemul de memorie (SPI):** Modulul MicroSD comunica pe magistrala SPI. Bootloader-ul cauta jocul pe card si il incarca in memoria Flash interna, apoi ii cedeaza controlul. | ||
| - | - **Sistemul grafic (I2C):** Un ecran OLED afiseaza grafica jocului, comunicand eficient prin doar doi pini (SDA, SCL). | ||
| - | - **Interfata de control (Digital IO):** Un modul de navigare 5D (joystick digital) sau un set de butoane configurate ca D-Pad, citite ca intrari digitale. | ||
| - | - **Modulul de alimentare:** O sursa externa (ex. baterie 9V) cuplata la un regulator de tensiune (5V) pentru a alimenta stabil intregul circuit. | ||
| - | {{: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 este conceput sa fie compact, implementat pe un breadboard. | + | |
| + | 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:** | ||
| - | * Microcontroler ATmega328P (standalone) | + | |
| - | * Cristal oscilator de 16 MHz si condensatori ceramici | + | * 1 x Microcontroler Microchip ATmega328P-PU (fara placa Arduino) |
| - | * Regulator de tensiune 5V (tip L7805) si condensatori de filtrare | + | * 1 x Cristal oscilator de 16 MHz si 2 x Condensatori ceramici de 22pF |
| - | * Display OLED (comunicare I2C) | + | * 1 x Regulator de tensiune L7805CV + Condensatori filtrare (10uF / 100uF) |
| - | * Modul cititor MicroSD Card (comunicare SPI) | + | * 1 x Display OLED 0.96" (sau 1.3") I2C (Driver SSD1306/SH1106) |
| - | * Modul navigare 5D (joystick digital) sau butoane tactile | + | * 1 x Modul cititor MicroSD Card (Interfata SPI) |
| - | * Breadboard si fire de conexiune | + | * 1 x Joystick 5D (5-directional navigation switch) |
| - | * Sursa de alimentare (Baterie 9V) | + | * 5 x Micro-switch-uri (Butoane tip push — A, B, Start, Select, Reset) |
| + | * 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 componente principale: bootloader-ul si aplicatia (jocul). | + | |
| + | 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. | ||
| - | * **Bootloader-ul:** Codul care ruleaza la reset. Initializeaza cardul SD, citeste fisierul executabil al jocului si il scrie in memoria program a microcontrolerului, permitand auto-reprogramarea. | + | |
| - | * **Logica jocului:** Foloseste un sistem clasic de tip "Game Loop". Citeste intrarile de la butoane, actualizeaza starea jocului si redeseneaza ecranul OLED. Datorita memoriei RAM mici a microcontrolerului, randarea graficii va fi optimizata pentru a consuma cat mai putine resurse. | + | * **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. | ||
| + | |||
| + | * **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"). | * **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. | + | |
| + | * **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. | * Datasheet-ul pentru ATmega328P. | ||
| * Documentatia modulelor OLED si SD Card. | * Documentatia modulelor OLED si SD Card. | ||
| * Resursele si laboratoarele din cadrul materiei de Proiectare cu Microprocesoare (I2C, SPI). | * 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> | ||