Гитарная педаль на Arduino Uno – pedalSHIELD UNO

Добавлено 27 ноября 2018 в 07:42

pedalSHIELD UNO – это программируемая гитарная педаль на Arduino UNO. С ней вы можете создавать свои собственные эффекты и цифровые звуки.

Гитарная педаль на Arduino Uno – pedalSHIELD UNO
Гитарная педаль на Arduino Uno – pedalSHIELD UNO

О проекте

pedalSHIELD UNO – это lo-fi программируемая гитарная педаль, которая работает с платами Arduino UNO / Genuino UNO. Это Open Source & Open Hardware проект для гитаристов, хакеров и программистов, которые хотят узнать о цифровой обработке сигналов, эффектах, синтезаторах и прочих экспериментах без глубоких знаний о DSP, электронике или низкоуровневом программировании.

Вы можете запрограммировать свои собственные эффекты на C/C++ или использовать готовые эффекты с форума.

Программируемая гитарная педаль Arduino pedalSHIELD UNO
Программируемая гитарная педаль Arduino pedalSHIELD UNO

Как работает схема?

Плата расширения состоит из трех частей:

  • входной каскад: усиливает и фильтрует сигнал с гитары, что делает его готовым для аналого-цифрового преобразователя Arduino Uno;
  • плата Arduino: использует оцифрованный сигнал с АЦП и выполняет всю цифровую обработку сигнала (DSP),создавая эффекты (distortion, fuzz, громкость, метроном...);
  • выходной каскад: после создания новой формы сигнал поступает с цифровых выходов Arduino (два объединенных ШИМ выхода) и подготавливается к отправке на следующую педаль или гитарный усилитель.
Входной и выходной каскады гитарной педали
Входной и выходной каскады гитарной педали

Технические параметры

  • На базе Arduino / Genuino UNO (16 МГц, 2 KB RAM).
  • Аналоговые каскады на операционном усилителе «rail-to-rail» TL972.
  • АЦП: 10 бит.
  • Выходной каскад: 16 бит (2 x 8 бит ШИМ, работающих параллельно).
  • Интерфейс:
    • 2 настраиваемые кнопки;
    • 1 настраиваемый переключатель;
    • 1 программируемый синий светодиод;
    • ножной переключатель обхода.
  • Разъемы:
    • входной разъем, TRS 1/4" (1/4 джек), несимметричный, Zвх = 0,5 МОм;
    • выходной разъем, TRS 1/4" (1/4 джек), несимметричный, Zвых = 0,1 Ом;
    • Источник питания: питание берется с платы Arduino Uno.

Готовые примеры эффектов

  • Clean/Transparent
  • Volume/Booster
  • Distortion
  • Fuzz Distortion
  • Bit-Crusher
  • Daft Punk Octaver
  • Signal Generator
  • Metronome
  • Delay
  • Tremolo

Как программировать педаль?

Идея состоит в том, чтобы сделать программирование максимальным простым, плата программируется на C/C++ с использованием стандартных функций и среды разработки Arduino. Все инструменты и программы являются бесплатными / с открытым исходным кодом.

Ниже показана связь интерфейсов гитарной педали (вход/выход, элементы управления) с выводами платы Arduino Uno.

Связь интерфейсов платы расширения гитарной педали с Arduino Uno
Связь интерфейсов платы расширения гитарной педали с Arduino Uno

Необходимы базовые знания C. Лучший способ проиллюстрировать, как программировать педаль – это показать простой пример педали с эффектом Volume/Booster.

Педаль Громкость/Booster

Структурная схема программы выглядит так:

Структурная схема программы
Структурная схема программы

Реально используемый код выглядит так:

// CC-by-www.Electrosmash.com
// Based on OpenMusicLabs previous works.
// pedalshield_uno_booster.ino: нажатие кнопки 1 или кнопки 2 увеличивает или уменьшает громкость.
 
// определение аппаратных ресурсов.
#define LED 13
#define FOOTSWITCH 12
#define TOGGLE 2
#define PUSHBUTTON_1 A5
#define PUSHBUTTON_2 A4
 
