This is an old revision of the document!
Minichess
Introducere
Proiectul își propune realizarea unei variante simplificate a unui joc de sah, minichess 4×5.
Descriere generală
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
Butoanele vor fi conectate la un singur pin, și multiplexate folosind convertorul analog-digital și rezistențe
Modulul FT232RL va fi folosit pentru programarea microcontroller-ului
Hardware Design
Listă de piese:
Microcontroller ATmega328p
Display OLED 0.96” 128x64px
Modul Convertor USB Serial FT232RL
Oscilator cu Quartz 16Mhz
Butoane
Rezistențe
Condensatori
Schema electrică:
Implementare fizică:
Software Design
Descrierea codului aplicaţiei (firmware):
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
Mediu de dezvoltare:
Visual Studio Code + avr-g++ / avrdude pentru compilare / uploadare cod pe microcontroller
Biblioteci și surse 3rd party:
- https://github.com/monoclecat/avr-millis-function pentru funcția millis()
- laboratoarele de UART, ADC si I2C
Descrierea codului:
Codul a fost scris în C++, folosind următoarele clase pentru componentele importante:
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
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
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 (primul buton din dreapta display-ului), 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. De aici jucătorul poate alege să mai joace o data.
Rezultate Obţinute
Care au fost rezultatele obţinute în urma realizării proiectului vostru.
Concluzii
Download
O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună

.
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.
Bibliografie/Resurse