proiectSI

51
Sisteme Incorporate Proiect Realizarea unei versiuni simplificate a celebrului joc Tetris Elevi : Stana Adelina gr 4.2

Transcript of proiectSI

Sisteme Incorporate Proiect Realizarea unei versiuni simplificate a celebrului joc Tetris

Elevi : Stana Adelina gr 4.2 Teban Mihai gr 4.2 Enuntul proiectului

Realizarea unei versiuni simplificate a celebrului joc Tetris folosind un microcontroler ATmega16A (2 studeni).

Caracteristici:

Se vor defini 3 sau 4 tipuri de piese de joc Tetris, la alegerea studenilor . Se va utiliza o matrice cu LED-uri (de dimensiune 8*8 sau mai mare) pentru afiarea pieselor de joc, care au o micare constant de cdere, pn n momentul n care acestea ajung la baza ecranului. In momentul n care la baza ecranului exist 2 linii complete (toate LED-urile aprinse), acestea vor disprea pentru a face loc noilor piese, iar variabila ce reprezint scorul juctorului va fi incrementat cu o anumit valoare. Deplasarea la stnga sau la dreapta a unei piese se va realiza prin acionarea cte unui buton corespunztor fiecrui sens (o apsare corespunde unei deplasri cu o poziie). Se va implementa funcionalitatea de rotire a unei piese de joc, la apsarea unui buton.

A. Scurta descriere a senzorilor folositi si a circuitului dedicat utilizat pentru realizarea proiectului.

1. ATmega16A Acesta are 32 intrari/iesiri digitale , un oscilator la 16MHz, o conexiune pe USB, o mufa de alimentare si un buton de reset. Consta intr-o platforma de mici dimensiuni (6.8 cm / 5.3 cm in cea mai des intalnita varianta) construita in jurul unui procesor de semnal si este capabila de a prelua date din mediul inconjurator printr-o serie de senzori si de a efectua actiuni asupra mediului prin intermediul luminilor, motoarelor, servomotoare, si alte tipuri de dispozitive mecanice. Procesorul este capabil sa ruleze cod scris intr-un limbaj de programare care este foarte similar cu limbajul C++.

Descrierile pinilor

Nume Descriere

VCCDigital supply voltage.

GNDGround.

Port A (PA7:PA0)Portul A servete ca intrre analogica la A / D Converter. Portul A servete, de asemenea, ca un port I/O de 8 bii bidirecional n cazul n care convertor A / D nu este utilizat.

Port B (PB7:PB0)Port B este un port I/O de 8 bii bidirecionali cu rezistene interne pull-up (selecionat pentru fiecare bit). Pinii portului B sunt tri-declarati atunci cnd o condiie de resetare devine active , chiar dac clockul nu se execut.

Port C (PC7:PC0)Port C este un port I/O de 8 bii bidirecionali .

Port D (PD7:PD0)Port D este un port I/O de 8 bii bidirecionali . Tampoanele de iesire ale portului D au caracteristici de actionare simetrice atat cu capacitatea surs cat si cu high sink .

/RESETReset Input . Un nivel sczut pe acest pin mai mult dect lungimea minim de puls va genera o resetare , chiar dac clockul nu se execut .

XTAL1Intrare pentru amplificatorul inversor i intrarea pentru clockul circuitul de operare .

XTAL2Iesire din Oscilator.

AVCCAVCC este PIN-ul de tensiune de alimentare pentru Port A iA / D Converter . Trebuie conectat extern la VCC , chiardac ADC nu este folosit . Dac se utilizeaz ADC , ar trebui s fie conectat la VCC printr-un filtru low-pass .

AREFAREF este PIN-ul de referin analogica pentru A / D Converter.

2. 2x Matrice de LED-uri 8X8, inlantuibila

MOD-LED 8x8 este o matrice (de dimensiune 50 x 50 mm) de led-uri inlantuibila care iti permite sa obtii afisaje cu led-uri de orice . Atunci cnd vorbim despre o matrice de leduri 88 ne referim la numrul de rnduri X coloane pe care aceasta le deine. Astfel o matrice led 88 va avea 8 rnduri cu cte 8 leduri sau 8 coloane cu cte 8 leduri. n total o matrice 88 are 64 de leduri. Putem spune c pe o matrice de leduri de 88 exist 64 de pixeli, fiecare pixel formndu-se la intersecia unui rnd cu o coloan. Pentru a tii cum putem aprinde sau stinge unul din cei 64 de pixeli este foarte important s urmrim specificaiile productorului (schema electrica).

3. Bread Board

Un Breadboard, numit si protoboard, reprezinta o baza de constructie pentru realizarea de prototipuri in electronica. Termenul de breadboard este deobicei utilizat pentru a face referire la faptul ca acest gen de placa nu necesita lipituri pentru a realiza conexiunea elementelor (fiind de genul plugboard). Datorita faptului ca elementele nu trebuie lipite pe placa, aceasta poate fi refolosita. Acest lucru faciliteaza crearea de noi prototipuri temporare si de diferite design-uri de circuite. Un breadboarb consta dintr-un bloc perforat care are clipuri de staniu sau bronz fosforos sau nichel sub perforatii . Clipurile sunt adesea numite puncte de legtur sau punctele de contact. Numrul de puncte de legtur este de multe ori dat n caietul de sarcini al breadboard. Distana dintre clemele este de obicei de 0,1 in (2,54 mm).