// определение выходных параметров ШИМ
#define PWM_FREQ 0x00FF // частота ШИМ - 31.3 кГц
#define PWM_MODE 0      // Fast (1) или Phase Correct (0)
#define PWM_QTY 2       // 2 ШИМ параллельно
 
// другие переменные
int input, vol_variable=512;
int counter=0;
unsigned int ADC_low, ADC_high;
 
void setup() 
{ // настройка входов/ выходов и подтягивающих резисторов
  pinMode(FOOTSWITCH, INPUT_PULLUP);
  pinMode(TOGGLE, INPUT_PULLUP);
  pinMode(PUSHBUTTON_1, INPUT_PULLUP);
  pinMode(PUSHBUTTON_2, INPUT_PULLUP);
  pinMode(LED, OUTPUT);
  
  // Настройка АЦП - настроен для чтения автоматически.
  ADMUX = 0x60;  // левое выравнивание, adc0, внутренний vcc
  ADCSRA = 0xe5; // включить adc, ck/32, автозапуск
  ADCSRB = 0x07; // захват t1 для запуска
  DIDR0 = 0x01;  // выключить цифровые входы для adc0
 
   // настройка ШИМ
  TCCR1A = (((PWM_QTY - 1) << 5) | 0x80 | (PWM_MODE << 1));
  TCCR1B = ((PWM_MODE << 3) | 0x11); // ck/1
  TIMSK1 = 0x20; 
  ICR1H = (PWM_FREQ >> 8);
  ICR1L = (PWM_FREQ & 0xff);
  DDRB |= ((PWM_QTY << 1) | 0x02); // включить выходы
  sei(); // включить прерывания - на самом деле с arduino необязательно
}
 
void loop()
{
  // Включить светодиод, если эффект включен.
  if (digitalRead(FOOTSWITCH)) 
    digitalWrite(LED, HIGH);
  else  
    digitalWrite(LED, LOW);
  //здесь больше ничего нет, всё происходит в прерывании Timer 1.
}
 
ISR(TIMER1_CAPT_vect) // прерывание Timer 1
{
  // прочитать данные входного сигнала АЦП: 2 байта, старший и младший
  ADC_low = ADCL;    // младший байт должен быть прочитан первым
  ADC_high = ADCH;
  // собрать входной сэмпл, сложив младший и старший байты АЦП
  input = ((ADC_high << 8) | ADC_low) + 0x8000; // получить знаковое 16-битн. значение
 
  // проверить кнопки:
  counter++; // для экономии ресурсов кнопки проверяются каждый 100-ый раз
  if(counter==100)
  {
    counter=0;
    if (!digitalRead(PUSHBUTTON_1)) 
    {
      if (vol_variable<1024) 
        vol_variable=vol_variable+1; // увеличить громкость
    }
    if (!digitalRead(PUSHBUTTON_2)) 
    {
      if (vol_variable>0) 
        vol_variable=vol_variable-1; // уменьшить громкость
    }
  }
 
  // амплитуда сигнала изменена по переменной vol_variable, используя функцию Arduino map
  input = map(input, 0, 1024, 0, vol_variable);
 
  // записать выходной ШИМ сигнал
  OCR1AL = ((input + 0x8000) >> 8); // преобразовать в беззнаковый формат, отправить старший байт
  OCR1BL = input; //  отправить младший байт
}

Аппаратная конструкция pedalSHIELD UNO

Весь проект педали с открытыми исходниками, разработка была выполнена с помощью KiCad, бесплатного открытого инструмента проектирования электроники. Все файлы проекта, схемы и перечни элементов являются общедоступными. Схема может быть разбита на 5 простых блоков: источник питания, входной каскад, выходной каскад, пользовательский интерфейс и разъемы Arduino.

Программируемая гитарная педаль Arduino pedalSHIELD UNO. Схема электрическая принципиальная
Программируемая гитарная педаль Arduino pedalSHIELD UNO. Схема электрическая принципиальная

