Introducere

Pandia Gheorghe

grupa 331 CC

Dame-șah : Proiect PM 2010

Proiectul prezentat în cele ce urmează permite a 2 jucători să joace dame-șah pe o matrice de led-uri bi-colore cu 3 terminale, astfel încât fiecare led are de fapt posibilitatea de a emite 3 culori, toate acestea 3 fiind folosite în cadrul display-ului pentru o mai bună experiență grafică.

Scopul proiectului este de a demonstra folosirea microcontrollerului Atmega16 în crearea unui joc grafic pe o matrice de led-uri controlate prin semnale electrice.

Ideea proiectului a fost jocul original dame-șah și anume un joc pe o tablă de șah în care există numai pioni ce se mișcă doar pe diagonală și pot sări peste piesele jucătorului sau ale inamicului. Scopul este de a ajunge în poziția inițială a celuilalt jucător înainte lui.

Pentru mine acest proiect reprezintă o metodă de aprofundare a cunoștințelor legate de proiectarea cu microprocesoare.

Descriere generală

descriere_generala_gheorghe_pandia.jpg

Jocul reprezinta confruntarea intre doi jucatori (rosu si verde in cazul meu) cu scopul de a ajunge la pozitia initala a celuilalt. Jucatorilor le este permis sa faca mutari doar pe diagonala si pot sari peste piesele proprii si ale adversarului.

Proiectul meu ce realizeaza jocul respectiv consta in 2 module de control (6 butoane pentru fiecare jucator - insa setate pe aceiasi pini, motiv pentru care se poate spune ca jocul merge jucat doar pe „buna credință”, pentru că fiecare jucator poate afecta mutarile celuilalt) ce interactionează direct cu microcontrollerul ATmega16, acesta controland prin semnale multiplexate in timp matricea de leduri.

Schema bloc am realizat-o cu interfața de use-case-uri din StarUML și am transformat-o în poză prin metoda „Print Screen”:

Hardware Design

Listă de piese:

  • Piesele pentru placa de bază, incluzând microcontroller-ul ATmega16;
  • 64 de leduri bicolore pentru matricea reprezentând tabla de șah;
  • 12 butoane pentru controlul mutărilor;
  • 16 rezistențe de 220 ohmi pentru aprinderea led-urilor;
  • un circuit integrat UNL2804A;
  • fire de conexiune.

Schema electrică a proiectului - exportată de ISIS Proteus 7 și salvată în format png.

Este micșorată cu ajutorul lui wiki - Pentru vizualizare în detaliu click ;-).

Schema de mai sus ar putea funcționa pentru led-uri tricolore (cele două culori și amândouă o dată). Din nefericire am refăcut schema pentru led-uri bicolore cu 3 terminale (De asemenea micșorată prin wiki):

Din nefericire simularea a mers foarte încet pe PC și a trebuit să testez proiectul direct pe montaj.

În urma montării și testării am observat că greșisem din punct de vedere al schemei și am modificat-o după cum urmează:

Alimentarea plăcii se poate face la 5V prin USB-ul calculatorului sau la voltaj între 7-12V de la o sursă externă care prin stabilizator va genera de asemenea 5V.

Prima versiune a proiectului:

Deși nu se observă din cauza blitz-ului, matricea de led-uri este aprinsă aleator, fără măcar un delay. Rezultatul a fost că Atmega16 nu poate face switch suficient de rapid ca led-urile să apară perfect stinse și nici la intensitate maximă. Deși ce cu intensitatea maximă nu deranjează, led-urile aprinse foarte puțin încurcă experiența jocului.

De asemenea există led-ul de pe placa de bază (cel verde din stânga sus) care pe lângă consumul de intesitate emite și o lumină foarte puternică mascând pe celelalte. Am eliminat posibilitatea de alimentare la 7-12V rămânând doar cu alimentarea prin USB. De asemenea am tăiat curentul prin led-ul ce indica funcționarea plăcii de bază pentru a beneficia de mai multă intensitate și o experiență mai bună de joc.

În urma eliminării elementelor, placa de bază are următorul circuit:

Se poate observa că am folosit o plăcuță de test cu conexiuni făcute câte 3, lucru care m-a avantajat la legături și mi-a permis să folosesc spațiul mai eficient având astfel o placă de bază de dimensiuni mult mai mici.

Construcția proiectului a fost un challenge mai mare decât mă așteptam:

În centrul pozei se observă matricea de led-uri cu 3 terminale.

  • Cele roșii sunt legate transversal în comun spre stânga, apoi la rezistențe și prin firele albastre la portul A al microcontrollerului.
  • Cele verzi sunt legate transversal în comun spre dreapta, apoi la rezistențe și prin firele galene la portul B al microcontrollerului.
  • Vertical, neizolat, este legat ground-ul la toate led-urile, puțin în relief pentru a nu face contact cu celelalte conexiuni, mai departe prin fire negre intrând în out-ul circuitul ULN.
  • Intrările în circuitul ULN sunt conectate prin 8 cabluri lungi albe, fixate pe plăcuță de portul D al microcontrollerului.
  • Apoi în stânga cu negru sunt legate controalele primului jucător (roșu) iar în dreapta cu alb controalele celui de-al doilea jucător (verde), amândouă legate la aceiași pini ai portului C în microcontroller.