4. Multiplexorul DG409 DG409 este un multiplexor analogic cu 8 canale facut pentru a conecta una dintre cele opt intrri la o ieire comun determinat printr-o adres pe 2 bii (A0, A1). Canalul ON conduce la fel de bine curentul in ambele directii la fel de bine . In starea off fiecare canal blocheaza voltajul . O functie (EN) permite utilizatorului sa reseteze multiplexor / demultiplexorul . Toate intrrile de control, adresa (Ax)i enable (EN) sunt compatibile TTL.

Schema bloc : Tabelul de adevar : A2A1 A0 EN ON SWITCH

XxX0None

00011

01112

10013

11114

5. Protocolul de comunicatie folosit - UART Conexiunea este de tip UART (universal asynchronous receiver/transmitter) care translateaza date din forma paralela in forma serial si invers .UART ia bytes de date si tramsmite bitii individuali intr-un mod secvential . La destinaie, un al doilea UART re-asambleaz biii n octei complet. Fiecare UART conine un registru de deplasare, care este metoda fundamental de conversie ntre formele de seriala i paralela. Transmiterea seriala de informaii digitale (bii) printr-un singur fir sau alt mediu este mai puin costisitoare dect transmiterea n paralel prin mai multe fire.

6. USB to Serial Bridge Controller - PL-2303HX

PL-2303HX ofer o soluie convenabil pentru conectarea unui RS232, ca dispozitiv serial asincron full-duplex pentru orice Serial Bus (USB) host capabil universal. PL-2303HX poate simula portul COM tradiional pe majoritatea sistemelor de operare care permitand aplicaiilor existente , bazate pe portul COM sa migreze cu uurin . Profitnd de modul USB de transferare in masa tampoane mari de date, precum i de control automat de debit, PL-2303HX este capabil s ating randament mai mare comparativ cu UART tradiionale (Universal Asincron Receptor Emitor) porturi.

Pin NameDescription

1TXDSerial Port (Transmitted Data)

2DTR_NSerial Port (Data Terminal Ready)

3RTS_NSerial Port (Request To Send)

RS232 VDD. The power pin for the serial port signals. When

4VDD_325the serial port is 3.3V, this should be 3.3V. When the serial port

is 2.5V, this should be 2.5V. The range can be from 1.8V~3.3V.

5RXDSerial Port (Received Data)

6 RI_NSerial Port (Ring Indicator); or Auxiliary General Purpose I/O

7GNDGround

8NCNo Connection

9DSR_NSerial Port (Data Set Ready); or Auxiliary General Purpose I/O

10DCD_NSerial Port (Data Carrier Detect); or Auxiliary General Purpose

11 CTS_NSerial Port (Clear to Send); or Auxiliary General Purpose I/O

12SHTD_NRS232 Transceiver Shut Down Control

13GP3Auxiliary GPIO Pin 3 (Default output high mode)

14GP2Auxiliary GPIO Pin 2 (Default output high mode)

15DPUSB Port D+ signal

16DMUSB Port D- signal

17VO_33Regulator Power Output, 3.3V

18GNDGround

19RESET_NExternal System Reset (Active Low)

20VDD_5USB Port VBUS, 5V Power. (6.5V for OTPROM writing voltage).

21NCNo Connection

22GP0General Purpose I/O Pin 0

23GP1General Purpose I/O Pin 1

24NCNo Connection

25GNDGround

26TESTTest mode control

27NCNo Connection

28ReservedReserved pin (Must be floating)

7. Programatorul AVRISP mkII Programeaza Flash si EEPROM Suporta tensiuni int de la 1.8V la 5.5V Viteza reglabila de programare ISP (50Hz la 8MHz frecven) USB compatibil (viteza maxima, 12Mbps) 2.0 Alimentat de la USB, nu are nevoie de surs de alimentare extern Protecie interfa int Protecie la scurtcircuit

B. Schema completa a sistemului :

C. Cod #include "algorithm.h"#include "matrix.h"#include "figure.h"#include "UART.h"

U8_T speed = 0;S8_T row = 0;S8_T column = 0;S8_T last_row = 0;S8_T last_column = 0;U8_T fig_init = 0;U16_T counter = 0;U16_T timer = SPEED; //10000 ~ 1 secU16_T score = 0;

U8_T figure_number = 0;U8_T figure_position = 0;

U8_T matrix[16][8] = {{0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}; U8_T figure[4][4] = {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}};

void process_game(){counter++;if (fig_init == 0){figure_init();}if (counter > timer){if (timer > 2000){timer = timer - 20;}if (fig_init == 1){USART_WriteChar(score);figure_change_position(nothing);}}if (counter % 5 == 0){matrix_clear();matrix_display();}}

U8_T figure_random(){return (rand()+1+figure_number)%4;}

void figure_copy(U8_T fig[4][4]){U8_T i = 0;U8_T j = 0;for (i=0; i=0; i--){for (j=last_column; j=0; i--){for (j=column; j