Принцип действия прост; 1 операционный усилитель готовит сигнал для оцифровки, а другой операционный усилитель принимает сигнал с микроконтроллера Arduino UNO. Один АЦП используется для считывания сигнала гитары, и два ШИМ сигнала используются для генерации выходного сигнала.

  • Входной каскад: для лучшего захвата сигнал гитары усиливается с помощью первого операционного усилителя. Потенциометр VR1 регулирует коэффициент усиления этого усилителя от 1 до 21 так, чтобы уровень с гитары мог быть оптимизирован для оцифровки. Сигнал проходит через 3 фильтра нижних частот (сформированных из R3 и C2, R5 и C4, R6 и C5), которые устраняют избыток высших гармоник, которые могут создавать наложение во время выборки сигнала аналого-цифровым преобразователем (fср = 5 кГц).
  • Выходной каскад: использует фильтр нижних частот Саллена-Ки третьего порядка, который устраняет гармоники выше 5 кГц. Два ШИМ сигнала используются параллельно, увеличивая разрядность (2 x 8 бит).
  • Источник питания: для питания операционного усилителя «rail-to-rail» педаль использует +5В от Arduino Uno, что обеспечивает простоту конструкции и максимальное раскачивание сигнала без обрезки. Резисторный делитель R7 и R8 создает 2,5 В для виртуальной земли, а конденсатор C6 удаляет пульсации на линии питания.
  • Пользовательский интерфейс: музыкант может использовать 2 настраиваемые кнопки, 1 настраиваемый переключатель, ножной обходной переключатель 3PDT и программируемый светодиод.
  • Разъемы Arduino Uno: штыревые разъемы соединяют плату расширения с Arduino Uno, передавая сигналы и напряжение питания.

Список компонентов

Это компоненты сквозного монтажа, которые легко найти.

Список компонентов программируемой гитарной педали pedalSHIELD UNO
Позиционное обозначениеКоличествоНаименование/номиналОписаниеНомер детали
Конденсаторы
C5,C2, C7, C8, C956,8 нФкерамический конденсаторSR211C682MARTR1
C3, C6, C1034,7 мкФэлектролитический конденсаторECE-A1EKA4R7
C1, C112100 нФкерамический конденсаторSR211C104KARTR1
C41270 пФкерамический конденсаторD271K20Y5PH63L6R
Резисторы
R12,R13, R10, R9, R6, R4, R374,7 кОмРезистор, 1%, 0,25 ВтMFR-25FRF52-4K7
R5, R7, R8,3100 кОмРезистор, 1%, 0,25 ВтMFR-25FRF52-100K
R1, R221 МОмРезистор, 1%, 0,25 ВтMFR-25FRF52-1M
R1111,2 МОмРезистор, 1%, 0,25 ВтMFR-25FRF52-1M2
Прочее
RV11500 кОмПодстроечный потенциометр3319W-1-504
D11Светодиод 3 мм, синийСиний светодиод 3 ммSSL-LX3044USBC
U11TL972 DIP8Операционный усилитель «rail-to-rail»595-TL972IP
Панель для микросхемы1Панель DIP8Панель DIP81-2199298-2
SW113DPT ножной переключатель3PDT ножной переключатель107-SF17020F-32-21RL
SW21ТумблерSPDT тумблер612-100-A1111
SW3, SW42Кнопкакнопка вкл/выкл103-1013-EVX
Conn1,2,3,41Разъем 40-выводныйШтыревой разъем с шагом 2,54710-61304011121
J1, J22TRS 1/4" (1/4 джек аудио)Стерео джек 6,35 ммNMJ6HCD2

Печатная плата

Хотя разработчики и утверждают, что это полностью открытый проект, но упорно не желают делиться файлами разводки печатной платы для какой-либо САПР (например, для того же KiCad, в формате которого они предоставляют принципиальную схему).

