Differences

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

Link to this comparison view

pm:prj2026:victor.stoica0203:stefan.dumitrache [2026/05/23 12:17]
stefan.dumitrache [Software Design]
pm:prj2026:victor.stoica0203:stefan.dumitrache [2026/05/24 13:00] (current)
stefan.dumitrache [Schema electrica]
Line 37: Line 37:
 Majoritatea componentelor,​ in afara display-ului LCD grafic, sunt incluse intr-un kit Arduino basic. Majoritatea componentelor,​ in afara display-ului LCD grafic, sunt incluse intr-un kit Arduino basic.
  
-===== Schema electrica ​provizorie ​=====+===== Schema electrica =====
  
-Schema electrica ​finala va fi realizata ​dupa testarea componentelor ​pe breadboard. ​Pentru momentconexiunile propuse ​sunt urmatoarele:+Schema electrica ​a proiectului este realizata pe breadboard, folosind placa Arduino Uno R3 ca unitate principala de controlDisplay-ul LCD ST7920 este conectat in mod serialbutoanele ​sunt conectate la pini digitali folosind rezistentele interne de pull-up ale microcontrollerului,​ iar LED-ul RGB si buzzer-ul sunt folosite pentru feedback vizual si sonor. 
 + 
 +{{:pm:​prj2026:​victor.stoica0203:​schema_electrica_invaderzim.png?​200|}} 
 +==== Conectare alimentare ==== 
 + 
 +^ Componenta ^ Conectare ^ 
 +| Arduino 5V | Linia + de pe breadboard | 
 +| Arduino GND | Linia - de pe breadboard |
  
 ==== Conectare LCD 12864 ST7920 ==== ==== Conectare LCD 12864 ST7920 ====
  
-^ Pin LCD ST7920 ^ Pin Arduino ​Uno +^ Pin LCD ST7920 ^ Pin Arduino ​/ Breadboard ​
-VSS / GND | GND | +| GND / VSS | GND | 
-VDD / VCC | 5V |+| VCC / VDD | 5V |
 | VO / V0 | Pin mijloc potentiometru 10K | | VO / V0 | Pin mijloc potentiometru 10K |
 | RS / CS | D10 | | RS / CS | D10 |
-RW / SID | D11 |+R/W / SID | D11 |
 | E / SCLK | D13 | | E / SCLK | D13 |
 | PSB | GND | | PSB | GND |
 | RST | D8 | | RST | D8 |
 +| VOUT | Pin lateral potentiometru 10K |
 | BLA / LED+ | 5V | | BLA / LED+ | 5V |
 | BLK / LED- | GND prin rezistenta 220 Ohm | | BLK / LED- | GND prin rezistenta 220 Ohm |
 +
 +Pinii DB0-DB7 nu sunt folositi, deoarece display-ul este conectat in mod serial.
 +
 +==== Conectare potentiometru pentru contrast ====
 +
 +^ Pin potentiometru ^ Conectare ^
 +| Pin lateral 1 | LCD VOUT |
 +| Pin lateral 2 | GND |
 +| Pin mijloc | LCD VO / V0 |
 +
 +==== Conectare butoane ====
 +
 +Butoanele sunt configurate in cod folosind rezistentele interne de pull-up. Fiecare buton este conectat intre pinul digital al placii Arduino si GND.
 +
 +^ Buton ^ Pin Arduino ^ Cealalta parte ^
 +| Sus | D2 | GND |
 +| Jos | D3 | GND |
 +| Stanga | D4 | GND |
 +| Dreapta | D5 | GND |
 +
 +==== Conectare buzzer pasiv ====
 +
 +^ Pin buzzer ^ Conectare ^
 +| + | D6 |
 +| - | GND |
 +
 +==== Conectare LED RGB ====
 +
 +LED-ul RGB folosit este de tip catod comun. Fiecare culoare este conectata printr-o rezistenta de limitare a curentului.
 +
 +^ Pin LED RGB ^ Conectare ^
 +| Rosu | D7 prin rezistenta 220/330 Ohm |
 +| Verde | D9 prin rezistenta 220/330 Ohm |
 +| Albastru | D12 prin rezistenta 220/330 Ohm |
 +| Catod comun | GND |
 +
 +==== Observatii ====
 +
 +  * Display-ul LCD ST7920 foloseste pinii D10, D11 si D13 pentru comunicatia seriala.
 +  * Pinul PSB al display-ului este conectat la GND pentru selectarea modului serial.
 +  * Luminozitatea backlight-ului este redusa prin conectarea pinului BLK la GND printr-o rezistenta de 220 Ohm.
 +  * Butoanele folosesc rezistentele interne de pull-up, deci nu sunt necesare rezistente externe pentru acestea.
  
 ==== Conectare potentiometru pentru contrast ==== ==== Conectare potentiometru pentru contrast ====
