Procesor multi-efect pentru chitară

Introducere

Un procesor multi-efect pentru chitară este folosit pentru a modifica proprietățile semnalului capturat de dozele unei chitări cu scopul de a genera diverse sunete ce pot fi folosite în compoziții muzicale. Semnalul analog capturat de la chitară este transformat într-un semnal digital asupra căruia se aplică anumite operații. Rezultatul este convertit înapoi în semnal analog pentru a fi redat de către un difuzor. Procesul de transformare al sunetului vine totuși cu un compromis: dinamica sunetului și anumite nuanțe ale acestuia sunt ușor obturate în comparație cu pedalele de efect analogice. O unitate multi-efect însă este mai portabilă și mult mai accesibilă. După cum este și numită, poate genera mai multe efecte, le poate combina și aplica asupra sunetului, nu avem nevoie de câte o unitate separată pentru fiecare efect pe care vrem să îl generăm.

Descriere generală

Pentru construcția unui procesor multi-efect, voi folosi pe lângă placa de bază și componentele implicite un convertor digital-analog, 2 mufe de tip Jack 6.3mm pentru intrare și ieșire, un LCD pentru afișarea efectului curent, butoane pentru selectarea efectelor și un potențiometru de volum pentru reglarea semnalului la ieșirea din convertorul digital-analog.

Schema bloc

Hardware design

Lista de piese

Componentă Cantitate Observații
Placa de bază cu ATMega324 1
LCD Text 1
Mufă Jack 6.3mm Mamă 2
Potențiometru 1
Modul DAC 1

Afișare opțiuni și efect curent

Afișarea opțiunilor și a efectului curent se vor face printr-un LCD Text similar cu cel de pe plăcuța de laborator.

Selectare efect și control

Pentru selectarea efectului curent și a opțiunilor folosesc 4 butoane de control: Anulare, Selectare și 2 butoane de schimbare a opțiunii (stânga și dreapta).

Intrare

Sunetul trimis de la chitară va fi procesat de convertorul Analog - Digital integrat în microcontroller-ul de pe plăcuța de bază. Voi folosi un filtru trece sus (rezistență de 500 kΩ și un condensator de 4.7 nF) pentru a elimina frecvențele nedorite și voi lega ground-ul jack-ului de ground-ul plăcuței pentru reducerea zgomotului datorat măsurării semnalului.

Ieșire

Semnalul rezultat după procesare va fi trimis la un modul extern de conversie din semnal digital în semnal analog, iar apoi în alt filtru, dar unul trece jos (rezistență de 2 kΩ și condensator de 4.7nF) ce elimină frecvențe mai mari de 16 kHz. Pe lângă acestea, un potențiometru va fi prezent pentru controlul volumului.

Software design

Software-ul este format din următoarele părți: interacțiunea cu utilizatorul, ce constă în programarea butoanelor și a LCD-ului pentru afișarea efectului selectat, captura sunetului și redarea acestuia folosind convertorul analog-digital integrat în ATMega324 și modulul MCP4725 care se ocupă cu conversia semnalului digital în semnal analog și procesarea semnalului primit pentru a genera efectele.

Interacțiunea cu utilizatorul constă în generarea unei întreruperi la apăsarea butoanelor în urma căreia se verifică ce buton s-a apăsat și se schimbă variabila globală care păstrează efectul curent. Totodată se actualizează și ceea ce se afișează pe ecran, textul cu numele efectului curent. Pentru gestionarea LCD-ului se folosește biblioteca lcd din laboratoare, care are modificată configurația pinilor pentru a se potrivi cu placa de bază.

    /* check button presses */
    if (button_pressed) {

        if (!(PINB & (1 << PB0))) {
            current_effect = NONE;
            LCD_printAt(0x40, LCD_EMPTY_LINE); 
            LCD_printAt(0x40, "NO EFFECT");
        }

        if (!(PINB & (1 << PB1))) {
            current_effect = DISTORTION;
            LCD_printAt(0x40, LCD_EMPTY_LINE); 
            LCD_printAt(0x40, "DISTORTION");
        }

        if (!(PINB & (1 << PB2))) {
            current_effect = FLANGER;
            LCD_printAt(0x40, LCD_EMPTY_LINE); 
            LCD_printAt(0x40, "FLANGER");
        } 

        if (!(PINB & (1 << PB3))) {
            current_effect = TREMOLO;
            LCD_printAt(0x40, LCD_EMPTY_LINE); 
            LCD_printAt(0x40, "TREMOLO");
        }

        button_pressed = 0;
    }

Captura sunetului se realizează cu ajutorul întreruperilor. Codul principal rulat se află în întreruperea generată de ADC la captura sunetului unde se apelează funcțiile de procesare ale sunetului și unde se trimite semnalul procesat pentru a fi redat de modulul DAC. ADC-ul întoarce valori în intervalul [-512, 511], (numerele negative sunt întoarse în complement față de 2, înainte să lucrez cu ele fac o conversie).

    /* get input signal from adc output */

    adc_out = ADC;

    /* 
     * adc ouput value is in [-512, 511], but the negative numbers are
     * stored in two's complement, convert the number if negative
     *
     */

    if (adc_out & (1 << ADC_OUT_SIGN_BIT)) {
        adc_out |= ~((1 << ADC_OUT_SIGN_BIT) - 1);    
    }

    /* process input signal */ 
    processed_signal = (int16_t)(process_signal(((float) adc_out) / SIGNAL_MAX) * SIGNAL_MAX);
    
    processed_signal = processed_signal + SGN_MAX;

    /* send processed signal to dac */

    DAC_write(processed_signal);

Pentru procesare, valoarea capturată se normalizează și se aplică funcțiile pentru modificarea ei astfel încât să se genereze efectul respectiv. Pentru Tremolo și Flanger am configurat cele două timere ale microcontroller-ului pentru a genera oscilațiile sunetului. După ce se procesează valoarea, se aduce înapoi între intervalele înițiale.

Rezultate obținute

Cu toate că am introdus filtre în circuit, nu am scăpat de tot zgomotul, acesta încă este deranjant. Dar pentru acest proiect, consider că rezultatul obținut este destul de bun. Efectele sună corespunzător, am învățat multe din acest proiect.

Bibliografie și resurse

pm/prj2019/adragan/guitar-multi-effects-proc.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