Table of Contents

Reportofon

Student: Purcareata Bogdan 331CA

Introducere

Functiile proiectului sunt:

Ideea de la care a pornit proiectul a fost inregistrarea si redarea vocii umane. Apoi m-am gandit sa ii fac si o interfatare cu un card SD, pentru a putea stoca mai multa informatie. Pentru ca fisierele sa fie compatibile si in exterior, am ales sa salvez fisierele in format .WAV. Ca sa nu fiu nevoit sa interactionez tot timpul cu un singur fisier audio, am pus si doua butoane de navigare - inainte, inapoi - pe langa cele doua de inregistrare si playback. Pentru a obtine un feedback din referitor la starea curenta, am interfatat si un display LCD de 16×2. In final, m-am gandit ca ar fi dragut sa ii pun si niste leduri care sa arate volumul streamului audio (la inregistrare sau playback).

Descriere generală

Inregistrarea vocii presupune conversia in digital a unui semnal analogic - cel produs de vibratiile corzilor vocale. Frecventele emise de vocea umana se incadreaza in spectrul 300 - 4000 Hz, si conform teoremei de esantionare, pentru a putea fi inregistrata corect, este necesara o frecventa de esantionare de cel putin 8000 de Hz. In aplicatie, pentru a mai compensa din pierderile de precizie datorate folosirii unei dimensiuni de 8 biti pe esantion, vocea se va inregistra cu o frecventa de 16kHz.

Proiectul urmareste pas cu pas specificatiile din Application Note AVR335: Digital Sound Recorder with AVR and DataFlash. Difera insa modalitatea de stocare a inregistrarii. Eu am optat pentru varianta unui card SD, intrucat mi-a fost mai usor sa il integrez pe placa de baza a proiectului.

Schema bloc:

Proiectul simuleaza functionalitatea unui player WAV cu optiune de inregistrare. Pe ecranul LCD va fi specificat titlul melodiei care este selectata, initial prima gasita pe cardul SD. VU-metrul va fi activ doar cand se inregistreaza sau se face playback, indicand nivelul semnalului transmis pe boxe / captat de la microfon. Pe parcursul executiei aplicatiei, userul interactioneaza cu butoanele de control pentru comanda acesteia.

Fiecare modul extern microcontroller-ului comunica direct cu acesta.

Toata logica de interactiune a modelelor este realizata in microcontroller.

Hardware Design

Design-ul hardware al proiectului porneste de la cablajul imprimat al primei etape. Pe acest montaj am adaugat cateva extensii pentru a implementa functionalitatile suplimentare.

VU metru

Componente:

LED-urile ocupa tot portul C al microcontroller-ului si sunt comandate in modul clasic, invatat la laborator.

LCD

Componente:

LCD-ul are un controller SED1278 si suporta modul de transmisie a datelor pe 4 biti. Are aceiasi pini ca si LCD-ul folosit la laborator. API-ul este acelasi cu cel de la laborator, cu mici diferente la sectiunea de initializare (este specificata in datasheet). Este mapat peste portul A al microcontroller-ului.

Atentie! La conectarea pinilor LCD-ului, pinul VO (Contrast Adjustement) trebuie legat la masa. Daca e lasat in aer, contrastul pe LCD este 0 si practic nu se va afisa nimic. E scris si in laborator, dar merita un reminder (eu nu am fost atent la acest aspect si asta m-a costat vreo 7 ore de debug).

Interfata de control

Componente:

Butoanele si LED-ul (care este aprins in modul de inregistrare) ocupa partial portul D. Pe placa de baza, pe portul D este conectata si interfata USB, deci trebuie de avut grija sa nu se foloseasca si acei pini, pentru ca acolo vine alimentarea placii.

Circuitele pentru amplificare si redare

Ambele folosesc un Quad Amplifier LM324, conform cu specificatia AVR335. Acesta este un integrat cu 14 pini, iar in circuitele de mai jos sunt numerotati pe intrarile si iesirile amplificatoarelor operationale.

