Slots

Introducere

Slots este unul dintre cele mai vechi jocuri de casino. În acest joc, un jucător trage de o manetă, iar pe un ecran îi sunt afișate 3 simboluri în 3 sloturi diferite. După “amestecarea” simbolurilor, cele 3 pot fi diferite sau aceleași. Dacă cele 3 simboluri sunt identice, jucătorul câștigă runda respectivă. Un exemplu de joc Slots în variantă Flash este disponibil aici [1].

Poza de mai sus este doar cu titlu de exemplificare a aplicației.

Descriere generală

Jocul Slots este realizat cu ajutorul plăcuței din prima etapă la PM. Pentru implementare se folosește un 7-LED Display cu 3 digits, respectiv ELT-512SURWA/S530-A3:

Jocul are functionalități de bază - la apăsarea unui buton se generează cele 3 sloturi aleator. Dacă acestea sunt identice, jucătorul a câștigat - sloturile se sting și se aprind pentru a simula un efect de YOU WIN. Altfel, ledurile display-ului rămân aprinse pe valorile respective până când se va apăsa din nou butonul, moment în care numerele vor fi regenerate.

Display-ul se leagă la microcontroller pe anumite porturi (a se vedea mai jos, la Hardware Design).

Programul este scris in C și este scris pe microcontroller cu ajutorul AVRUSBBoot (a se vedea mai jos, la Software Design).

Hardware Design

7-led display-ul folosit se leagă la microcontroller-ul ATMega16 pe anumite porturi rămase libere. Display-ul are 12 pini, dintre care 3 anoduri și 8 catoduri, în interior existând niște diode. Un pin nu este folosit (pinul 6). Dintre cei 11 pini folosiți:

  • anodurile sunt pinii 8, 9 și 12
  • catodurile sunt pinii 1, 2, 3, 4, 5, 7, 10 și 11

Dintre catoduri, pinul 3 aprinde punctul de lângă fiecare digit, însă având în vedere că nu îl folosesc, nu l-am conectat la niciun port din microcontroller.

Datasheet-ul 7-led display-ului poate fi descărcat de aici [2].

Corespondența hardware (după legăturile realizate pe plăcuță) pin 7-led display - pin ATmega16 este următoarea:

Pin 7-led display Tip pin 7-led display Pin ATmega16 Port ATmega16 Pin ATmega16
1 catod 40 PORTA PA0
2 catod 39 PORTA PA1
4 catod 38 PORTA PA2
5 catod 37 PORTA PA3
7 catod 36 PORTA PA4
8 anod 24 PORTC PC2
9 anod 23 PORTC PC1
10 catod 35 PORTA PA5
11 catod 34 PORTA PA6
12 anod 22 PORTC PC0

Catodurile se conecteaza la ATmega16 prin cate o rezistenta de 1KOhm.

Iată mai jos circuitul rezultat după conectarea 7-led display-ului:

Alimentarea

Alimentarea se poate face fie de la priză (cum era in versiunea de bază a plăcuței), fie de la bateria de 9V pe care am conectat-o pe plăcuță. Alimentarea de la baterie se activează punând butonul roșu în starea On, iar blocarea curentului de la baterie se face putând butonul roșu în starea Off (a se vedea și poza cu circuitul final).

Componente folosite (sumar)

Componentele folosite în etapa a doua (despre care s-a scris mai sus):

  • 7-led display ELT-512SURWA/S530-A3
  • 7 rezistente de 1K (pe firele de legatura de la catozi la ATmega16)
  • buton switch KND6-101D-8
  • baterie 9V Matsushima
  • suport baterie 9V
  • fire de legatură

Verificare circuit

Verificarea funcționalității circuitului, legăturilor și a componentelor s-a făcut cu ajutorul unui multimetru.

Circuit final

Circuitul final, după conectarea 7-led display-ului, a butonului și a bateriei:

Software Design

Jocul este realizat în C și scris pe plăcuță cu ajutorul utilitarului AVRUSBBoot.

