This is an old revision of the document!


Mini Game Console

  • Author: Căzan Mihnea-Andrei
  • Group: 335CA

Introduction

This project consists of building a retro mini game console capable of running classic arcade games (such as Snake and Breakout).

  • The main goal is to explore and practically apply the interfacing of an 8-bit microcontroller (ATmega328P) with various input and output peripherals.
  • The idea originated from the desire to recreate the experience of 80s/90s arcade games on a minimal hardware platform, demonstrating how limited memory resources (32KB Flash, 2KB RAM) can provide a complete interactive experience.
  • This project is highly useful from an educational standpoint, as it deepens the understanding of fundamental concepts (I2C communication protocols, ADCs, Timers, PWM, and Hardware Interrupts), while also resulting in a functional and entertaining gadget.

Descriere generală

The console is structured into three main blocks: input, processing, and output.

  • The ATmega328P microcontroller acts as the central processing unit. It continuously reads analog signals from the joystick using the internal ADC (to determine movement direction) and monitors hardware interrupts or digital pin states for the action buttons.
  • Based on the implemented game logic (Game Loop), the microcontroller updates the system state and sends graphical data packets to the OLED display via the I2C hardware interface.
  • Simultaneously, the system uses internal Timers to generate PWM (Pulse Width Modulation) signals to a passive buzzer (to play specific sound effects) and controls an RGB LED to provide quick visual feedback regarding the current state of the console (e.g., green for active gameplay, red for Game Over, blue for menu).

System Block Diagram:

Hardware Design

Lista componentelor folosite pentru proiect (BOM - Bill of Materials):

  • ATmega328P Xplained Mini Development Board (8-bit AVR Microcontroller)
  • 0.96” OLED Display (SSD1306 Controller, I2C Interface, 128×64 resolution)
  • Biaxial Analog Joystick Module (KY-023 type) cu buton de push integrat (SW)
  • Passive Buzzer 3.3V (pentru generarea de efecte sonore)
  • 5mm RGB LED (Common Cathode, pentru indicarea stării consolei)
  • 2 x Tact Switch Buttons 6x6mm (Pentru funcțiile START și PAUSE)
  • 4 x 220Ω Resistors (3 pentru limitarea curentului pe LED-ul RGB, 1 pentru protecția buzzer-ului)
  • 830 Tie-Points Breadboard (pentru asamblare fără lipire)
  • Dupont Wire Set (Tată-Tată și Mamă-Tată)

Schema Electrică:

 Schema electrică a consolei

Tabel de Conexiuni

Componentă Pin Componentă Pin ATmega328P Detalii / Funcționalitate
LED RGB Anod Roșu PD6 (D6) PWM (Timer0 OC0A)
Anod Verde PD5 (D5) PWM (Timer0 OC0B)
Anod Albastru PB3 (D11) PWM (Timer2 OC2A)
Catod GND Masă comună
Joystick VRx PC0 (ADC0) Citire analogică (axa X)
VRy PC1 (ADC1) Citire analogică (axa Y)
SW PD2 (D2) Întrerupere (INT0, Pull-up intern activat)
VCC 5V Alimentare
GND GND Masă
OLED Display SDA PC4 (A4) Date I2C (TWI)
SCL / SCK PC5 (A5) Clock I2C (Fast Mode 400kHz)
VCC 5V Alimentare
GND GND Masă
Buzzer Pin (+) PB1 (D9) Trecut prin rezistență 220Ω (Timer1 OC1A)
Pin (-) GND Masă
Butoane START PD3 (D3) Întrerupere (INT1, Pull-up intern activat)
PAUSE PB0 (D8) Pin Change Int (PCINT0, Pull-up intern activat)

Protocoale de Comunicație și Periferice Hardware

Pentru a gestiona simultan display-ul, input-ul analogic și efectele vizuale/sonore fără să se blocheze, sistemul folosește intens perifericele hardware ale microcontroller-ului:

  • I2C (TWI): Activat pe pinii PC4/PC5. Este configurat în Fast Mode (400 kHz) pentru a asigura transferul rapid al frame-buffer-ului către display-ul OLED (menținând ~30 FPS).
  • ADC: Canalele ADC0 și ADC1 sunt folosite pentru citirea fluidă a joystick-ului, utilizând un prescaler de 128 pentru stabilitate.
  • Semnale PWM: Timerele 0 și 2 generează semnale PWM hardware pe 3 pini independenți pentru a controla intensitatea și mixarea culorilor pe LED-ul RGB.
  • Timer1 (CTC Mode): Generare de frecvențe hardware precise pentru notele muzicale transmise către buzzer, degrevând procesorul de folosirea funcțiilor blocante de tip delay.

Software Design

Descrierea codului aplicaţiei (firmware):

  • mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR)
  • librării şi surse 3rd-party (e.g. Procyon AVRlib)
  • algoritmi şi structuri pe care plănuiţi să le implementaţi
  • (etapa 3) surse şi funcţii implementate

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2026/bianca.popa1106/mihnea_andrei.cazan.1778360785.txt.gz · Last modified: 2026/05/10 00:06 by mihnea_andrei.cazan
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