Поэтому для изготовления педали есть три варианта:

  1. заказать у разработчиков либо только печатную плату, либо весь набор для сборки педали (ссылка на сайт разработчиков будет в конце статьи);
  2. изготовить печатную плату по экспортированному в pdf-файл трафарету (предоставлен разработчиками) с помощью «лазерно-утюжной» технологии; ссылки для скачивания архивов с проектом в KiCad и трафаретами печатной платы будут приведены ниже;
  3. развести печатную плату в удобной для вас САПР и под компоненты, которые вы предпочитаете, или которые у вас есть в наличии (и, возможно, поделиться результатами с остальными ;-) ).
Внешний вид печатной платы pedalSHIELD UNO и расположение компонентов
Внешний вид печатной платы pedalSHIELD UNO и расположение компонентов

Часто задаваемые вопросы (FAQ)

pedalSHIELD Uno совместима со всеми платами Arduino?

Нет, только с Arduino Uno и Genuino Uno.

pedalSHIELD Uno подходит для басистов?

Да, но вам необходимо заменить 2 конденсатора (C1 и C11) с 0,1 мкФ на 0,47 мкФ, чтобы пропускать через схему более низкие частоты.

Могу я включить наушники напрямую в pedalSHIELD Uno?

Нет, pedalSHIELD Uno – это не усилитель. Её необходимо включть в гитарный усилитель или в педаль мультиэффектов (например, Line 6 pods и т.п.).

Вот и всё! Делитесь впечатлениями и результатами сборки!

Теги

