Эффект эхо (echo) на микроконтроллере atmega32

0Спам18 Sanseyis   (09.04.2015 19:42)Запустил! Для averdude надо все убрать, а SUT и CKOPT поставить. Для пони так-же!

0Спам17 Sanseyis   (09.04.2015 19:13)Все собрал и не запускается эта хрень??? В протеусе работает, а в железе не хочет. Кто запустил отзовитесь.

0Спам16 Дмитрий   (28.09.2014 22:15)Мне кажется, что исходник не полный

0Спам15 Artur21   (28.09.2014 18:08)У меня скачиваются файлы, у вас нет чтоли?

0Спам14 Дмитрий   (28.09.2014 18:03)Не могли бы вы еще раз залить исходник

0Спам12 Artur   (28.10.2012 12:30)В конце статьи указана ссылка на продолжение статьи

0Спам9 fanzone   (27.10.2012 21:06)где почитать подробно о настройке прибора?первоисточник?

0Спам11 Artur   (28.10.2012 12:29)читайте статью внимательно, ссылка на первоисточник указана в КОНЦЕ статьи

0Спам13 fanzone   (29.10.2012 11:01)ссылка на первоисточник привела на форум а не на статью–обновите ссылку или прямо здесь киньте

0Спам6 fanzone   (27.10.2012 16:44)SUT0=0, CKOPT=0 насколько я понял в пони нужно на них галочки поставитьесли не верно поправьте меня.

1Спам8 Artur   (27.10.2012 20:12)все верно, в пони проге и в code vision avr ставим галочки

0Спам5 fanzone   (27.10.2012 16:42)на плате с кнопками стоят два резака-какие их номиналы?

1Спам7 Artur   (27.10.2012 20:12)вроде бы 2м и 56к, они по сути не нужны, прибор надо бдет настраивать и подбирать резисторы чтобы прибор показывал точные значения

1Спам4 Artur   (25.10.2012 22:56)кстати, эту схему собирал =) только до конца так и не дособрал =)) если интересно могу выложить фотки прибора=))

0Спам10 fanzone   (27.10.2012 21:15)артур-в правой части схемы есть два необозначеных резака-если можно дайте их номиналы типа верхний столько-нижний столько.и процесс настройки интересует.

Источник: http://cxema21.ru/publ/mikrokontrollery/izmeritelnye_ustrojstva/tester_s_11_funkcijami_na_mikrokontrollere_atmega32/14-1-0-103

Электронная валентинка

      Вашему вниманию предлагается  конструкция  “Электронная Валентинка”, созданная что бы дарить радость близкому и любимому человеку 🙂

   Электронная Валентинка разрабатывалась как подарок любимой девушке на 14 Февраля – отсюда и соответствующее название.

     Схема основана на микроконтроллере ATMega32  и 156 светодиодах включенных по матричной схеме (рис. 1 и рис.2).    Электронная Валентинка  выполнена на  двух печатных платах, одна из которых  служит платой управления  (рис. 3) и является односторонней, вторая служит платой индикации (рис.4, рис.5.) и является двухсторонней. В платах имеются соединения перемычками из провода МГТФ,  места соединения показаны на рисунках. Это не лучший вариант, но зато  экономим в габаритных размерах по толщине. 

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

   Перед пайкой следует проверить каждый светодиод на исправность и желательно еще измерить обратные токи утечек, поскольку может появиться проблема засвечивания ненужных светодиодов в процессе работы схемы. Особо это заметно на дешевых светодиодах. Так же следует паять светодиоды быстро избегая лишнего перегрева.  Дополнительно выйграть габариты можно используя светодиоды для поверхностного монтажа.    Программа микроконтроллера написана в среде  IAR EWAAVR 5.30.0. Компилятор доступен в глобальной сети. Для осваивания языка программирования можно обратиться за помощью на сайт http://chipenable.ru. Автору сайта огромная благодарность за хороший самоучитель языка Си. (А Игорю спасибо за присланный проект. Pashgan)

   В проекте есть библиотека эффектов  “effects.c” и основной файл “main.c”, с помощью  них создаются все визуальные эффекты на светодиодном индикаторе. 

  
   Микроконтроллер программируется внутрисхемно, программатор подключается непосредственно к его выводам (см. рис.3). Для программирования можно воспользоваться программатором USBASP или чем-то по проще, например PonyProg.

  
   Электронная Валентинка  питается от никель-кадмиевого или никель-металлогидридного аккумулятора напряжением 3,6В – 4,8В. Можно использовать литий-ионные аккумуляторы,  но в этом случае необходимо поработать над схемой зарядки. Максимальный ток потребления составляет порядка 120мА, среднее значение порядка 60 мА и зависит от используемых эффектов. 

  Корпус изготовлен из листового оргстекла. Формовка осуществлялась при помощи воздушной паяльной станцией и оправы подходящего диаметра. Склеен корпус клеем на основе дихлорэтана с добавлением кусочков оргстекла и их растворения до жидкой массы. Корпус снаружи покрашен аэрозольной красной краской. Стоит позаботиться о качестве краски либо сверху сделать покрытие из защитного лака, чтобы краска не обтиралась.    Работу Электронной Валентинки можно посмотреть  перейдя по ссылке.  По всем вопросам можно обратиться  к автору по почте:  Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра..
