Table of Contents

Dan-Valentin BÎNĂ (78691) - Joc Pong pe LCD

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul consta in impmentearea unui joc de tip pong in 2 jucatori. Acesta are ca si scop extinderea cunostiintelor de proiectare cu microprocesoare. Am plecat de la cunoscutul joc pong, care a fost printre primele jocuri aparute. Jocul are ca si utilitate relaxarea si distractia intre 2 prieteni

Descriere generală

Avem nevoie de 4 butoane pentru a controla directia de deplasarea a celor 2 porti, sus sau jos. Jocul se va termina cand un jucator va avea 5 puncte.

Schema bloc:

Hardware Design

Lista de piese:

  • 1 placa de baza ATMega324
  • 1 LCD Dispaly Nokia 5110
  • 4 butoane
  • 1 condensator
  • diode
  • rezistente
  • stabilizator de tensiune (ecranul necesita alimentare la 3.3V)

Schema electrica:

Software Design

Am folosit ca mediu de dezolvatare AVR cu editorul Sublime Text.

Am utilizat gcc-avr, avr-libc, libusb-dev pe o masina virtuala de linux mint.

Pentru a afisa date pe display-ul Nokia 5110, am folosit header-ul lcd.h cu implementare in lcd.c. Se apeleaza functii precum:

  • void lcd_clear(void); - curatare ecran
  • void lcd_update(void); - update-aza datele afisate
  • void lcd_goto_xy(unsigned char x, unsigned char y); - pune cursroul la pixelul (x,y)
  • void lcd_str(char* str); - afiseaza un string acolo unde pozitia cursorului
  • void lcd_init(void); - initializeaza lcd
  • void lcd_contrast(unsigned char contrast); - setare contrast

Functiile implementate de mine sunt urmatoarele:

  • void init_buttons(void); - initializare butoane PD0, PD1, PD4, PD5
  • void check_direction(void); - setare directie in functie de butonul care a fost apasat
  • coord generate_coord(void); - generare coordonate pentru puc. coord este un pixel cu campurile x, y
  • void initial_screen(void); - setare imagine de inceput
  • void wait_start(void); - inceperea jocului prin apasarea butonului de start
  • void init_bar(uint32_t seed); seteaza coordonatele initiale pentru cele 2 bari si pentru puc
  • void update_game(void)l - update al pozitiei obiectelor la fiecare pas
  • void end_game(char* str); - afisare invingator
  • void draw_game(void); - afiseaza obiecte pe lcd
  • int main(void); - se apeleaza functiile necesare derularii jocului

Rezultate Obţinute

Rezultate obtinute:

Concluzii

Initial am folosit un Display 12864 v2.0 128×64 pixel. Am intampinat probleme cu el deoarece acesta nu a functionat, cu toate ca aparea ca si alimentat. Acest lucru m-a ajutat sa invat sa fac debug pe hardware, ceea ce nu facusem prea mult pana acum si am ajuns la concluzia ca display-ul avea niste probleme legate de luminozitate. Pentru a o regla aveam nevoie de alte componente hardware, asa ca am folosit un alt display si ulterior nu au mai aparut probleme in realizarea implementarii.

Consider ca pasii spre realizarea proiectului ajuta la o consolidare buna a cunostiintelor acumulate in cadrul materiei.

Download

Arhiva cu proiectul:

bina_dan_333cb.zip

Bibliografie/Resurse

Am utilizat urmatoarele fisiere:

https://github.com/Eracage/ATmega128_LCD_Graphics/blob/master/lcd.c https://github.com/Eracage/ATmega128_LCD_Graphics/blob/master/lcd.h