This shows you the differences between two versions of the page.
|
pm:prj2026:bianca.popa1106:eugen.munteanu2604 [2026/05/23 20:00] eugen.munteanu2604 |
pm:prj2026:bianca.popa1106:eugen.munteanu2604 [2026/05/23 21:20] (current) eugen.munteanu2604 |
||
|---|---|---|---|
| Line 91: | Line 91: | ||
| * Protocolul I2C - utilizat pentru modulul RTC deoarece foloseste doar doua fire pentru un volum mic de date, | * Protocolul I2C - utilizat pentru modulul RTC deoarece foloseste doar doua fire pentru un volum mic de date, | ||
| * Timere + PWM - genereaza frecventele audio pentru buzzer, folosind note predefinite | * Timere + PWM - genereaza frecventele audio pentru buzzer, folosind note predefinite | ||
| + | |||
| === Mediu de dezvoltare, biblioteci, implementare === | === Mediu de dezvoltare, biblioteci, implementare === | ||
| Line 103: | Line 104: | ||
| * ''Rtc_Pcf8563.h'' - interactiunea cu modulul RTC folosit, PCF8563 | * ''Rtc_Pcf8563.h'' - interactiunea cu modulul RTC folosit, PCF8563 | ||
| - | Firmware-ul proiectului SnakeC este structurat sub forma unui sistem organizat in jurul unui //Automat cu stari finite// (switch-case). Acesta izoleaza executia meniurilor interactive, a ecranului de final si a jocului propriu-zis. In timpul starii active, codul implementeaza un timing bazat pe functia ''millis()'', eliminand intarzierile si permite procesarea asincrona a input-ului analogic de la joystick si monitorizarea expirarii boosterelor. | + | === === |
| + | |||
| + | Firmware-ul proiectului SnakeC este structurat sub forma unui sistem organizat in jurul unui //Automat cu stari finite// (switch-case). Acesta izoleaza executia meniurilor interactive, a ecranului de final si a jocului propriu-zis. In timpul starii active, codul implementeaza un timing bazat pe functia ''millis()'', eliminand intarzierile si permitand procesarea asincrona a input-ului analogic de la joystick si monitorizarea expirarii boosterelor. Validarea functionala a componentelor a fost realizata incremental (unit testing hardware), prin **multe** teste de hardware-check, urmarire de //Serial Monitor// si analiza datasheet-urilor. | ||
| + | |||
| + | === Calibrarea elementelor de senzoristica === | ||
| + | |||
| + | Calibrarea senzoristica a fost aplicata pentru joystick-ul analogic conectat la pinii ADC (A0 si A1). Convertorul intern al microcontroller-ului returneaza valori intr-o plaja de la 0 la 1023 (in practica cam intre 30 si 1000), unde centrul teoretic ideal ar trebui sa fie in jurul valorii de 512. In practica, din cauza imperfectiunilor mecanice, a uzurii si a zgomotului electric de pe fire, valorile de repaus fluctueaza. Am ales ca un threshold valoarea 120 pentru a evita input-uri accidentale si miscari nedorite ale sarpelui. | ||
| + | |||
| + | === Optimizari === | ||
| Ca **optimizari**: Miscarea sarpelui foloseste un algoritm de tip coada FIFO, unde fiecare segment copiaza coordonatele celui din fata sa. Performanta grafica pe magistrala SPI este optimizata prin randare incrementala, stergand doar vechea coada si desenand noul cap. | Ca **optimizari**: Miscarea sarpelui foloseste un algoritm de tip coada FIFO, unde fiecare segment copiaza coordonatele celui din fata sa. Performanta grafica pe magistrala SPI este optimizata prin randare incrementala, stergand doar vechea coada si desenand noul cap. | ||
| - | Legat de **memorie**, am eliminat operatiile folosite initial ''strcmp()'' si ''strcpy()'', am folosit ''uint8_t'' unde s-a putut, iar string-urile de text au fost puse in wrapper-ul ''F()'' pentru mai multa memorie SRAM disponibila. | + | Legat de **memorie**, am eliminat operatiile folosite initial ''strcmp()'' si ''strcpy()'', am folosit ''uint8_t'' unde s-a putut optimiza, iar string-urile de text au fost puse in wrapper-ul ''F()'' pentru mai multa memorie SRAM disponibila. |
| ===== Rezultate, concluzii, download ===== | ===== Rezultate, concluzii, download ===== | ||
| Line 112: | Line 121: | ||
| In urma finalizarii proiectului SnakeC, s-a obtinut un sistem embedded compact, stabil si functional, capabil sa gestioneze logica unui joc in timp real. Se demonstreaza deci ca implementarea unei aplicatii interactive cu cerinte grafice si de timp real este pe deplin realizabila pe o arhitectura hardware minimalista. | In urma finalizarii proiectului SnakeC, s-a obtinut un sistem embedded compact, stabil si functional, capabil sa gestioneze logica unui joc in timp real. Se demonstreaza deci ca implementarea unei aplicatii interactive cu cerinte grafice si de timp real este pe deplin realizabila pe o arhitectura hardware minimalista. | ||
| - | Bineinteles, codul poate fi dezvoltat si/sau optimizat, de pilda prin evitarea folosirii ''delay()'' sau printr-o reorganizare fizica a proiectului (cabluri, carcasa). Cautarea si gasirea unei teme nu au fost cele mai usoare experiente, dar prin acest proiect am invatat (o parte din) ce sta in spatele unui sistem simplu embedded si cum functioneaza protocoalele de comunicatii. | + | Bineinteles, codul poate fi dezvoltat si/sau optimizat hardware ori software, de pilda prin implementarea intreruperilor hardware sau timerelor dedicate (e.g. //timer interrupt// la ~150ms), sau printr-o reorganizare fizica a proiectului (cabluri, carcasa). Cautarea si gasirea unei teme nu au fost cele mai usoare experiente, dar prin acest proiect am invatat ce sta in spatele unui sistem simplu embedded si cum functioneaza protocoalele de comunicatii. |
| - | | **[[https://drive.google.com/file/d/1pNq9Hoc_de_IskDdJlN7-8IuA_0LVo-E/view?usp=sharing | Prezentare Video Proiect]]** | | + | | **[[https://drive.google.com/file/d/1VmP7aFrW3ddQStOhkZPjp0pJmqlmSku8/view?usp=sharing | Prezentare Video Proiect]]** | |
| | **[[https://github.com/EugenM03/PM-Project | Cod Sursa GitHub ]]** | | | **[[https://github.com/EugenM03/PM-Project | Cod Sursa GitHub ]]** | | ||
| Line 122: | Line 131: | ||
| 2026-05-08 - Pagina OCW creata \\ | 2026-05-08 - Pagina OCW creata \\ | ||
| - | 2026-05-08 - Introducere + Hardware Design \\ | + | 2026-05-08 - //Introducere// + //Hardware Design// \\ |
| - | 2026-05-09 - Actualizare Introducere + Hardware Design \\ | + | 2026-05-09 - Actualizare //Introducere// + //Hardware Design// \\ |
| - | 2026-05-09 - Adaugare Descriere generală, schema-bloc, link-uri datasheet \\ | + | 2026-05-09 - Adaugare //Descriere generală//, schema-bloc, link-uri datasheet \\ |
| - | 2026-05-11 - Completare hardware design, adaugarea conexiunilor si asocierilor de pini \\ | + | 2026-05-11 - Completare //Hardware Design//, adaugarea conexiunilor si asocierilor de pini \\ |
| 2026-05-18 - Actualizarea codului sursa, testare si debugging \\ | 2026-05-18 - Actualizarea codului sursa, testare si debugging \\ | ||
| - | 2026-05-19 - Adaugare Software Design partial: mediu de dezvoltare, biblioteci, functionalitati, implementare \\ | + | 2026-05-19 - Adaugare //Software Design// partial: mediu de dezvoltare, biblioteci, functionalitati, implementare \\ |
| - | 2026-05-23 - Adaugare video + link Github | + | 2026-05-23 - Adaugare video + link Github \\ |
| + | 2026-05-23 - Completare //Software Design// si concluzii ale proiectului | ||
| </note> | </note> | ||