Table of Contents

Dragoş PETRESCU (78078) - Bass Effects Processor

Autorul poate fi contactat la adresa:

Introducere

Scopul este de a crea un procesor de efecte de pentru chitara bass. Desi nu sunt profesionist, cant la chitara bass de cativa ani si simt nevoia unui procesor de efecte.

Ce face?

Transforma sunetul in semnal digital, il proceseaza, adaugandu-i diferite efecte si il transforma inapoi in semnal analogic.

Scop?

Transforma sunetul pentru a il face mai atractiv, diferit, sau poate mai potrivit unor anumite stiluri.

De unde am pornit?

Ma pregateam sa imi cumpar un procesor de efecte, am observat cat de scumpe sunt si mi-am dat seama ca eu as putea face unul de calitate acceptabila la un pret mult mai scazut.

De ce este util?

Toti muzicienii folosesc astfel de procesoare de efecte. Nu sunt foarte multi producatori, asa ca de multe ori acestia maresc artificial preturile.

Descriere generală

Jos se afla schema bloc si explicatiile aferente.

Filtrarea de intrare va elimina parte din zgomotul de fundal.

ADC imi va transforma semnalul din analog in digital.

ATMega-ul va realiza partea de procesare. Va avea cateva efecte pe care le va aplica.

Butoanele vor selecta tipul de efect dorit.

Potentiometrul va selecta diferiti parametrii ai efectului selectat.

LCD va afisa diferite informatii despre efecte.

DCA transforma semnalul in analog.

Filtrare iesire elimina parte din zgomotul de fundal si daca este nevoie ridica amplitudinea semanalului pentru a putea fi citita de amplificator.

Hardware Design

Bass-ul are un range intre 41.20Hz (E1) si 161Hz(E3) asa voi achizitiona un DAC si un ADC cu rezolutia de 24 biti si kSPS in jur de 200.

Nr piese Nume piesa Link
1 ATMega324 -
1 DAC http://ro.farnell.com/texas-instruments/pcm1781dbq/ic-24bit-stereo-audio-dac-16ssop/dp/1697150
1 LCD
5 Buttons

Control

Pentru a naviga prin meniul de setari, vor exista 5 butoane ce vor controla effectele si nivelurile acestora.


Afisaj

Pentru afisaj am folosit un LCD Text 2×16 ce are un controller Hitachi HD44780 similar celui de la laborator.


Intrare

Pentru obtinerea semnalului de la chitara nu voi folosi ADC-ul integrat in AtMega324 deoarece doresc sa obtin un semnal cat mai bun. Voi folosi ADC-ul integrat. Semnalul obitnut din chitara este in intervalul [-300mV, +300mV]. Voi folosi un filtru pentru a elimina sunetele nedorite.


Iesire

Pentru iesire voi folosi un DAC extern (MCP4725). Va comunica cu ATMega folosind Two-Wire Interface (TWI), standardul I2C. Fara prea multe batai de cap, acest standard (Fast mode) promite un bitrate de 400Kbps.

Comunicatia folosind TWI se realizeaza intr-o configuratie Master-Slave, unde AtMega324 este Master, iar DAC-ul MCP4725 este slave. Master-ul impune bitrate-ul folosind pin-ul SCL ce nu este altceva decat un semnal de ceas trecut printr-un prescaler, iar datele sunt transmise folosind pin-ul SDA.

In documentatia DAC-ul se gaseste un exemplu foarte intuitiv despre cum functioneaza interfata TWI in Fast-Mode pentru a da la iesire o tensiune in intervalul [0, VCC], in functie de cum sunt setati bitii de date.

Software Design

LCD

Pentru interfatarea cu LCD-ul, am pornit de la codul de la laboratorul 1, avand in vedere ca LCD-ul folosit in proiect are un controller identic cu cel de la laborator. Singura modificare necesara a fost identificarea port-urilor si pinilor la care se conecteaza LCD-ul pe placa de baza.

Codul pentru aceasta componenta se gaseste in fisierele lcd.h si lcd.c.

Meniul

Primeste inputul de la user prin butoane, afiseaza mesajul dorit (tip efect si nivelul acestuia) si schimba parametrii efectelor (mai mult sau mai putin efect, oprit, etc).

Butoane

Exista 5 butoane: Sus, Jos, Dreapta, Stanga si Cancel. Dreapta, Stanga → umbla prin meniul de efecte Sus, Jos → Schimba nivelul efectului (mai mult sau mai putin din acel efect) Cancel → revine in meniul principal

ADC

ADC-ul este configurat sa masoare in modul diferential, cu un gain de 1x, intre pinii PA1 si PA0 cu tensiune de referinta interna de 2.5V. Prescaler-ul este setat la 64, fapt ce implica o frecventa de masurare de aproximativ 250kHz. Pentru comoditate, ADC-ul este setat pe Auto-Trigger si Free-Running Mode. Practic, se va porni o conversie imediat dupa ce s-a terminat cea anterioara, fara sa fie nevoie setarea bit-ului ADSC.

Conform documentatiei, ADC-ul in mod diferential are un rezultat in intervalul [-512, 511], insa numerele negative sunt salvate in complement fata de 2.

  gather from ADC
  read_adc = ADC;
  //Twos Complement converter
  if (read_adc & _BV(9)) 
       read_adc = read_adc | ~(_BV(10) - 1);

DAC (TWI)

Implementarea TWI este realizata in fisierele twi.h si twi.c. Functia DAC_output(…) utilizeaza functiile TWI_* pentru a transmite date catre DAC, folosind protocolul din documentatia MCP4725.

Procesare audio

Fiecare efect implementat are o functie float apply_<effect>(float input). Toate functiile considera un sample de semnal in intervalul [-1, 1]. Mai multe efecte pot fi aplicate asupra unui sample de semnal (masurat cu ajutorul ADC-ului) doar prin inlantuirea acestor functii de efecte. Spre exemplu:

  input = apply_effect1(input);
  input = apply_effect2(input);
  return input;

Rezultate Obţinute

Ce am construit?

Concluzii

Am invatat multe lucruri despre microprocesoare dar si mai multe lucruri despre electronica din muzica. Eu sunt multumit de ce am obtinut din proiect.

Download

TODO: nu am terminat inca de implementat toate efectele

Jurnal

24.04.2018 - Achiziționare PCB + piese de bază

08.05.2018 - Lipit PCB

15.05.2018 - Am reusit sa folosesc LCD-ul si butoanele

20.05.2018 - Am reusit sa scot sunet de la un capat la celalat

prezent - Implementez efecte

Bibliografie/Resurse

Efecte 10_CM0268_Audio_FX.pdf

Probleme Ground watch

Cod dragos_basseffectsprocessor.zip