Proiectul finalizat arată în felul următor:

Unde controalele reprezintă Sus, Jos, Stânga, Dreapta, Enter și Back pentru fiecare jucător, cu următoarele însemări:

  • Sus, Jos, Stânga, Dreapta - deplasarea selecției pe tablă.
  • Enter - se alege piesa curentă și apar pozițiile viitoare posibile ale acesteia, deplasarea făcându-se acum DOAR între acele poziții posibile. Alegerea poziției de mutare.
  • Back - Revenirea la posibilitatea de a alege piese fără a efectua mutări.

Software Design

Pentru realizarea proiectului am folosit mediul AVR Studio 4.3 și ISIS Proteus 7.6.

Programul folosește o matrice de 8 pe 8 cu valori de la 0 la 3 după cum urmează:

  • 0 - led stins;
  • 1 - roșu;
  • 2 - verde;
  • 3 - roșu și verde (galben).

Pentru controlul mutărilor se va folosi citirea intrărilor de pe butoanele din portul C. Va exista multiplexare în timp, la un moment dat fiind aprins un singur led, astfel permițând controlul culorii acestuia.

Funcții implementate

  • investigateRed și investigateGreen sunt funcțiile care caută primele mutări posibile;
  • investigateRedJump și investigateGreenJump sunt funcțiile care caută recursiv toate mutările ce pot fi efectuate astfel încât jucătorul să poată „sări” peste mai multe pise. Cum pe o tablă de șah, numărul maxim de sărituri posibile este 3, adâncimea arborelui recursiv este destul de mică să nu producă erori în microcontroller;
  • showMatrix este o funcție care afișează matricea și led-ul selectat care clipește. Am folosit această funcție pentru a putea trata o singură apăsare a unui buton ca un „Button Released”. Astfel, câtă vreme butonul este apăsat, afișarea are loc în continuare păstrând iluzia că apăsarea butonului nu a afectat nimic.
  • showWinner nu este încă implementată - va fi funcția care va afișa pe matrice câștigătorul la fiecare sfârșit de meci și apoi va da „restart” la joc.

Rezultate Obţinute

In afara de cateva degete arse ;) in urma proiectului am dobandit cunostinte noi despre modul de folosire al led-urilor, in special cele bicolore organizate intr-o matrice si de asemenea utilizrea circuitelor integrate, multiplexare in timp etc.

A fost o experienta extraordinara si mi-as fi dorit sa ii acord mai mult timp.

Am reușit cu succes să creez jocul dameșah în totalitate, chiar dacă nu i-am adăugat model de restart sau de „win game”, se poate juca oricând și chiar e mai fun decât cel obișnuit :)

Am postat și un film când jucam cu mine însumi, scuze pentru lipsa de sunet și calitate… am pierdut destule ore încercând să găsesc un convertor free cât de cât ok fără watermark sau înregistrare online de 1$ pe cine știe ce site și tot nu am găsit… așa că l-am lăsat așa. Enjoy!

Playin...

Ce se întâmplă de fapt?

Sunt doi jucători, roșu și verde. În momentul în care selectezi o piesă cu butonul „Enter” îți apar cu galben toate opțiunile de mutare, cu tot cu sărit peste piese, calculate în întregime, lăsând posibilitatea jucătorului de a alege mutarea.

Dacă mutările posibile nu sunt mulțumitoare, se poate oricând apăsa butonul „Back” și selecta altă piesă. Dacă se apasă Enter cu o mutare posibilă selectată, aceasta devine realitate și îi vine rândul celuilalt jucător.

Concluzii

Microcontrollere sunt foarte capabile să efectueze funcții foarte complexe foarte rapid. Astfel, la frecvențe foarte mari (16MHz) se poate obține un afișaj care pare continuu prin apriderea la intervale foarte mici a unei matrici de leduri.

Download

Arhiva ce conține fișierul sursă, makefile și designul din ISIS Proteus:pandia-gheorghe-331cc.zip

Bibliografie/Resurse

Resurse Software

Resurse Hardware

  • Piese pentru proiect au fost cumpărate de la magazine de pe strada Doamna Ghica și Maica Domnului, București.
  • Piesele pentru placa de bază au fost cumpărate tot de acolo, dar mai specific de la magazinul ConexElectronic pe care l-am evitat a doua oară deoarece staff-ul mi s-a părut foarte neprietenos și am petrecut o oră la coadă.
pm/prj2010/dtudose/damesah.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