Q-Touch Pong

Echipa:

  • Claudiu Coman
  • Lucia Roșculete

Grupa: 332 CA

Asistent: Dan Tudose

Introducere

pong.jpgPong este unul dintre cele mai vechi și populare jocuri arcade. El constă în redarea bidimensională a unui joc de tenis. Prin proiectul nostru, am urmărit să revigorăm clasicul joc prin introducerea unui control de joc bazat pe noile tendințe din materie de dispozitive portabile: Q-Touch.Doi utilizatori pot juca un meci de pong utilizând cele patru zone sensibile la atingere pentru a mișca paletele de tenis sus-jos. Scopul este ca mingea să nu iasă din teren. Dacă mingea iese din teren, numărul de vieți ale jucătorului vinovat scade. Atunci când un jucator rămăne fără vieți, jocul se termină cu un mesaj care anunță căștigătorul.Credem că proiectul este util altora fiindcă folosește comunicația serială între două plăcuțe, o bibliotecă pentru afișare pe LCD și o bibliotecă Atmel Q-Touch peste care se pot cladi numeroase alte proiecte ingenioase pe viitor.

Descriere generală

Proiectul conține:

Module hardware

Plăcuța de afișare

  • μC ATMega16
  • interfața serială folosită la comunicația cu plăcuța de control
  • interfața de programare prin USB
  • interfata de afișare pe LCD

Plăcuța de control

  • μC ATMega16
  • interfața serială folosită la comunicația cu plăcuța de afișare
  • interfața de programare prin USB
  • interfața cu senzorii

Plăcuța de extensie

  • 4 senzori de atingere elementari

Module software

  • lcd.hex - program de afișare pe LCD cu interpretarea comenzilor primite pe interfața serială
  • control.hex - program de translatare a semnalelor de la senzori in comenzi trimise pe interfața serială

Hardware Design

Plăcuța de afișare - Componente suplimentare
Componentă Număr
Potențiometru 10K1
Rezistență 10K1
Rezistență 1001
Condensator 100nF1
Baretă de 20 pini2
Cablu

Schema de mai jos a fost folosită la simularea interfeței dintre microcontroller și LCD în Proteus. LCD-ul din Proteus este LGM12641BS1R, care are 20 de pini cu funcționalități similare pinilor ecranului WG2864A folosit de noi, chiar dacă ordinea lor pe cele două diferă.

Schema electrică pentru plăcuța de afisare
{{:pm:prj2011:dtudose:rosculete_lucia:pinout.png|}}

Ordinea corectă a pinilor de pe WG12864A este cea din tabelul de mai jos.

Se observă din tabel că există 5 pini de control ce trebuie conectați la portul C ai microcontrollerului. Pentru pinii de date (linii Data Bus DB0-DB1) nu este obligatoriu să se folosească portul B, folosit de noi, ci orice alt port liber al microcontrollerului.

Pinout LCD - microcontroller
WG12864AATMEGA16
Pin Simbol Funcție Pin Simbol
1VssGND
2VddAlimentare +5V
3VoAjustarea contrastului
4D/IDată/Instrucțiune22PC0
5R/W Read/Write23PC1
6EH→L Signal Enable24PC2
7DB0Linie Data Bus1PB0
8DB1Linie Data Bus2PB1
9DB2Linie Data Bus3PB2
10DB3Linie Data Bus4PB3
11DB4Linie Data Bus5PB4
12DB5Linie Data Bus6PB5
13DB6Linie Data Bus7PB6
14DB7Linie Data Bus8PB7
15CS1Chip Select 125PC3
16CS2Chip Select 226PC4
17RSTReset
18VeeNegative Voltage Output
19LED+Alimentare pentru LED+ 4.2V RA=0 Ohmi
20LED-Alimentare pentru LED 0V

Vee, Vo și GND se conectează la piciorușele potențiometrului. Vdd și LED+ se conectează la alimentare. LED- se conectează la masă printr-o rezsitență de 100. Reset se leagă la alimentare printr-o rezistență de 10K și la masă printr-un condensator de 100nF.

Plăcuța de control - Componente suplimentare
Componentă Număr
Condensator 22nF4
Rezistență 1K4
Plăcuță de cupru1
Bareta de 20 pini1
Cablu

Cei 4 senzori (sus-jos pentru cei doi jucători) răspund la apăsări, nu la mișcări de alunecare. Ei au fost conectați la microcontroller-ul de pe plăcuța de senzori pe portul C, ocupand 8 pini (fiecare senzor ocupă 2 pini consecutivi).

Schema pentru conectarea unui senzor la doi pini ai ATMEGA16
Sursa: Atmel QTouch Library

S-a respectat sugestia Atmel pentru designul senzorilor de atingere. S-a folosit o plăcuță de cupru pentru decuparea unor senzori de mai mult de 6mm lățime. S-a aplicat și un strat subtire izolant pe fiecare senzor.

