This shows you the differences between two versions of the page.
pm:prj2024:mdinica:andrei.boieriu [2024/05/18 18:55] andrei.boieriu [Hardware Design] |
pm:prj2024:mdinica:andrei.boieriu [2024/05/27 20:50] (current) andrei.boieriu [Rezultate Obţinute] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Gameboy ====== | + | ====== Minichess ====== |
===== Introducere ===== | ===== Introducere ===== | ||
- | Proiectul își propune realizarea unei console de jocuri asemănatoare unui Gameboy. | + | Proiectul își propune realizarea unei variante simplificate a unui joc de sah, minichess 4x5. |
===== Descriere generală ===== | ===== Descriere generală ===== | ||
Line 8: | Line 8: | ||
<note tip> | <note tip> | ||
- | * Jocurile vor fi afișate pe display-ul OLED, care va comunica cu microcontroller-ul prin protocolul I2C. | + | * Jocul va fi afișat pe display-ul OLED, care va comunica cu microcontroller-ul prin protocolul I2C. |
* Jucătorul se va putea juca prin intermediul butoanelor | * Jucătorul se va putea juca prin intermediul butoanelor | ||
* Butoanele vor fi conectate la un singur pin, și multiplexate folosind convertorul analog-digital și rezistențe | * Butoanele vor fi conectate la un singur pin, și multiplexate folosind convertorul analog-digital și rezistențe | ||
Line 25: | Line 25: | ||
* Condensatori | * Condensatori | ||
</note> | </note> | ||
+ | |||
+ | **Schema electrică:** | ||
{{ :pm:prj2024:mdinica:schematic_new-project_2024-05-18.png?nolink&600 |}} | {{ :pm:prj2024:mdinica:schematic_new-project_2024-05-18.png?nolink&600 |}} | ||
- | {{ :pm:prj2024:mdinica:whatsapp_image_2024-05-18_at_18.49.43.jpeg?nolink&600 |}} | + | |
+ | **Implementare fizică:** | ||
+ | {{ :pm:prj2024:mdinica:implementare_fizica.jpeg?nolink&600 |}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | ** Link Github: ** \\ | ||
+ | https://github.com/andreiboieriu/Minichess | ||
- | <note tip> | + | ** Mediu de dezvoltare: ** \\ |
- | Descrierea codului aplicaţiei (firmware): | + | Visual Studio Code + avr-g++ / avrdude pentru compilare / uploadare cod pe microcontroller |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | |
- | ===== Rezultate Obţinute ===== | + | ** Biblioteci și surse 3rd party: ** \\ |
+ | - https://github.com/monoclecat/avr-millis-function pentru funcția millis() \\ | ||
+ | - laboratoarele de UART, ADC si I2C \\ | ||
+ | ** Descrierea implementării: ** \\ | ||
+ | Codul a fost scris în C++, folosind următoarele clase pentru componentele importante: \\ | ||
+ | * Uart | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | * Folosit pentru debugging |
+ | * Conține funcții pentru trimiterea prin uart a unui caracter/șir de caractere și a unui număr de tip uint8_t/uint16_t | ||
+ | </note> | ||
+ | * Twi | ||
+ | <note tip> | ||
+ | * Folosit pentru comunicarea cu display-ul | ||
+ | * Conține funcții pentru pornirea comunicării i2c, scrierea unui octet și oprirea comunicării. | ||
+ | * De asemenea conține și o funcție pentru găsirea adreselor modulelor i2c conectate, folosită pentru găsirea adresei display-ului | ||
+ | </note> | ||
+ | * Adc | ||
+ | <note tip> | ||
+ | * Folosit pentru citirea apăsării butoanelor | ||
+ | * Conține o funcție pentru citirea valorii de pe un pin | ||
+ | </note> | ||
+ | * Display | ||
+ | <note tip> | ||
+ | * Conține o reprezentare internă pe biți a display-ului, folosind un array de 1024 de octeți (128 * 64 / 8) | ||
+ | * Expune funcții pentru afișare, golirea ecranului, desenarea unui pixel și schimbarea unui octet din buffer-ul intern | ||
+ | * Pentru inițializare, se trimit prin I2C valori conform datasheetului pentru configurarea și aprinderea display-ului | ||
+ | * Pentru afișare se trimit prin I2C pe rând la adresa 0x40 toți cei 1024 de octeți din buffer-ul intern | ||
+ | </note> | ||
+ | * ButtonManager | ||
+ | <note tip> | ||
+ | * Conține o funcție care returnează butonul apăsat | ||
+ | </note> | ||
+ | * TextRenderer | ||
+ | <note tip> | ||
+ | * Conține funcții pentru afișarea pe display a unui caracter/șir de caractere | ||
+ | * Caracterele sunt de 8x8 pixeli | ||
+ | </note> | ||
+ | * Minichess | ||
+ | <note tip> | ||
+ | * Jocul în sine, conține funcția run(), care pornește loop-ul principal | ||
+ | </note> | ||
+ | * ChessBoard | ||
+ | <note tip> | ||
+ | * Conține reprezentarea internă a tablei de șah și expune funcții pentru interacțiunea cu aceasta | ||
</note> | </note> | ||
+ | Jocul este structurat sub forma unui state machine, cu următoarele stări: | ||
+ | * MAIN_MENU | ||
+ | * SELECTING_PIECE | ||
+ | * SELECTING_MOVE | ||
+ | * END_SCREEN | ||
+ | |||
+ | Din meniul principal la apăsarea butonului de start, se va începe jocul, trecând în starea SELECTING_PIECE. Jucătorul selectează apoi o piesă folosind cele 4 butoane din stânga ecranului pentru a naviga prin ele și butonul | ||
+ | de start pentru a efectua selecția, trecând în starea SELECTING_MOVE. În această stare jucătorul poate naviga prin mutările posibile și selecta o mutare, sau se poate întoarce în starea anterioara, pentru a selecta altă piesă. După efectuarea unei mutări, jocul trece în starea SELECTING_PIECE, de data aceasta pentru celălalt jucător. Când se ajunge la un șah mat sau o egalitate, jocul trece în starea END_SCREEN, unde este afișat rezultatul jocului. | ||
+ | ===== Rezultate Obţinute ===== | ||
+ | |||
+ | Youtube: https://www.youtube.com/watch?v=fld-aEfBZQY | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
Line 55: | Line 108: | ||
</note> | </note> | ||
- | ===== Jurnal ===== | ||
- | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | ||
- | </note> | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
<note> | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * https://docs.arduino.cc/retired/hacking/hardware/building-an-arduino-on-a-breadboard/ \\ |
+ | * https://berryarray.itch.io/chess-pieces-16x16-one-bit pentru design-ul pieselor de șah \\ | ||
+ | * https://github.com/damianvila/font-bescii pentru font \\ | ||
</note> | </note> | ||
<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> |