ADC / АЦП (аналого-цифровой преобразователь)ArduinoArduino ShieldArduino UnoDAC / ЦАП (цифро-аналоговый преобразователь)DSP / ЦОС (цифровая обработка сигналов)PWM / ШИМ (широтно-импульсная модуляция)Гитарная педальПлата расширенияЭлектрическая бас-гитараЭлектрогитара

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.


  • 2021-11-21Boris Latysh

    Судя по даташиту вроде можно. Но я не совсем понимаю зачем. Цена вопроса "2 коп".
    TL972 работает очень неплохо ( в данной схеме ).
    Для проверки 100% поменять можно, но для хорошего звука лучше взять TL972.

  • 2021-09-13Андр

    Можно ли заменить TL972 на ОУ TS972? Кто-то сталкивался с такой микросхемой?

  • 2021-04-09Vladimir Nikolaevich

    Интересно!!! Попробуйте JRC4558 (режимы от 4 В). Все-таки она более "гитарная" что-ли... LM358 как-то больше для микрофонов в предусилителях используется. Если попробуете, отпишите про результат.

  • 2020-11-26Boris Latysh

    Учитывая опыт передовых стран решил все собрать на одной плате. Из за "VGA" монитора в мой корпус не поместились разъемы под Аудио ВХ / ВЫХ. Пришлос проявить "Смекалку". Но в общем получилось так.:
    Плата спроектирована под конкретный (мой) прочный силуминовый корпус. Контакты для подключения Аудио коннекторов расположены возле переключателя.
    Максимально применил дешевые китайские модули для Arduino.

    https://uploads.disquscdn.c...

  • 2020-11-07Boris Latysh

    Спасибо.
    Я схему немного доработал.
    С эффектами пока провожу бесчеловечные опыт на компьютере.
    Пару дней все систематизирую и отправлю на адрес - radioprog@gmail.com

  • 2020-11-05antzol

    Ок, давайте так и сделаем.
    Высылайте оставшиеся материалы, а я всё это оформлю и включу в эту статью.

  • 2020-11-03Boris Latysh

    Я не смогу так же качественно оформить материал как в этой статье. На сегодня я могу предоставить схему, разводку платы (в формате EasyEDA) и код программы. (собственно я уже это сюда и выложил).
    Было бы конечно очень здорово чтобы эти результаты можно было включить в данную статью как дополнительный материал или хотя бы убрать мои лишние ответы с промежуточными решениями.

  • 2020-11-02antzol

    Борис, здравствуйте!
    Раз уж ваше развитие этого проекта начинает жить своей жизнью, то не хотите опубликовать его в собранном виде, чтобы ваши дополнения не потерялись с комментариями disqus?
    Если интересно, то предлагаю переместить разговор в почту. radioprog@gmail.com

  • 2020-11-02Boris Latysh

    Ссылка на TL972
    https://aliexpress.ru/item/...

    Прграмма опубликованная в стате и та что выложил я - Рабочие на 100% НО!!!!!
    Прграма неотделима от СХЕМЫ. То есть:
    Какая будет реализована СХЕМА, такую нужно и взять ПРГРАММУ.

  • 2020-10-31Линар Сабирзянов

    Нифига не шарю в С++ . Скачать бы все одним скетчем и ссылку на покупкTL972, а то везде 072 предлагают. Может на руках есть у кого. Я из Москвы

  • 2020-10-12Boris Latysh

    Я сделал под заказ педаль для бас гитары.
    Собственно говоря применение экрана и органов управления (транскодер) позволяют расширить количество эффектов.
    Ограничено:
    - временем между опросом АЦП ~10 ms
    -объём внутренней памяти Arduino NANO (в данном варианте я использую меньше половины)
    Схема 100% рабочая и собирает оцифрованный сигнал вполне прилично.
    Теперь вопрос за разработкой ПО. Я в общем не музыкант, так наугад несколько эффектов сварганил. Но пока не проверял (нет инсрумента и времини).
    Так что если есть идей реализации варианта эффекта то можно пробовать. Пока не придумал как сделать "Октавер" (думаю).

  • 2020-10-11Иван

    планируется дальнейшее развитие проекта?

  • 2020-09-24Boris Latysh

    Да, пересылать информацию в рамках данной платформы несколько затруднительно.
    Skype - boris_latysh

  • 2020-09-23Егор

    Как с вами можно связаться по поводу платы?

  • 2020-09-23Егор

    Готов купить плату, куда вам удобней написать для обсуждения данного вопрсоа?

  • 2020-09-23Егор

    А на каком сайте заказывать плату и как её туда загрузить (какую папку)?

  • 2020-09-17Boris Latysh

    TL072 минимальное питание +3,5в, -3,5в то есть минимальное общее питание для нее - 7в. TL072 использовать можно, НО нужно будет делать дополнительное питание.
    TL972 можно полностью питать 5в, я думаю потому ее и применили. А учитывая что нам нужно зайти в контроллер сигналом амплитудой 0-5в. То в такой ситуации c TL072 будут дополнительные сложности с согласованием сигнала от операционника к входу АЦП контроллера.

  • 2020-09-15Boris Latysh

    Пиши в Личку. Отправлю текст

  • 2020-09-15Boris Latysh

    "Коментарии" не всегда соответствуют коду, так как программа пока в работе.
    Я в стендовых условиях все проверил работает отлично. НО ... на реальном инструменте пока не тестировал.
    P.S. Есть готовая плата под эту схему. Если кому нужно могу продать.

  • 2020-09-15Boris Latysh


    // Based on OpenMusicLabs previous works.
    // Цифровой усилитель: нажатие кнопки 1 или кнопки 2 увеличивает или уменьшает громкость.

    #include <iarduino_encoder_tmr.h> // Подключаем библиотеку iarduino_Encoder_tmr для работы с энкодерами через аппаратный таймер
    #include "U8glib.h"

    #define FootSwitch 12 // Нажатие "Ножной" кнопки ВКЛ/ВЫКЛ устройсва
    #define MasterPin 5 // D5 мастер кнопка переключатель режимов
    #define CLKPin 2 // CLK Провод Енкодера
    #define DTPin 3 // DT провод Енкодера

    iarduino_Encoder_tmr enc(CLKPin, DTPin); // Енкодер
    U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
    // ------------- ШИМ ---------------------------------------------------------------
    #define PWM_FREQ 0x00FF // установка частоты ШИМ-а (режим Фазовый - 2х8 Бит 31.3 кГц)
    #define PWM_MODE 0 // Устанавливает режим коррекции фазы (0) или быстрый режим (1)
    #define PWM_QTY 2 // Используем 2 ШИМ-а параллельно 2х8 Бит
    // ------------- АЦП - ЦАП ---------------------------------------------------------
    int output = 0; // Задаем значение громкости
    unsigned int ADC_low, ADC_high; // Младший и Старший байты из АЦП
    // -------------- Энкодер + кнопка -------------------------------------------------
    #define Clk 100 // Колличество повторений между проверками кнопки
    int Cirkle = 0; // Перменная Счетчика циклов пропуска
    int Master = 0; // перменная выбора режима работы
    // ---------------------------------------------------------------------------------
    int Dist = 8; // Коэффициент для Дистошн
    double Dist1 = 0;
    // ---------------------------------------------------------------------------------
    int Over = 8; // Коэффициент для Овердрайва
    // ---------------------------------------------------------------------------------
    int Horus[256]; // Horus эффект
    byte x = 0;
    byte y = 0; // перменная массива 0 - 256
    byte z = 0;
    // ---------------------------------------------------------------------------------
    int t = 30; // Compressor эффект
    // ---------------------------------------------------------------------------------
    int El = 15; // Electro
    int con = 0;
    int con1 = 0;

    void setup(){
    // Serial.begin(9600);
    enc.begin(); // Инициируем работу с энкодером

    pinMode(FootSwitch, INPUT_PULLUP);
    pinMode(MasterPin, INPUT_PULLUP);
    //----------------------Настройка АЦП - настроен для чтения автоматически. ------------------
    ADMUX = 0x60; // внутренний ИОН 1.1 В, правое выравнивание, управление по ADC0,
    ADCSRA = 0xe5; // включить ADC, автозапуск, 5 - clk 1/32 - ПОДБИРАЕМ
    ADCSRB = 0x07; // без мультиплексора, запуска захват таймером Т1
    DIDR0 = 0x01; // разрешаем ТОЛЬКО аналоговый вход ADC0
    //--------------------- настройка ШИМ -------------------------------------------------------
    TCCR1A = (((PWM_QTY - 1) << 5) | 0x80 | (PWM_MODE << 1));
    TCCR1B = ((PWM_MODE << 3) | 0x11); // clk_io/1 (нет деления) Делитель тактовой частоты 16 МГц
    TIMSK1 = 0x20;
    ICR1H = (PWM_FREQ >> 8);
    ICR1L = (PWM_FREQ & 0xff);
    DDRB |= ((PWM_QTY << 1) | 0x02); // включить выходы
    sei(); // включить прерывания - на самом деле с arduino необязательно
    }

    void loop() {
    Cirkle = Cirkle + 1;
    while (Cirkle == Clk) {
    if (digitalRead(FootSwitch)==HIGH) {
    switch(Master){
    case 0:
    u8g.firstPage();
    do {
    u8g.setFont(u8g_font_helvR18r);
    u8g.drawStr( 3, 20, "KL BoosT");
    u8g.drawStr( 18, 50, "CLEAN");
    if (output < -25000) {
    u8g.drawBox(0,56,8,8);
    }
    if (output > 25000) {
    u8g.drawBox(112,56,8,8);
    }
    // u8g.drawBox(0, 60, (output/256),4);
    } while (u8g.nextPage());
    if ((digitalRead(MasterPin)) == LOW ) {
    Master = Master + 1;
    delay (500);
    }
    break;
    case 1:
    Dist = Dist + enc.read(); // Если энкодер зафиксирует поворот, то значение переменной i изменится:
    if ( Dist <10 ) { Dist = 10; }
    if ( Dist >26 ) { Dist = 26; }
    u8g.firstPage();
    do {
    u8g.setFont(u8g_font_helvR18r);
    u8g.drawStr( 3, 20, "KL BoosT");
    u8g.drawStr( 31, 50, "FUZZ");
    u8g.drawBox(0,60,((Dist-10)*9),4);
    } while (u8g.nextPage());
    if ((digitalRead(MasterPin)) == LOW ) {
    Master = Master + 1;
    delay (500);
    }
    break;
    case 2:
    Over = Over + enc.read(); // Если энкодер зафиксирует поворот, то значение переменной i изменится:
    if ( Over < 0) { Over = 0; }
    if ( Over >26 ) { Over = 26; }
    u8g.firstPage();
    do {
    u8g.setFont(u8g_font_helvR18r);
    u8g.drawStr(3, 20, "KL BoosT");
    u8g.drawStr(8, 50, "Overdrive");
    u8g.drawBox(0,60,(Over*5),4);
    } while (u8g.nextPage());
    if ((digitalRead(MasterPin)) == LOW ) {
    Master = Master + 1;
    delay (500);
    }
    break;
    case 3:
    y = y + enc.read()*10; // Если энкодер зафиксирует поворот, то значение переменной i изменится:
    u8g.firstPage();
    do {
    u8g.setFont(u8g_font_helvR18r);
    u8g.drawStr(3, 20, "KL BoosT");
    u8g.drawStr(24 , 50, "Chorus");
    u8g.drawBox(0,60,(y/2),4);
    } while (u8g.nextPage());
    if ((digitalRead(MasterPin)) == LOW ) {
    Master = Master + 1;
    delay (500);
    }
    break;
    case 4:
    t = t - enc.read(); // Если энкодер зафиксирует поворот, то значение переменной i изменится:
    if ( t <10 ) { t = 10; }
    if ( t >30 ) { t = 30; }
    u8g.firstPage();
    do {
    u8g.setFont(u8g_font_helvR18r);
    u8g.drawStr(3, 20, "KL BoosT");
    u8g.drawStr( 4, 50, "Compress");
    u8g.drawBox(0, 60, ((30-t)*6),4);
    } while (u8g.nextPage());
    if ((digitalRead(MasterPin)) == LOW ) {
    Master = Master + 1;
    delay (500);
    }
    break;
    case 5:
    El = El + enc.read(); // Если энкодер зафиксирует поворот, то значение переменной i изменится:
    if ( El < 1 ) { El = 1; }
    if ( El > 64 ) { El = 64; }
    u8g.firstPage();
    do {
    u8g.setFont(u8g_font_helvR18r);
    u8g.drawStr(3, 20, "KL BoosT");
    u8g.drawStr( 15, 50, "Electro");
    u8g.drawBox(0, 60, (El*2), 4);
    } while (u8g.nextPage());
    if ((digitalRead(MasterPin)) == LOW ) {
    Master = Master + 1;
    delay (500);
    }
    break;
    }
    if (Master > 5 ) {
    Master=0;
    delay (500);
    }
    //---------------------------------------------------------------------------------------------
    } else { // устройсво электрически не включено
    u8g.firstPage();
    do {
    u8g.setFont(u8g_font_helvR18r);
    u8g.drawStr( 2, 20, "KL BoosT");
    u8g.drawStr( 42, 64, "OFF");
    } while (u8g.nextPage());
    }
    Cirkle = 0;
    }
    }
    //************* Обработчик прерывания захвата ввода из АЦП 0 - Timer 1
    ISR(TIMER1_CAPT_vect) // Команда обработки прерывания Timer 1
    {
    ADC_low = ADCL; // читаем младший байт АЦП прочитан первым ( важно! )
    ADC_high = ADCH; // читаем старший байт АЦП прочитан вторым
    output = ((ADC_high << 8) | ADC_low) + 0x8000; // Собираем 16-битн. из 2-х байт полученных в АЦП
    //-----------------------------------------------------------------------------------------
    switch(Master){
    case 1: // Distortion эффект ******
    if (output > 0) {
    if (output > 24576) {output = 24576;}
    output = (output/10)*Dist; // Все что выше 24576 удваиваем и обрезаем по уровню (65535)
    if(output < 0) { output = 32767; }
    }
    if (output < 0) {
    if (output < -24576) {output = -24576;}
    output = (output/10)*Dist; // Все что ниже -24576 удваиваем и обрезаем по уровню (0)
    if(output > 0) { output = -32767; }
    }
    break;
    //-----------------------------------------------------------------------------------------
    case 2: // OverdrivE Эффект ******
    if (output > 24576 || output < -24576) {
    if (output > 24576){
    output = output - ((output - 24576)/8)*Over; // Все что больше 57344 Уменьшаем на Over
    }
    if (output < -24576) {
    output = output - ((output + 24576)/8)*Over; // Все что меньше 8192 Уменьшаем на Over
    }
    }
    break;
    //-----------------------------------------------------------------------------------------
    case 3: // Horus эффект ******
    Horus[x] = output; // Все время записываем 256 значений -> Horus[x]
    z=x-y;
    if (output < Horus[z]) {
    output = Horus[z];
    }
    x++;
    break;
    //-----------------------------------------------------------------------------------------
    case 4: // ****** Compress ******
    if (output > 512 ) {
    output = output + (24575 - output)/t;
    }
    if (output < -512 ) {
    output = output - (24575 + output)/t;
    }
    break;
    //-----------------------------------------------------------------------------------------
    case 5: // ****** Electro ******
    if (con > El){
    con1 = output;
    con=0;
    }else{
    output = con1;
    }
    con++;
    break;
    }
    //-----------------------------------------------------------------------------------------
    OCR1AL = ((output + 0x8000) >> 8); // старший байт -> OC1A
    OCR1BL = output; // младший байт -> OC1B
    }

  • 2020-09-14Иван

    Отличная, работа! не поделитесь скетчами для ардуино?

  • 2020-07-17Борис

    https://uploads.disquscdn.c...

    Схема с питанием 9 в. Убрал R14 (он был нужен для нормальной работы LM358.

  • 2020-07-17Борис

    Пришли оригинальный микросхемы TL972. Все заработало по настоящему хорошо.

    Вывод: LM358 подойдет для отладки схемы шумная и не очень хорошо согласуется со входом Контроллера. В целом в случае если (как в моем случае) TL972 сразу найти не удалось нужно LM358 применить для макетной сборки.

  • 2020-06-26Борис

    Успех !
    Вот схема на LM358N. Заказал TL972 после прихода попробую собрать на нем. Подозреваю что качество звука улучшится.
    Сейчас слышен незначительный шум (на холостом ходу).
    Я все буду питать 9 в. (стандарт) и поработаю со стабилизатором питания (сейчас питаюсь от USB), возможно шум удастся понизить.
    https://uploads.disquscdn.c...

  • 2020-06-24Борис

    Появилась необходимость в изготовлении подобного девайса. Решил соединить приятное с полезным.

    1. Проверить сервис и заказать платы на EasyEDA. Хочу проверить как это работает (изготовление плат).
    2. Добавил OLED 64x128 экран через I2C.
    3. Использовать Arduino NANO 328, для 4 эффектов вроде справляется.
    4. Управление функциями сделал через Энкодер с кнопкой. Нажатие кнопки - выбор эффекта. Энекодер - изменение параметра настройки.
    5. Самое главное. Так как гитара (в моем случае) "Бас" думаю, пока придумал реализовать Фус, Дистошн и компрессор.

    Почему то не нашел TL972. На TL072 реализовать не очень удобно так как она хочет питание от 7в.
    Использовал популярный LM358N. Схему пришлось немного изменить (по номиналам) но в остальном все заработало. Теоретически можно будет попробовать заказать TL972.
    В остальном устройство заработало вполне пристойно. Теперь вот думаю какие собственно эффекты туда вставить.

    Если у кого есть предложения какой эффект добавить то пишите. В принципе если NANO не справится можно всегда применить Mega.

  • 2019-06-04radioprog

    Попробовать можно, но на всякий случай лучше использовать панельку, чтобы было проще заменить.
    У TL972 меньше шумы и входное напряжение смещения нуля. Плюс они различаются по частотным характеристикам, но там речь идет уже о мегагерцах, поэтому в этом случае не имеет значения.

  • 2019-06-03Swaga Yazva

    Можно ли замесить микросхемы tl972 поставить например tl072??