Line 88: Line 138:
 ===== Software Design ===== ===== Software Design =====
  
-Proiectul este implementat in Arduino IDE, dar pentru partea de control hardware ​sunt folositi registrii microcontrollerului ATmega328P. Biblioteca standard Arduino este folosita doar pentru functii auxiliare, iar controlul principal al pinilor, UART-ului, timerului si interfetei ​SPI este realizat prin acces direct la registri.+Proiectul este implementat in Arduino IDE. Pentru controlul componentelor simple ​sunt folositi registrii microcontrollerului ATmega328P, iar pentru display-ul LCD ST7920 este folosita biblioteca U8g2 in mod software ​SPI.
  
-Codul implementeaza logica ​jocului ​2048 folosind o matrice 4x4. Dupa fiecare mutare ​valida, placutele sunt deplasate si combinate ​conform regulilor jocului, scorul este actualizat ​si se adauga o noua placuta cu valoarea 2 sau 4. Jocul se termina atunci cand nu mai exista mutari ​posibile ​sau cand este obtinuta ​valoarea 2048.+Logica ​jocului ​este implementata ​folosind o matrice 4x4. La fiecare mutare, linia sau coloana afectata este comprimata, placutele ​egale sunt combinate, scorul este actualizat, iar apoi se adauga o noua placuta cu valoarea 2 sau 4. Jocul verifica permanent daca exista mutari ​valide ​sau daca s-a ajuns la valoarea 2048.
  
 +Pentru debugging este folosita comunicatia UART, initializata prin registri. Pentru buzzer-ul pasiv este folosit Timer2 in mod CTC, iar LED-ul RGB si butoanele sunt controlate prin acces direct la registrii GPIO.
 ==== Laboratoare acoperite ==== ==== Laboratoare acoperite ====
  
Line 113: Line 164:
 ==== Functii implementate ==== ==== Functii implementate ====
  