Sugestia Atmel
Sursa: Touch Sensor Design Guide

Pentru interconectarea prin serială s-au folosit cei trei pini de Rx, Tx și GND.

Interconectarea prin serială

Software Design

Software de afișare

Programul rulat pe plăcuta de afișare, lcd.hex care afișează jocul de pong pe LCD foloseste biblioteca KS0108 scrisă de Fabian Maximilian Thiele. Fucțiile acestei biblioteci permit:

  • afișarea șirurilor de caractere cu un fonturi citite din fișiere .h generate cu aplicația Java GLCDFontCreator
  • rasterizarea liniilor
  • rasterizarea cercurilor
  • rasterizarea dreptunghiurilor

Funcțiile care implementează logica jocului se găsesc în fisierul lcd.c. Logica jocului tratează:

  • deplasarea paletelor de pong in funcție de comanda primită pe serială
  • deplasarea mingii
    • viteze orizontală și verticală se modifică dupa regulile clasice de pong
    • viteza pe 0y depinde de distanța dintre centrul mingii si centrul paletei atunci cănd mingea se ciocnește de paletă)
  • ciconirile cu pereții orizontali ale mingii si paletelor
  • ciocnirile dintre minge si palete
  • updatarea scorurilor celor doi jucatori atunci cănd mingea iese din teren
  • terminarea jocului atunci cănd un scor devine 0 și afișarea jucătorului invingător.

Pentru a muta paletele coresunzător, se verifică periodic dacă există date primite pe serială. Dacă acestea există, se citește octetul care conține împachetate 2 constante care indică ce mutări au făcut cei doi jucători: UP, DOWN sau NONE. Se actualizează deplasările jucătorilor în mod corespunzător. Daca nu s-a primit nimic, mingea va continua să se miște (The show must go on). Toate aceste lucruri se petrec intr-o buclă căreia i se pune capăt în momentul în care unul dintre scoruri ajunge pe 0 si jocul se termină.

Software de citire a senzorilor

În programul control.hex:

  • se initializează întreruperile, comunicația serială și senzorii
  • se activează canalele pe care operează fiecare senzor
  • se fac setări standard
  • se activează timerul

Timerul este folosit pentru a indica la ce intervale de timp să fie generată o întrerupere a cărei rutina de tratare verifică dacă s-a apăsat vreunul dintre senzori.

Programul intră într-o buclă infinită, care verifică dacă este timpul să facă o măsurătoare. Dacă este cazul, măsoară senzorii și reține care au fost apăsați. Rezultatul este trimis apoi pe serială codificat într-un singur octet.

Pentru a rula programul am folosit biblioteci externe puse la dispoziție de Atmel. Ele depind de modelul microcontrollerului și de configurația senzorilor. Mai multe detalii se regăsesc pe pagina de utilizare a bibliotecii.

Jurnal

Implementarea proiectului a urmarit etapele:

  • cumpărarea componentelor
  • lipirea celor 20 de pini LCD după datasheet WG1286B
  • testarea LCD-ului cu un program de test
  • simularea programului de test in Proteus
  • relipirea celor 20 de pini LCD după datasheet WG1286B
  • testarea LCD-ului cu un program de test
  • implementarea jocului de Pong pe LCD cu mișcări automate ale paletelor
  • simularea jocului de Pong în Proteus
  • testarea jocului pe LCD
  • implementarea funcțiilor pentru interfața serială
  • testarea funcțiilor pentru serială în Proteus
  • testarea serialei pe cele doua plăcuțe
  • lipirea senzorilor
  • realizarea programului de citire a senzorilor
  • testarea programului de citire a senzorilor pe plăcuță prin afișarea datelor citite pe LCD
  • sincronizarea celor două programe de lucru cu LCD-ul și cu senzorii

Rezultate Obţinute

S-au atins obiectivele propuse de a realiza un joc 2D de Pong controlat prin patru butoane sensibile la apăsare. O mică demonstrație se poate vedea in filmulețul de mai jos.

Demo
Galerie de poze cu plăcuțele realizate

Concluzii

  • Este foarte bine ca înainte de a rula un program pe un microcontroller care controleaza un LCD, acesta să fie simulat înainte folosind Proteus. Simularea ne ajută să identificăm dacă problemele sunt de natură hardware sau sofware.
  • API-ul bibliotecii de lucru cu Q-Touch este ușor de folosit, dar folosirea headerelor este foarte greoaie și deloc intuitivă.
  • Majoritatea problemelor ce pot apărea s-au dovedit a fi de natură hardware.
  • Este foarte probabil ca atunci când LCD-ul nu funcționează, să se datoreze conectării defectuoase a potențiometrului sau a pinilor de Chip Select.

Download

Bibliografie

pm/prj2011/dtudose/qtouchpong.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