Рис. 1 Принципиальная схема платы управления (кликабельно)Рис.2 Принципиальная схема платы индикации (кликабельно)Рис.3 Плата управления

Рис.4 Плата индикации – верхний слой

  Рис.5 Плата индикации – нижний слой

Проект для IAR AVR
Плата в формате lay

Обсуждение электронной валентинки на форуме

Источник: http://chipenable.ru/index.php/item/93

Запись и воспроизведение звука микроконтроллером AVR. Application Note AVR335

�?нтересное и необходимое направление, которое я считаю нужным осветить — это, конечно же, запись, хранение и воспроизведение звука.

Цифровые диктофоны, автоответчики, голосовые меню, устройства оповещения, дверные звонки, игрушки — вот далеко не полный перечень устройств, где необходимо решать проблему записи, хранения и воспроизведения звука. Для решения такого вопроса воспользуемся существующими наработками ATMEL, а именно AVR335.

Для тех, кто не дружит с английским имеется перевод на сайте gaw.ru. Скажу вам стоит распечатать этот документ — получится хороший годный учебник в виде брошюры. Вот такой как у меня:

Вообще, коллеги, у меня масса подобных самодельных брошюр и даже книг. Брошюрами я сшиваю разделы даташитов на АРМ-ы (для АВР имеется книга Евстифеева А.В.), мануалы и аппноуты на некоторые комплектующие. Книгами оформил Ю. Ревича,  Д. Трампета и некоторые другие.

В документе AVR335 понятным языком подробно расписаны процессы записи, хранения и воспроизведения звука, при использовании любого микроконтроллера AVR с АЦП, памяти AT45DB161 DataFlash и нескольких внешних компонентов.

Это руководство подробно описывает использование: АЦП для записи звука, последовательного интерфейса (SPI) для доступа к внешней памяти DataFlash и широтно-импульсной модуляции (Ш�?М) для воспроизведения. В нём также доходчиво определены технические термины по теме.

В AVR335 используется уже устаревший контроллер AT90S8535. Без изменений кода схему можно реализовать на ATmega8535, но у меня имеется прекрасный модуль ATmega128kit, на котором уже установлена память, все кнопки, светодиоды и прочее.

Поэтому я переписал исходный код для микроконтроллера ATmega128 в привычном мне WinAVR. Память, установленная на борту кита, — это AT45D321D. Её объём в два раза больше (32 мегабита) чем у использованной в аппноуте, т.е. можно записать не 4 1/4 минут, а 8 с половиной, что вполне достаточно для большинства конструкций.