-  * setup() - initializeaza GPIOUARTTimer2SPILCD-ul si tabla de joc +  * gpioInitRegisters() - configureaza pinii folositi pentru butoaneLED RGB si buzzer folosind registrii DDRDDDRBPORTD si PORTB. 
-  * loop() - citeste butoanele si proceseaza mutarile +  * buttonUpPressed() - verifica daca butonul pentru mutarea in sus este apasatcitind registrul PIND. 
-  * gpioInitRegisters() - configureaza pinii folosind registrii ​DDRD, DDRB, PORTD si PORTB +  * buttonDownPressed() ​verifica daca butonul pentru mutarea in jos este apasat, citind registrul PIND. 
-  * uartInitRegisters() - initializeaza UART-ul folosind registrii ​specifici ATmega328P +  * buttonLeftPressed() - verifica daca butonul pentru mutarea la stanga este apasat, citind registrul PIND. 
-  * timer2InitForBuzzer() - configureaza Timer2 pentru generarea sunetului pe buzzer +  * buttonRightPressed() - verifica daca butonul pentru mutarea la dreapta este apasat, citind registrul PIND. 
-  * spiInitRegisters() - initializeaza SPI hardware ​pentru ​comunicatia cu LCD-ul +  * setLedRegisters() - controleaza LED-ul RGB folosind registrii PORTD si PORTB. 
-  * lcdInitRegisters() - initializeaza display-ul ST7920 +  * uartInitRegisters() - initializeaza ​comunicatia ​UART pentru debugging, ​folosind registrii ​UBRR0H, UBRR0L, UCSR0B si UCSR0C. 
-  * addRandomTile() - adauga o placuta noua cu valoarea 2 sau 4 +  * uartSendChar() - trimite un caracter prin UART folosind registrul UDR0. 
-  * drawGame() - deseneaza ​tabla de joc, scorul si mesajele pe LCD +  * uartPrint() - trimite un sir de caractere prin UART. 
-  * moveLeft()moveRight()moveUp()moveDown() - implementeaza logica mutarilor +  * uartPrintln() - trimite un sir de caractere prin UART, urmat de linie noua. 
-  * isGameOver() - verifica daca mai exista mutari ​posibile +  * uartPrintNumber() - trimite o valoare numerica prin UART. 
-  * beepRegisters() - genereaza sunet folosind Timer2 +  * timer2InitForBuzzer() - configureaza Timer2 ​in mod CTC pentru generarea sunetului pe buzzer. 
-  * setLedRegisters() - controleaza LED-ul RGB prin registri+  * ISR(TIMER2_COMPA_vect) - rutina de intrerupere asociata Timer2, folosita ​pentru ​comutarea pinului buzzer-ului. 
 +  * beepRegisters() - porneste buzzer-ul pentru un interval de timp dat, folosind Timer2. 
 +  * clearGrid() - goleste tabla de joc. 
 +  * addRandomTile() - adauga o placuta noua cu valoarea 2 sau 4 intr-o pozitie libera. 
 +  * initGame() - initializeaza un joc nou, reseteaza scorul si adauga primele doua placute. 
 +  * drawGame() - afiseaza ​tabla de joc, scorul si mesajele ​de stare pe LCD
 +  * compressLine() - elimina spatiile libere dintre placute pe o linie. 
 +  * mergeLine() - combina doua placute vecine cu aceeasi valoare si actualizeaza scorul. 
 +  * moveLeft() ​- realizeaza mutarea tuturor placutelor spre stanga. 
 +  * moveRight() ​- realizeaza mutarea tuturor placutelor spre dreapta. 
 +  * moveUp() ​- realizeaza mutarea tuturor placutelor in sus. 
 +  * moveDown() - realizeaza mutarea tuturor placutelor in jos. 
 +  * isGameOver() - verifica daca mai exista mutari ​valide disponibile. 
 +  * processMove() - proceseaza rezultatul unei mutari, adauga placuta noua, actualizeaza LED-ul, buzzer-ul si verifica finalul jocului. 
 +  * setup() - initializeaza componentele hardware, UART-ul, Timer2, LCD-ul si jocul. 
 +  * loop() - citeste butoanele si executa mutarile jocului.
 ===== Jurnal ===== ===== Jurnal =====
  
-  * 8 mai - completare descriere, schema bloc si lista de componente +  * 8 mai - completare ​pagina OCW: scurta ​descriere, schema bloc si lista de componente 
-  * urmeaza ​realizarea schemei electrice finale +  * 11 mai realizare montaj hardware pe breadboard si testare componente 
-  * urmeaza ​implementarea logicii jocului ​si testarea componentelor+  * 11 mai testare LCD ST7920, butoane directionale,​ LED RGB si buzzer pasiv 
 +  * 18 mai - implementare software pentru jocul 2048 
pm/prj2026/victor.stoica0203/stefan.dumitrache.1779527873.txt.gz · Last modified: 2026/05/23 12:17 by stefan.dumitrache
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