Algoritmul folosit este următorul:

  • se generează aleator cele 3 cifre: a, b, c
  • execută
    • activează anod cifra a
    • în funcție de cifră, activează anumite catoduri; în acest moment este afișată prima cifră
    • așteaptă o milisecundă
    • dezactivează anod cifra a
    • dezactivează catoduri
    • activează anod cifra b
    • în funcție de cifră, activează anumite catoduri; în acest moment este afișată a doua cifră
    • așteaptă o milisecundă
    • dezactivează anod cifra b
    • dezactivează catoduri
    • activează anod cifra c
    • în funcție de cifră, activează anumite catoduri; în acest moment este afișată a treia cifră
    • așteaptă o milisecundă
    • dezactivează anod cifra c
    • dezactivează catoduri
    • dacă cele 3 cifre sunt egale, se afiseaza alternativ cele 3 numere, apoi 3 linii orizontale (-) s.a.m.d. pentru a simula efectul de YOU WIN
    • dacă butonul este apăsat, regenerează numerele
  • la infinit

Am apelat la această metodă în care se așteaptă un delay între cifre, deoarece nu se pot afișa cifre diferite pe cele 3 digits simultan din cauza catodurilor activate. Folosind acest delay, cât timp nu se apasă butonul numerele sunt afișate în continuu, însă omul are impresia că acestea stau în permanență pe display. Dacă cifrele sunt egale, omul percepe doar acele secunde de așteptare în care ledurile sunt oprite și o altă perioadă în care vede toate cifrele aprinse. Se creează astfel un efect de tipul YOU WIN!

Arhiva cu fișierele proiectului este disponibilă la secțiunea Download.

Rezultate obținute

Inițial nu știam ce proiect să fac pentru etapa finală. Ideea unui joc de tip Slots mi-a venit când am văzut în vitrina unui magazin de electronice un 7-led display (din câte îmi aduc aminte, cu un singur digit). Mi s-a părut foarte interesant.

Ulterior, am aflat de jocurile pe LCD-uri de Nokia 3310 pe care le făceau colegii mei. Mi s-a părut interesant și am uitat de display-ul de la care am plecat (de fapt, nu știam cum se programează acela, iar din spusele colegilor ecranul de Nokia se programa destul de ușor), vrând apoi să folosesc și eu un astfel de ecran.

O altă vizită la magazine de electronice m-a determinat, însă, să îmi cumpăr acest 7-led display cu 3 digits. După ce m-am documentat cum se poate lucra cu el, am verificat cu ajutorul multimetrului. Mi s-a părut mult mai interesant de folosit.

De asemenea, am cumpărat un alt LCD cu 40 de pini, care, la activarea unui pin afișează câte ceva pe ecran tot sub formă de digits (cu 5 digits). Pentru acesta, însă, fiind “noname”, nu am găsit specificații. Oricum, este interesant de folosit, de exemplu pentru afișarea distanței parcurse la un program care contorizează acest lucru sau pentru un repartitor de căldură. Singura “problemă” care ar trebui rezolvată este multiplexarea acestor pini pentru a putea fi conectați la pinii lui ATmega16 (fiind mai puțini disponibili).

Ce am învățat de la proiectul la PM:

  • este relativ simplu să faci un circuit funcțional și programat cu ajutorul unui microcontroller, cu cunoștințe medii de electronică și de programare
  • poți realiza orice, doar idei să ai
  • gama de “produse” din care poți alege este foarte largă
  • există standardizări pentru componente, lucru observat și în datasheet-uri
  • programarea unei componente cu ajutorul microprocesorului este destul de simplă după citirea datasheet-ului și înțelegerea modului în care funcționează
  • produsele realizate în masă se fac cu ajutorul unui circuit imprimat, nu cu o placă de test.

Ca o concluzie, după ce am trecut prin această materie observ orice circuit îmi apare în “cale” - recent mă uitam la plăcuța care se vedea printr-un stick USB transparent.

Download

Arhiva cu fișierele sursă se poate descărca de aici [3]. Arhiva conține un fișier C și un Makefile. Compilarea se face cu utilitarul avr-gcc, disponibil în pachetul WinAVR pentru sistemele de operare Windows.

Jurnal

  • de pus baterie și scris în proiect despre ea
  • de pus buton
  • de facut poze si urcat pe site
  • de scris cod
  • de urcat cod pe site la secțiunea Download
  • cod functional pe placuta

Bibliografie

pm/prj2011/dloghin/slots.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