Alexandru Cătălin CALOTESCU - VU METER pe LCD 2x16

Autorul poate fi contactat la adresa: Login pentru adresa

Proiectul a pornit din placerea mea pentru a asculta muzica. Practic acest dispozitiv citeste banda de frecvente dintr-o melodie si o reda in functie de intensitate pe LCD.

Initial voiam sa iau inputul direct de la jack-ul din placa de sunet, apoi sa aplic FFT pe el si sa descompun in 16 benzi de frecventa pentru a face jocul de lumini, insa n-am reusit acest lucru, modificand proiectul pentru a citi ritmul deja descompus dintr-un fisier.

Nu stiu cat de util este pentru altii, dar pentru mine, ca pasionat pentru muzica, mi se pare un accesoriu foarte bun in analiza unei melodii, el putand sa creeze un efect foarte placut vizual.

Introducere

La conectarea placutei la alimentare se va afisare un mesaj de Loading timp de aproximativ 2 secunde dupa care mesajul “Press button…” dupa care se asteapta apasarea unui buton pentru a incepe redarea pe LCD.

LCD-ul se aprinde pe toate cele 16 regiuni din functie de frecventa redata.

Descriere generală

Am montat LCD-ul pe port C. Conform schemei. Alimentarea de la LCD (VCC - port 2) este conectata la microcontroler la AVCC(port 30), iar GND (port 1 - LCD) la AGND(port 31 - microcontroler).

Backlight-ul de la LCD (port A si K) le-am conectat la AVCC si AGND.

Portul de contrast l-am conectat prin potentiometru la AVCC si AGND pentru a regla intensitatea.

Hardware Design

Componente electronice:

  1. LCD WinStar WH1602B 2×16.
  2. Placuta de la etapa 1.
  3. 1 potentiometru B5k.
  4. jack 3.5mm stereo.
  5. placuta auxiliara pentru LCD.
  6. conectori.

Software Design

Implementare:

Am plecat de la biblioteca pentru LCD din laboratorul 1, la care am mai adaugat niste functii de afisare a caracterelor custom. Am salvat 8 caractere custom in CGRAM pentru a le folosi mai tarziu la crearea efectelor de la vu-meter.

Am salvat apoi intr-un vector de charuri o melodie descompusa in frecvente folosind utilitarul wav2c ce transforma o melodie din formatul .WAV in acel vector.

Functionalitate:

Citesc vectorul de charuri din fisier, il impart pe 16 benzi de frecventa si fiecare frecventa are 16 niveluri de intensitate. In functie de aceste date se completeaza un vector cu indicii caracterelor custom ce vor fi afisate pe ecran, apoi va fi parcurs acest vector pentru a-l scrie pe LCD.

La fiecare citire din vector dau un clear-screen pentru a relua procesul de la capat. Pentru a afisa melodia corect pun un delay de 100 de ms la fiecare afisare.

Mediu de dezvoltare, biblioteci, functii implementate:

Pentru programare am folosit Programmers Notepad, WinAVR pentru compilare si bootloaderul pus la dispozitie pentru laborator.

Fisiere:

  1. lcd.c, lcd.h - biblioteca LCD-ului din laboratorul 1
  2. pm_project.c - functiile definite de mine si main-ul
  3. music.h - contine sample-ul din melodie.

Functii implementate:

  1. void save_custom_chars() - pune in CGRAM caracterele custom
  2. int generate_vector(int matrix) - returneaza o matrice random de frecvente (testare)
  3. int read_sample(int matrix, int index) - returneaza matricea de frecvente citita din fisier cu functia pgm_read_byte() aflata in biblioteca include <avr/pgmspace.h>
  4. void load_function() - afiseaza un mesaj si face o animatie.

Rezultate Obţinute

Am reusit sa citesc fisierul de date si sa redau frecventele pe LCD.

Placuta finala:

Playing:

Afisajul:

Concluzii

Desi proiectul nu se foloseste de outputul de la placa de sunet (prin jack-ul de 3.5mm), sunt multumit ca l-am putut duce la capat citind frecventele din fisier.

Proiectul a fost interesant, nu foarte greu, dar implica multa rabdare si cautare pe internet.

Download

Bibliografie/Resurse

pm/prj2013/dtudose/vu-meter.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