Для преобразования выходного Ш�?М-а в звук я собрал фильтр Чебышева, предложенный в аппноуте. В состав этой платы также входит микрофонный усилитель собранный на первом ОУ из четырёх составляющих LM324. Вот её вид со стороны элементов:

А здесь со стороны печати:

Собирался этот фильтр из деталей, которые были под рукой, поэтому наблюдаем и выводные элементы, и смд-шные. Кроме того, чтобы выводить звук на динамик,а не на наушники, я собрал простейший УНЧ на микросхеме LM386 согласно типовой схеме.

Потом всё это добро слепил в макет:

Динамик и микрофон китайские из подножного корма

Источник: http://www.embed.com.ua/mikrokontrollernyiy-konstruktor/zapis-i-vosproizvedenie-zvuka-mikrokontrollerom-avr-application-note-avr335/

Воспроизведение однотональных мелодий с помощью AVR

Дата публикации: 15 мая 2011.

Рейтинг:  4 / 5

где N – коэффициент пересчета предварительного делителя, вместо OCR1A в нашем случае ICR1.

Исходя из этой формулы расчитываем коэффициенты для ICR1, зная частоты основных нот. Так как для большинства разобраться с нотной портитурой не очень просто, названия нот я определил как в редакторе мелодий старого телефона Сименс.

Коды таких мелодий еще можно найти в интернете и в дальнейшем поменять в исходном тексте. Также важно понятие как длительность тона – это время звучания одной ноты, она выражается долями от целой.

В общем за проигрывание ноты у нас отвечает функция Play_LE.

Кроме нот любая мелодия содержит паузы, это промежуток времени когда ни один звук не звучит. за паузы отвечает функция Set_temp, она попросту в нужное время отключает таймер/счетчик.

Ниже представлен исходный код с подробным описанием, если что-то не понятно задавайте вопросы. На одном из следующих заданий разберем как можно сделать синтезатор голоса.

/*** Воспроизведение однотональных мелодий ***/ #include #define A2 9008 // Ля (2 октава) #define Ais2 8580 // Ля диез #define B2 8098 // Си #define C3 7644 // До (3 октава) #define Cis3 7214 // До диез #define D3 6810 // Ре #define Dis3 6427 // Ре диез #define E3 6066 // Ми #define F3 5726 // Фа #define Fis3 5404 // Фа диез #define G3 5101 // Соль #define Gis3 4815 // Соль диез #define A3 4544 // Ля #define Ais3 4289 // Ля диез #define B3 4049 // Си #define C4 3821 // До (4 октава) #define Cis4 3607 // До диез #define D4 3404 // Ре #define Dis4 3213 // Ре диез #define E4 3033 // Ми #define F4 2862 // Фа #define Fis4 2702 // Фа диез #define G4 2550 // Соль #define Gis4 2407 // Соль диез #define A4 2272 // Ля #define Ais4 2144 // Ля диез #define B4 2024 // Си #define C5 1910 // До (5 октава) #define Cis5 1803 // До диез #define D5 1702 // Ре #define Dis5 1606 // Ре диез #define E5 1516 // Ми #define F5 1431 // Фа #define Fis5 1350 // Фа диез #define G5 1275 // Соль #define Gis5 1203 // Соль диез #define A5 1135 // Ля #define Ais5 1072 // Ля диез #define B5 1011 // Си #define C6 955 // До (6 октава) #define Cis6 901 // До диез #define D6 850 // Ре #define Dis6 803 // Ре диез #define E6 757 // Ми #define LE32 1*3 // 1/32 Длительность тона #define LE16 2*3 // 1/16 #define LE16D 3*3 #define LE16T 2*2 #define LE8 4*3 // 1/8 #define LE8D 6*3 #define LE8T 4*2 #define LE4 8*3 // 1/4 #define LE4D 12*3 #define LE4T 8*2 #define LE2 16*3 // 1/2 #define LE2D 24*3 #define LE1 32*3 // 1 void Delay_us(unsigned char time_us) // функция задержки в us { register unsigned char i; for(i = 0; i < time_us; i++) // 4 цикла { asm (" PUSH R0 "); // 2 цикла asm (" POP R0 "); // 2 цикла // 8 циклов = 1 us для 8MHz } } void Delay_ms(unsigned int time_ms) // функция задержки в ms { register unsigned int i; for(i = 0; i < time_ms; i++) { Delay_us(250); Delay_us(250); Delay_us(250); Delay_us(250); } } unsigned char temp; void Set_temp(unsigned char number) // функция установки темпа и паузы { temp = number; // установка темпа TCCR1A = (1

