Skip to content
ctalau edited this page Sep 13, 2010 · 9 revisions

Descriere generală

Proiectul are ca scop implementarea unui viewer de poze.

  • Pozele sunt stocate pe un card SD.
  • Sistemul de fisiere suportat este FAT32
  • Pozele sunt alb-negru in format BMP ( probabil compresat cu RLE)
  • Afisarea directoarelor si respectiv a pozelor se face pe un ecran LCD 48×84

Scopul proiectului este de a imita structura unui computer:

  • Procesor + Memorie (integrate in microcontroler)
  • Unitate de stocare (card SD)
  • Display (LCD) – ultimele doua pe aceeasi magistrala externa
  • Dispozitive de input ( push-buttons) care genereaza o singura intrerupere si care au un controller de intreruperi ( implementat software) care stabileste ce dispozitiv a generat intreruperea.
  • Drivere pentru fiecare componenta, sistem de fisiere.
  • Librarie grafica ( decompresie BMP)

Hardware Design

Lista de piese

  • Card SD
  • Socket card SD
  • Ecran Nokia 3310 – PCD8544 (48×84 pixels matrix LCD)
  • condensatori 10uF, 1uF, 0.1uF
  • rezistente – 3×3k3, 3×2k2, 100 ,140
  • regulator de tensiune LM317
  • pachet de porti OR 74HCT32
  • push buttons – 4

Scheme electrice

Interfatare componente

Schema completa

Explicatii schema

  • Pentru ca tensiunea de alimentare pt LCD si card SD este de 3.3V am folosit un regulator de tensiune LM317 ( se poate schimba ), cu rezistentele de ajustare de 100 si 140 => 3V3 la iesire. Se poate folosi si un potentiometru.
  • Pentru tensiunile de input pentru LCD si card SD am folosit divizor de tensiune cu 2k2 si 3k3.
  • Pentru a genera o singura intrerupere pentru cele 4 butoane folosim porti SAU 74HTC32 ( am omis conexiunile intre butoane si la PA0-3 pentru a nu incarca schema), pe acesti pini se vede care buton a fost apasat.
  • CS-ul (pentru protocolul SPI) folosit pentru LCD este PB1.
  • Am omis schema de alimentare/ceas pt ATmega16.

Rezultatele simularii

  • Nu am gasit modele de LCD si de card SD pentru varianta de proteus de pe site.

Software Design

Principalele probleme:

  • Memoria
    • Driver SD card – buffer 512 bytes
    • File System – structuri de date ~ 100 bytes => folosesc structurile de pe card, si doar pointeri
    • Driver LCD – pixel buffer 48×84 / 8bits = 504 bytes => afisez on the fly din bufferul de citire
    • Font – 30 × 5 = 150 bytes (pot pune in eeprom)
    • Aplicatie BMP – cat mai mult => folosesc tot bufferul de citire.
  • SPI multislave
    • Si LCD-ul si cardul SD folosec protocolul SPI

Mediu de dezvoltare

  • vim + make + avr-gcc + avrusbboot

Librarii 3-rd party

  • Procyon AVRlib – MultiMedia and SD Flash Card Interface
    • Foloseste un buffer extern si citeste cate 512 bytes.
  • Driver pentru LCD
    • Bun pentru ca NU are pixel buffer care ocupa memorie.
    • Trebuie modificat pentru a face afisarea pozelor. Este conceput pentru afisarea de caractere.

Module de implementat

  • Modificarea driverlor de LCD / MMC pentru a folosi pini diferiti pentru SS (ambele folosesc SPI)
  • Handler pentru intreruperile generate de butoane
  • Librarie pentru citirea pozelor in format BMP ( probabil compresat RLE8 )
  • Sistem de fisiere FAT32:
    • Adaptat strict nevoilor proiectului: read-only, fara LFN, fara directoare multi-cluster.
    • Foloseste < 550 bytes de memorie de date ( din care 512 bufferul de citire de pe card ).
    • Un mecanism primar de Memory Mapped Files ( accesarea fisierelor direct din bufferul File Systemului) pentru reducerea consumului de memorie.
    • Implementarea ‘de mana’ a sistemului de fisiere face posibile unele optimizari ale cantitatii de memorie folosite, si nu in ultimul rand e un exercitiu de programare
  • Aici se gaseste o pagina cu TODO

Bibliografie/Resurse

Hardware

  • Exemplu interfatare ATmega – SD card (html)
  • Exemplu interfatare ATmega – SD card (romana, pag. 23) (pdf)
  • Exemplu interfatare ATmega – LCD (html)
  • Datasheet LCD(pdf)
  • Datasheet AVR ATmega16 – (pdf)
  • Regulator de tensiune reglabil LM317 Datasheet – (pdf)
    h2. Software