Circuitul pentru microfon

Componente:

Amplificatorul pentru microfon este un inversor.

Circuitul pentru boxe

Componente:

Software Design

Software-ul a fost scris in Programmer's Notepad si compilat cu avr-gcc. Sistemul de operare a fost un Windows XP pe masina virtuala.

Module:

Algoritmul este prezentat in detaliu in Application Note AVR335.

Rezultate Obţinute

Proiectul este functional si “vrea sa fie” un reportofon cu afisaj LCD, vumetru si butoane de navigare.

Probleme aparute

  1. Sistemul de fisiere Petit FAT Filesystem nu are declarata o functie pentru crearea unui fisier. In comentariile din codul sursa al bibliotecii este mentionat in dreptul metodei pf_open() ca se pot crea noi fisiere folosind aceasta metoda. Cu toate acestea, cazul de utilizare nu este tratat in implementare, iar informatii pe site-ul oficial, pe forumul userilor sau oriunde altundeva on-line legate de acest subiect nu exista. Solutia pe care o doream pentru inregistrarea unei melodii era initial creearea unui fisier nou pe cardul SD. Intrucat sistemul de fisiere nu imi ofera aceasta facilitate, nu am posibilitatea sa pun unul mai elaborat pe microcontroller (nu se incadreaza in 16K) si problema a fost depistata prea tarziu, am gasit o solutie folosind suprascrierea. Astfel, cum in aplicatie in orice moment un fisier de pe card este selectat, la inregistrare continutul acestui fisier va fi (partial) inlocuit cu un nou continut. Este posibil ca aceste fisiere sa fie corupte - sa ramana date vechi la sfarsitul fisierului dupa ce s-a terminat scrierea noului continut. Daca aceste fisiere sunt deschise pe PC, va fi redat doar acest nou continut. Pe microcontroller, nu se tine cont de dimensiunea totala a fisierului (inclusa in header) si acesta se reda cat timp nu s-a ajuns la sfarsitul de fisier.
  2. O problema mai grava tine de latenta aparuta la scrierea pe cardul SD prin intermediul functiei pf_write() a sistemului de fisiere Petit FAT Filesystem. Datorita costului acestei operatii, la inregistrare se pierd cadre din bufferele locale (de dimensiune redusa), iar fisierul se inregistreaza intrerupt. La frecventa de 16kHz, proportia de buffere (a cate 256 de esantioane) scrise propriu-zis pe card este de 42%, iar la 4kHz de 61% (aici output-ul fiind neinteligibil). Problema a fost constatata tarziu si nu a fost remediata. O solutie ar fi ca, la inregistrare, esantioanele sa fie scrise intr-o zona de pe cardul SD separata de sistemul de fisiere (buffer temporar de dimensiune mare), unde acestea sa fie accesate direct prin SPI. Dupa ce inregistrarea s-a finalizat, datele vor fi copiate in sistemul de fisiere, fara niciun risc de pierdere. O alta solutie este montarea pe PCB a unui registru intre cardul SD si microcontroller, care sa implementeze hardware aceasta facilitate. Timpul scurt nu mi-a permis sa finalizez niciuna din aceste solutii.

Concluzii

Proiectul m-a ajutat sa fac un montaj propriu de la inceput pana la sfarsit. A fost primul meu pas in domeniul de procesare de semnale. Totodata, am atins multe din subiectele prezentate la laborator (LCD, intreruperi, timere, PWM, SPI, filesystem, fisiere WAV, UART - in faza initiala de debug, ADC), deci a fost o consolidare a acestor cunostinte care, foarte probabil, o sa ma ajute mult la examen. In plus, bucuria de a avea un reportofon / player WAV construit si programat de unul singur este infinita :-).

Download

Schema EAGLE a proiectului

Arhiva cu codul

Bibliografie/Resurse

Datasheet ATMega16

AVR 335 Application Note

Datasheet LCD

LCD Controller Technical Manual