Introducere

Proiectul este un joc de X si 0, implementat cu ajutorul microcontroller-ului ATmega16. Jocul in sine este reprezentat de o matrice de 3*3 leduri si de un touchpad simplu pentru a prelua miscarile utilizatorului. Touchpadul este alcatuit din 6 fire, cu 9 posibile intersectari. Fiecare dintre acestea aprinde ledul corespunzator din matricea de afisare. Se diferentiaza un jucator de altul prin culoarea ledului aprins(fie rosu, fie verde). Regulile jocului sunt cele clasice(vezi http://en.wikipedia.org/wiki/Tic_tac_toe).

Proiectul este adresat tuturor fanilor jocului de X si O si este o alternativa placuta la simpla foaie de hartie.

Descriere generală

Implementarea jocului de X si O presupune 3 module principale:

  • Modul Afisare
  • Modul ATmega16
  • Modul Comanda

Schema bloc:

Modulul Afisare reprezinta o matrice de 3*3 leduri. Toate miscarile vor fi vizibile prin aprinderea ledului corepunzator. Se folosesc leduri bicolore(rosu si verde), pentru a se diferentia jucatorii.
Modulul ATmega16 este placuta realizata la etapa I a proiectului. Nu s-au mai adaugat alte componente.
Modulul Comanda este format din touchpad. Prin apropierea firelor se inchide un circuit, miscarea fiind acceptata sau nu. Nu se accepta o miscare cand se incearca schimbarea culorii unui led.

Hardware Design

Se folosesc urmatoarele piese:

  • 9 led-uri bipolare, cu catod comun;
  • 9 butoane;
  • 9 rezistente(3 de 1 kohmi si 6 de 511 kohmi);
  • placuta pe care sunt lipite ledurile;
  • mai multe fire pentru touchpad

Schema matrice leduri(stanga) si schema touchpad(dreapta) :

Pinii folositi sunt in numar de 15. Sunt 6 pini penru touchpad si 9 pentru matricea de afisare. Se folosesc pinii de la portul A, B si C. Acestia sunt specificati in schemele electrice.

Software Design

Programul urmareste sa implementeze un joc de X si O, in care mutarile adversarului sunt realizate de microcontroller.
Mediul de dezvolatare este AVRStudio 4.0.
Pentru desenarea schemei electrice s-a folosit Eagle 5.7.0.
Pentru a genera mutarile, microcontroller-ul foloseste algoritmul minimax, mai exact varianta Negamax.
Efectiv in functia main(), se preia mutarea utilizatorului si apoi se calculeaza mutarea microcontroller-ului. Dupa fiecare mutare, se verifica daca a castigat cineva sau daca este remiza(adica toate cele doua casute sunt completate).
Alte functii sunt pentru a aprinde becurile si pentru a prelua mutarea de la touchpad.
Pentru a determina care casuta este selectata, se foloseste urmatorul algoritm:

  • Se seteaza pinii coloanelor pe output low.
  • Pinii linilor sunt setati pe input cu rezistentele pull-up activate. Pinii de intrare ar trebui sa fie 1.
  • Intersectarea unei linii cu o coloana face ca valoarea citita sa fie 0 (exact ca in cazul apasarii unui buton).
  • Se repeta pasii anteriori pentru citirea coloanei si nu a liniei.

Aprinderea becurilor se face prin setarea pinului de linie pe output high si a pinului de coloana pe output low(ground). Se poate observa acest lucru in schema urmatoare:

Pentru a se aprinde mai multe becuri in acelasi timp, se selecteaza liniile separat, dar la un interval de timp atat de mic, incat toate becurile par aprinse.

}

Rezultate Obţinute

In urma testelor, proiectul este functional. Utilizatorul este cel care incepe jocul. Acesta se poate termina victorie, infrangere sau remiza.

Proiectul final(O a castigat):
ideam.jpg
Matricea de leduri:
ideam1.jpg
Placuta cu extensii:
ideam3.jpg

Concluzii

Jocul de X si O ramane interesant.

Bibliografie/Resurse

pm/prj2010/rtataroiu/cprica.txt · Last modified: 2021/04/14 17:07 (external edit)
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