Источник: https://radioparty.ru/all-files/finish/4/284

Тестер с 11 функциями на микроконтроллере Atmega32


Возможности тестера:

Постоянное напряжение 0.00 – 5.00 В 

Постоянное напряжение 00.0 +/- 99.9 В 
Прозвонка диодов 0 – 5000 мВ 
Сопротивление 1 Oм – 50 MOм с точность два разряда, автомат диапазона 
Емкость 1 пФ – 65000 мкФ с точностью три разряда, автомат диапазона 
ESR конденсаторов 0 – 200 Oм с шагом 0.25 Ом 
Индуктивность 1мГ – 65000 мГ с точностью 1мГ, в одном диапазоне 
Счетчик импульсов 0 – FFFFFFFF 
Частотомер 0 – 10 МГц с точностью 1Гц, в одном диапазоне 
Генератор импульсов 0 – 10 МГц 
Логический анализатор: асинхронный, длинна записи 2048 бит, чтение автономное на индикатор, дискретизация до 2МГц, выбор условия старта 

Все режимы на один вход, переключение режимов кнопками, подтверждение звуком 

Питание от внутреннего аккумулятора 

Схема прибора: 

Открыть схему в большем разрешении.

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

Для пользователя это выглядит так: – подача питания – звуковой сигнал – режим напряжгние (можно мерять) – нажатие кнопки – звуковой сиенал – режим частотомер (можно мерять) – нажатие кнопки – и т.д. Режимы подтверждаются соответствующей индикацией. Режимы переключаются по кольцу.

Кнопка-2 гонит кольцо вперед, кнопка-1 назад, кнопка-0 служебная используерся для обнуления счетчика импульсов, переключения ситем счисления индикации и т. п. 

Режимы работы тестера:

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

Программа написана на MikroBasic for AVR от фирмы Microelektronica. Критичные участки кода на встроенном в Basic Assembler. 

Фьюзы нужно выставлять следующие: 
SUT0=0, CKOPT=0

Переключение режимов осуществляется через опрос трех кнопок и переключателя делителя напряжения для диапазона 100В. Опрос общий для всех режимов и ведется постоянно. 


Напряжение в диапазоне до 5.00V измеряется непосредственно входом ADC0.  Напряжение в диапазоне до +/- 100.0V измеряется через делитель двумя входами ADC5 и ADC7 поочереди, для определеня полярности. Делитель подключается механически переключателем см. схему.

Прозвонка – на вход подается 5V через резистор 560 Ом. ADC0 измеряет падение напряжения на p-n переходе диода. 


Сопротивление
 – измеряется в семи поддиапазонах пересчитывается по формуле см. исходник. 

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

ESR – измеряется просто, как активное сопротивление разряженнго конденсатора. 


Индуктивность
 – измеряется также как и емкость только все наоборот. 

Счетчик импульсов – в качестве счетчика импульсов используется аппаратный таймер-счетчик плюс расширение до 32 разрядов за счет двух регистров, логические уровни выводятся символьном виде H L U, соответственно высокий низкий неопределенный. 

Частотомер – измеряются показания счетчика импульсов в течении интервала времени в одну секунду и выводятся на индикатор, затем счетчик обнуляется и т.д. 


Генератор импульсов
 – аппаратный таймер-счетчик в режиме генератора, либо програмный генератор. 
