Introducere

Scopul acestui proiect a fost realizarea unui joc de tetris folosind un display de nokia 3410 (Initial era 3310, insa negasind acest model am folosit 3410. Compatibilitatea din punctul de vedere a pinilor este perfecta, singura diferenta constituind-o rezolutia: 84×48 – 3310 si 96×65- 3410). Initial am vrut sa implementez jocul clasic de tetris, insa datrita constangerilor de memorie (16K pentru Atmega16) a trebuit sa simplific algoritmul.

Jocul clasic de Tetris

Tetris face parte din categoria jocurilor puzzle. Scopul jocului este aranjarea unor piese („tetrominoes”) – fiecare alcatuita din 4 patrate- astfel incat sa se obtina cat mai multe randuri fara spatii. Piesele pot fi mutate stanga-dreapta sau rotite, iar in momentul in care se formeaza o linie orizontala fara spatii acesata dispare, jucatorul avand astfel mai mult spatiu de a crea alte linii si de a acumula astfel mai multe puncte.

Jocul meu de tetris

Asa cum am mentionat anterior, datorita constangerilor de memorie am simplificat algoritmul jocului clasic de tetris. Astfel, scopul variantei mele de tetris este acela de a pune cat mai multe piese pe tabla ( nu se mai elimina liniile complete, ci piesele raman pe tabla pana la sfarsitul jocului). Scorul jucatorului va fi dat chiar de numarul de piese pe care reuseste sa le puna pe tabla. Nu pot afirma ca proiectul are o utilitate foarte mare, ci, la fel ca orice joc, poate fi folosit ca mijloc de relaxare.

Descriere generală

Schema bloc hardware

Din punct de vedere hardware, exista 3 componente:

  • Placuta pe care se afla Atmega16
  • Pacuta care conecteaza Atmega16 cu LCD-ul si butoanele
  • LCD-ul Nokia3310

Exista 3 butoane prin care se interactioneaza cu Atmega16 (si implicit cu LCD-ul). Pe placuta fizic sunt 5, insa numai 3 sunt conectate la microcontroller: stanga, dreapta si sus(folosit ca buton-centru). Prin intermediul acestora se interactioneaza cu „meniul” jocului si, bineinteles, se controleaza piesele de pe tabla. Acestea pot fi mutate in stanga, in dreapta sau rotite. Microcontrollerul va prelua informatiile primite de la butoane si conform acestora va trimite comenzi LCD-ului.

Schema bloc a modulelor software

Pentru partea de software am folosit ca punct de start proiectul de pe http://www.quantumtorque.com/content/view/32/37/. Acesta are implementate o serie de functii de interfatare cu lcd-ul foarte utile, cum ar fi afisarea caraterelor, a string-urilor sau pozitionarea pe ecran intr-un anumit punct (nu chiar orice pixel). A trebuit sa modific fisierul lcd.h pentru a asocia corespunzator pinii LCD-ului cu cei ai microcontrollerului (mai multe detalii in sectiunea de hardware design), am renuntat de asemenea la cateva functii deja implementate (datorita memeoriei destul de limitate de pe Atmega16) si, bineinteles, mi-am adugat propriile functii –descrise in sectiunea de software design.

Hardware Design

Lista de piese

  • Placa de baza cu Atmega16
  • LCD Nokia3310
  • 5 rezistente 3K3
  • 5 rezistente 1K8
  • Butoane
  • 2 diode 1N4007
  • Condensator 10uF 63V
  • Cablu UTP
  • Barete pini mama si tata

Scheme electrice

Conectare LCD-Atmega16

Pentru alimentarea LCD-ului este necesara o tensiune de 3.3 V. Cum microcontrollerul scoate 5V, aceasta tensiune a trebuit limitata. Pentru aceasta am folosit 2 diode 1N4007 , tensiunea obtinuta fiind de 5V-0.7V-0.7V=3.6V (desi mai mare de 3.3V, nu au fost probleme).

Legarea la porturile microcontrollerului se face prin divizori de tensiune, realizati cu ajutorul unor rezistente de 3k3(legate la masa) si 1k8(legate la portul B).

Cele 3 butoane sunt si ele conectate tot la portul B al microcontrollerului.

Simulare in Proteus ISIS

Intrucat pentru simulare am folosit un LCD de Nokia3310, afisarea pe ecranul fizic (3410) a fost putin diferita. Pe el am putut afisa si scorul si chenarul de joc.

Software Design

Asa cum am mentionat mai sus, scheletul aplicatiei software este cel al proiectului de pe http://www.quantumtorque.com/content/view/32/37/. Ceea ce nu era implementat, a fost posibilitate de a accesa absolut orice pixel de pe ecran. Pentru a rezolva aveasta problema mi-am declarat o matrice de unsigned char care sa ocupe intreg chenarul de joc si mi-am creat doua functii de setare/resetare pixel. Generarea pieselor a devenit astfel mult mai usoara – pentru desenarea uneia dintre ele, desenanadu-se fiecare pixel in parte.

Algoritmul jocului este urmatorul:

cat timp nu s-a ajuns la limita de sus a chenarului de joc
	genereaza o piesa
	actualizeaza scorul
	daca s-a apasat buton stanga atunci
		deplasare piesa stanga
	daca  s-a apasat buton dreapta atunci
		deplasare piesa dreapta
	daca s-a apasat butonul din centru atunci
		rotire piesa
	deplasare piesa jos

Intrucat am avut ceva probleme cu avr-gcc pe Vista, editarea am facut-o pe Linux, cu text editorul de acolo, iar compilarea in linie de comanda. Proiectul contine si un makefile , ce a usurat foarte mult partea de compilare.

Rezultate Obţinute

Proiectul final a fost 100% functional, atat din puncte de vedere hardware cat si software.

Placuta cu Atmega16 (fata/verso)

Placuta de interconectare LCD + butoane (fata/verso)

Nokia3310 LCD

Start game

While playing

Game over

Concluzii

A fost un proiect interesant, primul de acest gen pentru mine. Ca si dificultate, partea hardware mi-a ridicat mai multe probleme datorita lipsei de experienta :-D . Am reusit sa ard 2 LCD-uri de Nokia pana sa obtin un proiect functional – pe primul pentru ca am folosit o schema gresita in care 2 pini ai LCD-ului erau legati intre ei si pe al doilea probabil pentru ca am lucrat (mutat pe placuta) cu LCD-ul in timp ce era alimentat si cel mai probabil am facut scurt pe undeva .

In concluzie, daca vreti sa faceti un proiect de acest gen:

  • documentati-va bine inainte de a incepe partea de lipt
  • asigurati-va ca schema pe care o folositi este un corecta
  • conectati LCD-ul la placuta inainte de a o alimenta
  • aveti grija la tensiunea de intrare pentru LCD

Download

Arhiva completa poate fi gasita aici

Contact:

Monica Dagadita 333CB - monica_dagadita@yahoo.com

Bibliografie/Resurse

pm/prj2010/cvasile/tetris.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