This shows you the differences between two versions of the page.
|
pm:prj2026:ciprian.popescu0411:ionut.nicolae2009 [2026/05/04 18:54] ionut.nicolae2009 [Jurnal] |
pm:prj2026:ciprian.popescu0411:ionut.nicolae2009 [2026/05/12 23:59] (current) ionut.nicolae2009 adaugare resurse |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Nim pe LCD ====== | ====== Nim pe LCD ====== | ||
| ===== Introducere ===== | ===== Introducere ===== | ||
| - | Proiectul meu consta in realizarea jocului Nim pe o placuta ATMega324P, folosind ca display un LCD ST7735S. Nim reprezinta un joc matematic in care doi jucatori iau cu randul obiecte din multimi diferite. Pentru acest proiect am ales varianta Misere a jocului, in care pierzator este cel care ia ultimul obiect din joc, indiferent de multime.\\ | + | Proiectul meu consta in realizarea jocului Nim pe o placuta ATMega328P, folosind ca display un LCD ST7735S. Nim reprezinta un joc matematic in care doi jucatori iau cu randul obiecte din multimi diferite. Pentru acest proiect am ales varianta Misere a jocului, in care pierzator este cel care ia ultimul obiect din joc, indiferent de multime.\\ |
| - | Reguli joc: pe rand, fiecare jucator poate lua orice numar de elemente dintr-o singura multime. Nu se pot lua in aceeasi tura elemente din doua sau mai multe multimi. Jocul se termina doar atunci cand nu mai exsta elemente de luat, caz in care jucatorul care a facut ultima mutare pierde.\\ | + | Reguli joc: pe rand, fiecare jucator poate lua orice numar de elemente dintr-o singura multime. Nu se pot lua in aceeasi tura elemente din doua sau mai multe multimi. Jocul se termina doar atunci cand nu mai exista elemente de luat, caz in care jucatorul care a facut ultima mutare pierde.\\ |
| Exemplu de joc: 2 multimi A si B cu 2 elemente fiecare, 2 jucatori, Alice si Bob.\\ | Exemplu de joc: 2 multimi A si B cu 2 elemente fiecare, 2 jucatori, Alice si Bob.\\ | ||
| - stare joc: A 2 elemente (A-2), B 2 elemente (B-2)\\ | - stare joc: A 2 elemente (A-2), B 2 elemente (B-2)\\ | ||
| Line 12: | Line 12: | ||
| Scopul proiectului este unul pur recreational, realizat pentru amuzamentul utilizatorului. | Scopul proiectului este unul pur recreational, realizat pentru amuzamentul utilizatorului. | ||
| ===== Descriere generală ===== | ===== Descriere generală ===== | ||
| + | {{ :pm:prj2026:ciprian.popescu0411:ionut.nicolae2009:block_diagram.png |}} | ||
| + | Pentru acest proiect, jocul are 4 multimi a cate 7 elemente fiecare. Voi utiliza 4 butoane, unul pentru fiecare heap, si un buton care sa marcheze confirmarea actiunii si trecerea la jucatorul urmator. Fiind doar un joc pe display, nu sunt necesare multe module pentru a asigura buna functionare a acestuia, importanta consta in inregistrarea inputului jucatorului si afisarea pe ecran a actiunii. | ||
| - | <note tip> | + | ===== Hardware Design ===== |
| - | O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează. | + | {{ :pm:prj2026:ciprian.popescu0411:ionut.nicolae2009:schema_electrica2.png |}} |
| + | **Lista componente** | ||
| + | * Microcontroller ATMega328P Mini Xplained | ||
| + | * 4 + 1 butoane pentru input | ||
| + | * Display LCD 1.8 TFT ST7735S cu SPI | ||
| + | * cablu USB pentru alimentare 5V | ||
| + | * breadboard | ||
| + | * level shifter bidirectional 3V3 <-> 5V | ||
| - | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | ||
| - | </note> | ||
| - | ===== Hardware Design ===== | ||
| - | |||
| - | <note tip> | ||
| - | Aici puneţi tot ce ţine de hardware design: | ||
| - | * listă de piese | ||
| - | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | ||
| - | * diagrame de semnal | ||
| - | * rezultatele simulării | ||
| - | </note> | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| + | Proiectul va fi dezvoltat cu ajutorul **PlatformIO** care este integrat in MS Visual Studio Code, folosind avr-gcc.\\ | ||
| + | Modulele software ale proiectului sunt: | ||
| + | * Modulul pentru timere: utilizat in principal pentru debouncing-ul butoanelor | ||
| + | * Modulul pentru logica jocului: va avea logica botului si tratarea inputului jucatorului. De asemenea, verifica regulile jocului la fiecare mutare | ||
| + | * Modulul SPI: esential, permite comunicarea cu display-ul. Este modulul principal al proiectului | ||
| + | * Modulul pentru intreruperi: utilizat pentru setarea flag-urilor | ||
| + | Functionalitati principale pentru logica jocului: | ||
| + | * void reset_game() | ||
| + | * void machine_move() | ||
| + | * void player_move() | ||
| + | * void print_game() | ||
| - | <note tip> | + | Functionalitati principale pentru LCD: |
| - | Descrierea codului aplicaţiei (firmware): | + | * void lcd_init() |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * void lcd_clear() |
| - | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | * void lcd_put_pixel() |
| - | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | * void lcd_fill_rect() |
| - | * (etapa 3) surse şi funcţii implementate | + | |
| - | </note> | + | |
| + | In loop-ul principal, pentru jucator se verifica daca unul dintre flag-urile pentru input au fost setate. Daca da, atunci se verifica daca este apasat un buton valid, iar apoi se asteapta apasarea butonului pentru confirmarea actiunii. Pentru bot, un simplu apel de functie este de ajuns pentru modificarea datelor interne ale jocului. | ||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
| Line 58: | Line 66: | ||
| ===== Jurnal ===== | ===== Jurnal ===== | ||
| * 5/4/2026 Initializarea paginii proiectului, completare "Introducere" si "Descriere generela" | * 5/4/2026 Initializarea paginii proiectului, completare "Introducere" si "Descriere generela" | ||
| + | * 5/6/2026 Adaugare diagrame block si schita electrica | ||
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
| - | <note> | + | **Resurse Hardware**\\ |
| - | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | Pentru realizarea diagramei am utilizat EasyEDA. Lista footprinturi piese: |
| - | </note> | + | * Microcontroller - TQFP-32_L7.0-W7.0-P0.80-LS9.0-BL |
| + | * Butoane - SW-SMD_4P-L6.0-W6.0-P4.50-LS9.2 | ||
| + | * Level shifter - MPN-TH-20_L28.0-W14.0-P2.54-BL | ||
| + | * LCD - LCD-TH_8P-P2.54-L56.0-W34.0_1.8-TFT | ||
| + | |||
| + | **Resurse software**\\ | ||
| + | Pentru realizarea diagramei bloc am utilizat PlantUML. | ||
| <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> | ||