Логический анализатор – программа с определенной частотой опрашивает входной пин контроллера, данные о состоянии пина сдвигаются в аккумулятор, содержимое аккумулятора перезаписывается в память (RAM контроллера), адрес памяти инкрементируется и так далее пока весь блок памяти не закончится. Чтение происходит в обратном порядке по нажатию соответствующей кнопки. За одно нажатие кнопки на индикатор выводится содержимое четырех байт памяти. 

АРХИВ:

Раздел: [Устройства на микроконтроллерах]

Источник: http://www.cavr.ru/article/5002-tester-s-11-funkciyami-na-mikrokontrollere-atmega32

Как тактировать AVR

Прежде чем разбирать, какие бывают источники тактирования, чем они отличаются, их плюсы и минусы и тд,  нам нужно определиться, что вообще означает словосочетание тактовая частота. Да и вообще, что означает термин «частота»?

Как нам говорит учебник физики, частота — это количество колебаний, произведенных за определенный промежуток времени. Чаще всего этот промежуток времени называют периодом и для удобства измерений его берут равным одной секунде.

Какие можно привести примеры подобных колебаний? Это могут быть часы с кукушкой, маятник, качели

и даже круги на воде от камушка, который мы кинули в воду:

Более подробно про частоту и период можно прочитать в статье Электрические сигналы и их виды.

Так, теперь ближе к делу. Что же такое тактовая частота?

Любая операция МК или его мегакрутого брата-микропроцессора состоит из отдельных элементарных действий, то есть тактов.

Получается, тактовая частота — это сколько тактов в секунду может выполнить наш МК или процессор. Отсюда напрашивается вывод, чем больше тактовая частота, тем больше количество операций  за секунду может сделать МК или микропроцессор.

В МК AVR тактовая частота в основном измеряется в МегаГерцах. Как помните, приставка «Мега» означает один миллион. Если у нашего МК тактовая частота 8 МегаГерц, то это означает, что он может выполнять 8 000 000 тактов в секунду, или, грубо говоря,  около 8 000 000  различных операций в секунду ;-).

Пусть вас не пугает это число, потому что ваши настольные компьютеры, телефоны и планшеты уже работают на частоте в несколько ГигаГерц. Гига — это уже миллиард! Например, если частота процессора вашего компа 2 ГГц, это означает, что он может произвести 2 миллиарда операций в секунду).

Мало? Как оказалось на практике, уже стает мало)).

Вернемся к нашим баранам), а именно, к тактовой частоте. Допустим, мы имеем МК Tiny 2313, сконфигурированный на работу 8 МегаГерц и который  может выполнять при этом 8 миллионов тактов в секунду. Каждая операция процессора состоит из тактов.

А когда процессор выполняет нашу программу, записанную во Flash память, он тоже производит определенные операции которые указаны в программе.

Граничная частота МК Tiny 2313, как говорит нам Datasheet, довольно высокая и составляет аж целых 20 МГц! Это довольно много по меркам МК

Правда, это только с применением внешнего кварцевого резонатора.

Кварцевый резонатор, называемый часто просто кварц, может выглядеть по-разному:

На схемах он обозначается так:

На кварце часто указана частота, на которой он работает. Ниже на фото мы видим кварц, который работает на частоте 8 МегаГерц (8.000MHz)

В большинстве случаев стараются указывать частоту на корпусе кварца. Если у вас есть какое-либо ненужное цифровое устройство, вы вполне можете выпаять кварц на нужную частоту прямо оттуда. Но в  большинстве случаев в этом нет необходимости, так как  новый кварцевый резонатор  в радиомагазине стоит порядка 20-30 рублей.

Есть один нюанс, любезно предоставленный нам производителями микроконтроллера. Если нам нужно, чтобы программа выполнялась медленнее в восемь раз, мы можем этого добиться даже не переписывая программу и не выставляя задержки по новой, то есть в 8 раз длиннее.

