Contact

Andreea Starparu 333CC

Introducere

Scopul proiectului este de a realiza un joc “Bila in labirint” folosind microcontrollerul ATMega16 si un LCD de Nokia 3310. Ghidarea bilei in labirint va fi facuta de utilizator prin 4 butoane care vor da directia de deplasare.

Descriere generală

Schema bloc a modulelor hardware:

Hardware Design

Schema electrica:

Explicatii schema:

  • LCD-ul are urmatorul pinout:
    • 1 - VDD – Input Voltage
    • 2 - SCK – Serial Clock
    • 3 - SDI – Serial Data Input
    • 4 - D/C – Data/Command Input
    • 5 - SCE – Chip Select
    • 6 - GND - Ground
    • 7 - VOUT – VLCD
    • 8 - RES – Reset
  • Pentru ca tensiunea de alimentare si cele de input pentru LCD este de 3.3V, iar Vcc=5V, am folosit un divizor de tensiune cu rezistente de 1k7 si 3k3.
    • Am modificat ulterior schema, folosind pentru alimentarea LCD-ului doua diode 1N4148 legate intre alimentarea la 5V si cea la 3V3 (schema in Eagle nu a mai fost modificata).
  • Butoanele sunt conectate folosind rezistente de pull-up intre pinul de intrare si Vcc.

Circuitul rezultat:

Piese folosite:

  • 1 x LCD Nokia 3310
  • 5 x rezistente 3k3
  • 5 x rezistente 1k7
  • 4 x rezistente 10k
  • 1 x condensatoare 10uF
  • 4 x push-button-uri
  • 2 x diode 1N4148

Software Design

Mediu de dezvoltare:

  • Programul e realizat in C
    • Editor: Microsoft Visual C++ 2008 Express Edition
    • Buid: make
    • SO: Windows 7 Professional

Testare:

  • Pentru simulare si testare am folosit Proteus 7
    • am adaugat o biblioteca pentru LCD-ul PCD8544
    • din pacate nu toate driverele care functioneaza in Proteus functioneaza si practic

Librarii 3-rd party:

  • Driver pentru LCD:
    • implementeaza protocolul SPI 'by hand'
    • pe langa functiille deja implementate (lcd.c), am adugat alte functii pentru a imi usura codarea jocului (ex: afisarea unui singur pixel)

Probleme:

  • Se pierdea jumatate din memorie deoarece avr-gcc punea stiva de la adresa 0x200. Ca solutie am folosit secventa de cod:
void stack_init(void) __attribute__ ((naked)) __attribute__ ((section (".init8")));
void stack_init(){
  asm("ldi r28,lo8(0x80045F)");
  asm("ldi r29,hi8(0x80045F)");
  asm("out __SP_H__,r29");
  asm("out __SP_L__,r28");
}

Poze

  • Extensia pentru LCD si butoane (foto fata):

extensiepm.jpg

  • Extensia pentru LCD si butoane (foto verso):

extensiepm_back.jpg

  • Circuitul complet:

placuta_compl_pm.jpg

Rezultate Obţinute

Software

rezultate_software.jpg

  • am obtinut un soft complet functional

Hardware

rezultate_hardware.jpg

  • poza arata cea mai draguta “reactie” a LCD-ului.

Concluzii

  • LCD-urile PCD8544 se comporta destul de ciudat (unul nu afisa nimic, iar ce de-al doilea ramanea cu pixelii setati aiurea dupa LCD_clear).
  • Simularile in Proteus nu sunt foarte relevante (nu toate driverele functionale in Proteus functioneaza si practic).

Download

Codul si schemele Eagle sunt disponibile aici.

Bibliografie/Resurse

pm/prj2010/avoinescu/bilainlabirint.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