-
Notifications
You must be signed in to change notification settings - Fork 0
Home
ctalau edited this page Sep 13, 2010
·
9 revisions
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)
- 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
- Exemplu interfatare hardware card SD: AVR – card SD
- Exemplu interfatare harware LCD: AVR – LCD
- 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.
- Nu am gasit modele de LCD si de card SD pentru varianta de proteus de pe site.
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
- vim + make + avr-gcc + avrusbboot
- 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.
- 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
- 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
- Procyon AVRlib (driver mmc/sd) – Standford
- Formatul BMP (compresat RLE) – MSDN
- Specificatii FAT32 – Microsoft
- Explicatii FAT32 – pjrc
- Folosirea memoriei EEPROM – scienceprog