Нам достаточно уменьшить частоту МК в восемь раз и программа будет для нас выполняться медленнее в восемь раз. Забегая вперед, скажу, что сделать это мы можем очень легко, выставив всего одну галочку при программировании фьюз-битов, в бите CKDIV 8.

Также легко мы можем отменить все наши изменения.

Этот способ мы использовали при прошивке МК в прошлой статье.

Существуют 4 варианта, которые применяются для тактирования МК:

— тактирование от внутреннего RC-генератора

— тактирование от внешнего кварца

— тактирование от внешнего генератора

— тактирование от RC-цепочки

Тактирование от внутреннего RC-генератора.

На тактирование от внутреннего RC генератора МК настроен сразу с завода и не требует внешних деталей.

Это означает, что с помощью МК, питания +5 Вольт и одного светодиода с резистором, мы уже можем заставить наш МК работать и выполнять программу без всяких сложных настроек и дополнительных деталей, задав скорость программно, путем выставления задержки «Delay».

  Имейте ввиду, что встроенный RC-генератор может работать только на четырех частотах: 1, 2, 4 или 8 МегаГерц, поэтому если вам требуется какая-нибудь эксклюзивная частота, типа 1 638 000  Герц, то такой способ не прокатит.

Тактирование от внешнего кварца

Тактирование от внешнего кварца чуточку сложнее.  Как же нам подключить внешний кварц? Для начала нам надо найти цоколевку МК, которую мы собираемся тактировать от внешнего кварца. Пусть в нашем примере это  будет Тiny 2313. Чтобы подключить внешний кварц, достаточно найти ножки микросхемы с названием «XTAL1»  и «XTAL2».

 Потом подсоединить кварц вот по такой схеме:

Потом при прошивке надо правильно выставить фьюзы. О них мы с вами поговорим в следующих статьях.

На реальных платах можно увидеть примерно вот такие схемы  расположения элементов с тактированием от кварца. Здесь изображен  МК AVR  в корпусе TQFP , конденсаторы в SMD исполнении, скорее всего в корпусе 0805, и кварц.

А здесь изображен МК в  корпусе DIP , два керамических конденсатора, так называемые “желтые капельки”, и кварц.

Как видно на схеме подключения кварца к МК, номинал нужных нам конденсаторов должен составлять 15-22 пикофарада. Расшифровать номинал таких конденсаторов, можно с помощью этого рисунка:

Тактирование от внешнего генератора.

К тактированию от внешнего генератора прибегают тогда, когда требуется синхронизовать МК с внешними цепями, либо этот МК тактируют какой-либо своей частотой от генератора частоты. Тактирующий сигнал подают на ножку XTAL1:

Тактирование от RC-цепочки

Тактирование от RC-цепочки осуществляется вот по такой схеме:

Здесь мы берем конденсатор емкостью не менее 22 пФ, а резистор от 10 Ом и до 100 КилоОм. По простой формуле можно с легкостью рассчитать частоту, на которой будет тактироваться наш МК:

где

F — частота, Гц.

R — сопротивление резистора, Ом.

С — емкость, Фарад.

Внутренний RC-генератор и внешняя RC-цепь дают нестабильную частоту, которая «гуляет» и зависит от температуры. Для того чтобы помигать светодиодом и прочих неответственных действий, нам это будет не принципиально. В наших проектах, поначалу не требующих особой точности, мы будем использовать тактирование от внутреннего RC-генератора.

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

Итак, как мы помним из предыдущей статьи, некоторые ножки имеют двойное назначение, и помимо того, что могут использоваться как порты ввода-вывода, также используются для обеспечения расширения функций МК.

Действительно, если МК сконфигурирован для работы от внутреннего RC-генератора, вам достаточно подать на него питание +5 Вольт и землю, и микроконтроллер включится и начнет выполнять программу.

