This is an old revision of the document!
Cristina Grigore
AM ales acest proiect deoarece (daca va fi functional ) imi va fi extrem de folositor atat in practica cat si pentru a intelege mai bine cum functioneaza procesoarele de sunet din comert.
Primul amplificator operational de pe TL082 realizeaza o amplificare de tensiune destul de mare, aduce semnalul de la chitara la “line level” si il inverseaza. Cand iese semnalul din op amp este impartit in 2 intre inputul Arduino-ului si butonul de clean/semnal ne-distorsionat.
Inputul de la Arduno ia semnalul audio de la chitara si il comprima la aprox 1.2V pt ca asa este configurat pinul AREF. Dupa asta, semnalul e trimis la pinul 0 si e converit la digital prin ADC-ul inclus in Arduino.
La pinul analog A3 e conectat un potentiometru de 100k, iar la A2 switch-ul rotativ cu 10 pozitii. Switch-ul rotativ cu 6 pozitii care functioneaza similar cu un potentiometru, dar fiecare pozitie are o rezistenta discreta asociata cu el. In functie de ce pozitie selectez, se va crea un divizor de tensune diferit.
Pentru crearea efectelor: outputul de la Arduino se leaga cu un potentiometru conectat la al 2-lea amplificator operational de pe TL082 care se ocupa de mixatul semnaluilui si il inverseaza din nou. De aici semnalul mai trece printr-un condensator si dupa la jack-ul de output.
Output-ul Arduino-ului e conectat cu un potentiometru de 100k care intra in cel de-al 2-lea amplificator operational din TL082. Acest potentiometru este folosit impreuna cu semnalul clean de la celalalt potentiometru 100k. Acesta mixeaza cele 2 semnale intr-unul singur pe care il inverseaza pentru a-l aduce in faza cu semnalul original provenit de la chitara. De aici semnalul trece printr-un condensator de 1uF si catre jack-ul de output.
In etapa de setup, configurez Timer-ul 1 si Timer-ul 2 pe fastPWM 8-bit inverting, prescaler 2, duty cycle 0. Configurez ADC-ul: tensiunea de referinta la 1.1V si prescaler-ul la 32.
Pentru citirea input-ului de la utilizator citesc valoarea de pe pinul A2 pentru pozitia switch-ului rotativ si obtin o valoare discreta(variabila mode
). pentru fiecare dintre cele 9 pozitii, desi am ales sa implementez doar 2 efecte pentru 2 pozitii din considerente de lipsa de memorie.
Variabila fx
contine inputul de pe potentiometrul P3 ce ajusteaza intensitatea efectului.
void readKnobs(){ mode = analogRead(2); //dividing by 75 ensures proper discrete values //for if statements above mode = mode / 75; fx = analogRead(3); }
Am ales sa implementez 2 efect: un delay si un overdrive.