Но если вы выпаяли микроконтроллер из какого-либо устройства и он должен был в нем тактироваться от кварца, или по ошибке выставляя биты конфигурации, вы выставили тактирование от кварца, МК перестанет у вас быть виден в программе оболочке, и не сможет выполнять программу, даже если вы подадите на него +5 Вольт и землю.

Что же делать в таком случае? В первую очередь не паниковать) и собрать схему с тактированием от кварца, и тогда мы сделаем видимым наш МК, который вдруг может быть переставать у вас определяться оболочкой программатора и работать в схеме, если вы ошибочно переведете МК в режим тактирования от кварца, путем выставления определенных фьюзов. Об этом мы как-нибудь еще поговорим

Источник: https://www.ruselectronic.com/istochniki-taktirovaniya-mikrokontrollerov-avr/

Эффект эхо (echo) на микроконтроллере Atmega32

Эффект эхо (echo) на микроконтроллере Atmega32

Когда я обучался в 10 классе, я усиливал аудио сигнал схемой на нескольких транзисторах bc547 — bc557. При помощи этой схемы я мог усиливать аудио сигнал, но не мог сделать эффект эхо как в громкоговорителях. Я просто не мог для себя представить, как воплотить таковой эффект. Тогда это было за пределами моих познаний.

На данный момент я могу сделать это, просто произведя цифровую обработку сигнала при помощи микроконтроллера. Механизм работы очень прост – в кольцевом буфере применяется оборотная связь с запаздыванием. Изготовлено это при помощи микроконтроллера ATmega32. Это обычной, но очень увлекательный проект.

По этому принципу мы можем сделать не только лишь эхо, да и много других маленьких DSP эффектов, если у микроконтроллера будет больше ОЗУ.

Принцип деяния

В проекте я использовал микроконтроллер Atmega32. Он имеет 2КБ ОЗУ и АЦП, чего довольно для реализации данного эффекта эхо. Для захвата голоса употребляется электретный микрофон. Сигнал с него подается на АЦП с подходящим усилением и смещением уровня, что принципиально для высококачественной работы.

АЦП конвертирует аналоговый сигнал в цифровой, с определенной настраиваемой частотой дискретизации. Употребляется кольцевой буфер на 1900 б. Нам нужно сделать задержку при входе и выходе звука. Таким макаром, для получения задержки мы можем заполнить буфер в одной точке, а прочесть в другой.

Как сделать эту задержку наибольшей? Это отлично разъясняется диаграммой.

Uint8_t buf[1900];

Сейчас нужно сделать эффект эхо. Для этого нам нужно обеспечить оборотную связь от точки чтения, к точке записи. Говоря ординарными словами, мы должны добавить уменьшенную модель считываемого сигнала совместно с прототипом записи. Коэффициент оборотной связи всегда должен быть

В программке я добавил 5 уровней эхо – от эхо 0 до эхо 4.

Наблюдения

Если прирастить частоту дискретизации, то время от основного звука до эхо и продолжительность эхо будет меньше, но качество звука возрастет.

Если уменьшить частоту дискретизации, то время от основного звука до эхо и продолжительность эхо возрастет. Если прирастить коэффициент усиления оборотной связи, объем эхо и количество его повторения возрастет.

Если прирастить коэффициент усиления оборотной связи выше 1, то звук испортится за счет колебаний.

Чтоб получить очень не плохое качество звука с неплохим эффектом эха, должно быть много ОЗУ и частота дискретизации должна быть высочайшей. Для этой цели лучше подойдет ATmega2560 с 8КБ ОЗУ.

Принципная схема устройства:

Схема микрофонного усилителя:

Схема фильтра:

Также нужен хоть какой усилитель звука НЧ. Схему, подходящую к вашим колонкам можно просто отыскать в вебе, и я не стал давать её здесь.

Исходник и прошивка прилагаются

Прикрепленные файлы: echo. rar (1 Кб)
Микроконтроллер AVR

Источник: http://bloggoda.ru/2018/03/16/effekt-exo-echo-na-mikrokontrollere-atmega32/

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}