Двухканальный пиковый VU-метр на ATmega8. Радиоконструктор - светодиодный индикатор уровня низкочастотного сигнала Переходим к конструкции

Здравствуйте. Закончились праздники и можно снова приступить к работе. Наверное, многие уже видели наши фотографии светодиодного индикатора уровня - столбики на умных светодиодах WS2812B . Решил в более полном объёме поведать о столбиках. Тем более, что коллеги смотрят на меня непонимающим взглядом: прикольная штуковина, а мало кто о ней знает. Надо исправлять.

Думал с чего начать и решил, что всё-таки с самого начала. Индикатор уровня, или как его ещё называют VU -метр, на светодиодах мы хотим заполучить давненько. Его успешно можно использовать в качестве декора, например, встраивать в усилители, ставить рядом с аудиотехникой или монитором компьютера. Готовых решений, которые бы нам понравились, не нашли, поэтому надо было сделать свой VU -метр.

Первая разработка выглядела так:

Этот индикатор уровня был изготовлен моим коллегой Константином М. и отдан мне на оживление. Два канала, по 16 одноцветных светодиодов каждый, управлялись с помощью микроконтроллера ATmega8 через два 8-битных сдвиговых регистра. Для экономии и удобства использовалась динамическая индикация: одновременно могли светиться только 16 светодиодов одного столбика. Платку я запустил, всё на ней работало, но мне почему-то так и не удалось сделать изменение уровня столбиков красивым.

Вскоре после этого, появилась разработка индикатора уровня интереснее предыдущей:

Константин сделал её, прежде всего, для себя. Запустил в какие-то праздники, но разобрал, так и не показав результат. Конечно же, я потом взял платы, чтобы опробовать самому. В качестве прототипа был изготовлен только один канал индикатора уровня. Сам столбик состоит из 32-х RGB светодиодов в виде модуля. Он подключается к ещё одному модулю с 4-я сдвиговыми регистрами, через который осуществляется управление. Мда… За счёт динамической индикации управление очень своеобразное. Четыре 8-битных регистра управляют выбором светодиодов, которые должны светиться в данный момент времени, а с помощью трёх выводов задаётся цвет (R, G или B). Остаётся только добавить плату с микроконтроллером и вперёд. Здесь удалось зайти дальше, чем в предыдущей версии столбиков. Сначала попробовал сделать всё с помощью Arduino Due:

Микроконтроллер, работающий на частоте 84 MHz с Arm архитектурой внутри, был как нельзя кстати, думал я. Сам столбик поддерживал 8 градаций яркости для каждого цвета светодиода (R, G и B). В один момент времени можно было зажечь только один цвет , поэтому приходилось раз в 1 мс передавать одну из 24-х комбинаций значений на светодиоды. Помимо этого, необходимо было работать с АЦП, производить расчёты десятичного логарифма и прочие вычисления. Кроме как в среде Arduino с этим микроконтроллером не доводилось работать, поэтому получился неоптимизированный Arduino -код. Но даже несмотря на это, справлялась хорошо.

А почему мы пишем программу под какой-то малоизвестный Arm контроллер? Подумали и взяли отладочную плату на микроконтроллере STM8S105C6T6:

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

Решение у нас было, но в этот раз до его реализации мы не добрались. Потому что однажды – это был обычный четверг – случилось следующее: ещё один мой, не менее ценный, коллега Денис В. произнёс свою коронную фразу: "Смотрите, какую я прикольную штуку нашёл "! Это была лента на умных светодиодах WS2812B:


Ей для подключения необходимо всего 3 провода (сигнал, питание 5 В и общий провод). Круто, прощай охапка лишних проводов – подумали мы и заказали ленту на пробу:



Про эту ленту на светодиодах WS2812B много рассказано на просторах интернета - всегда можно найти что-нибудь интересное и подходящее. В основном люди делают из неё различные "светилки". Получается красиво – ещё бы, потребление "раскалённого добела "светодиода составляет 40 мА. Если лента длинная, к порту USB компьютера её не подключишь. Требуется достаточно мощный источник питания - задача, которую предстояло решить. Несмотря на эту сложность, прельщало удобство управления столбиками по одному проводу. Почему бы не сделать из этой ленты конструктор индикатора уровня, чтобы была возможность менять цветовые схемы, переключать режимы... А поможет в этом плата Arduino Pro Mini на микроконтроллере ATmega328. Её легко программировать с помощью переходника UART–USB. Была ещё одна трудность: очень короткие тайминги между загрузкой данных. "Светилки ", конечно, у людей получались… Но нам хотелось во время отправки данных ещё успевать брать значения с АЦП, читать из памяти, сохранять, производить вычисления... Поэтому, пока лента была в пути, обдумывали, возможность использования аппаратного SPI, а точнее сигнала MOSI для организации передачи с прерываниями. Будет ли контроллер всё успевать? Или придётся оптимизировать код, как-то исхитряться, лезть в ассемблер - это предстояло выяснить. Но мы уже знали точно и с прошлой реализации столбика утвердили: количество светодиодов на канал будет 32 штуки. Итого, нужно было обрабатывать 64 умных светлячка на два столбика. Забегая вперёд, хочу сказать, что WS2812B были освоены. Я ещё помучаюсь с программной частью, расскажу про аппаратную - будет продолжение.

P.S. Появилось и ещё одно развитие столбиков. То самое решение, которое на время отложилось из-за находки WS2812B, но, благодаря ей, модернизировалось и упростилось. Оно позволит использовать любые обычные светодиоды (одноцветные и RGB) и более мощное освещение: даже прожекторы. Более того, столбики - это малая часть того, что может появиться из нашей идеи. Об этом как-нибудь в другой раз.

P.P.S. В следующей записи будет показана схема подключения линии аудиосигнала к индикатору уровня . А те, кому интересно и уже не терпится увидеть, какие у нас получились столбики, могут посмотреть этот видеоролик:


С уважением, Никита О.

В проекте задействованы ATMega32 и ЖКИ индикатор 16х2 подключенный по 4-х битной шине. Само устройство по большому счету выполняет роль двух канального вольтметра, только вывод информации организован не в линейной зависимости, а в логарифмической. Это связано с нашей анатомической особенностью восприятия звука.

В собранном виде работа устройства выглядит следующим образом:

Сигнал заводится на два первых канала АЦП (РА0 и РА1). Для того чтобы не ловить мусор из вне необходимо прижать порты к земле резисторами сопротивлением 10к. В зависимости от значения напряжения на входе, происходит заполнение жки индикатора залитыми символами (в памяти контроллера ЖКИ номер символа 255).

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

Я не стал использовать фильтры и операционный усилитель на входе, пустил сигнал напрямую в мк. Как выяснилось, в подобных проектах, когда необходимо быстро обновлять информацию на дисплее, лучше использовать стандартное 8-и битное подключение. Иначе дисплей может не успевать выводить информацию и изображение будет заметно мерцать. Скачать файлы проекта (~150кб) можно по ссылке.


C этой схемой также часто просматривают:

Я представляю вам еще один простой стереофонический индикатор уровня звука для усилителя или другого аудиооборудования. Индикатор имеет 2 столбца из 20 светодиодов и возможность индикации максимального уровня. Он управляется микроконтроллером IO1 - Atmel AVR ATmega8A или более старыми ATmega8 или ATmega8L . Это единственная интегральная микросхема в устройстве которая обеспечивает индикацию обоих аудиоканалов.

Индикатор имеет 20 светодиодных делений на каждом канале, 1 деление соответствует 2 дБ. Диапазон отображения от -34 до +4 дБ. При превышении уровня аудиосигнала 0 дБ (18-й светодиод) происходит перегрузка. В качестве светодиодов индикации вы можете использовать монолитные столбцы (линейки светодиодов) или отдельные светодиоды. Светодиоды управляются мультиплексным способом в 10 шагов, по 4 светодиода на каждом шаге, частота мультиплексирования составляет около 100 Гц. Резисторы R1 ... R4 определяют ток и, следовательно, яркость светодиодов. Сигналы левого и правого каналов подключены к входам аналого-цифрового преобразователя ADC0 и ADC1. Время падения (затухание) шкалы составляет около 600 мс.

Устройство также оснащено индикацией пикового уровня, который может быть активирован с помощью перемычки на плате с надписью IM (Индикатор максимума). Индикатор уровня звука питается от источника питания 5 В, а потребление всех светодиодов составляет около 45 мА. Конденсаторы C1 и C2 должны быть расположены как можно ближе к микроконтроллеру IO1.

Архив для статьи "Индикатор уровня аудиосигнала 2x20 светодиодов на Atmega8"
Описание: Исходный код(Ассемблер), файл прошивки микроконтроллера
Размер файла: 2.64 KB Количество загрузок: 798

Вашему вниманию предлагается ещё один индикатор выходного напряжения для усилителя мощности. Данный индикатор собран на микроконтроллере ATMEGA8 . В нём для индикации уровня сигнала, используются две линейки из 33-х светодиодов, вернее из 32-х, так как оба первых светодиода в двух каналах, горят постоянно для обозначения начала шкалы (или хоть какой то индикации при отсутствии сигнала). При желании их можно не устанавливать. Индикатор может работать в линейном и логарифмическом режиме отображения уровня сигнала, также индикация может быть линией или точкой с отображением пиковых уровней сигнала и без отображения пиковых уровней. Индикатор позволяет выбрать эти режимы работы в любом сочетании:

  • Линейное или логарифмическое преобразование уровня.
  • Отображение текущего уровня столбиком или точкой.
  • Включение или выключение отображения пикового уровня.

Рисунок 1.
Собранный индикатор.

Подробности.

За основу этой схемы индикатора, был взят VU-метр, где был всего один режим работы и без индикации пиковых уровней сигнала. Михаил Сергеев немного изменил изначальную схему индикатора для повышения его надёжности и расширению функциональности устройства. В частности был добавлен трёх-позиционный Dip-переключатель для выбора необходимых режимов индикации, и добавлены токо-ограничивающие резисторы. Программу для новой схемы с расширенными возможностями, написал Николай Егоров.

Рисунок 2.
Схема индикатора.

Схема индикатора собрана на микроконтроллере ATmega8.
Входной сигнал поступает на входы микроконтроллера через ограничительные резисторы RxL и RxR . Без них при сильном сигнале с усилителя (при подключении индикатора к выходу усилителя мощности) - возможно повреждение микроконтроллера.

В индикаторе применена динамическая индикация. Все светодиоды индикатора - образуют четыре секции по 16 светодиодов (первые два горят постоянно). Для увеличения яркости светодиодов, секции включаются ключами на транзисторах BC337, вместо которых можно использовать любые средней мощности, соответствующей структуры. Было также замечено, что при закрытых транзисторах, происходит незначительная подсветка чувствительных светодиодов выключенных секций. Поэтому для устранения этого явления были установлены резисторы R10 -R13 (470 Ом). Резисторы эти изначально на плату можно не устанавливать, если засветка не наблюдается.

Микроконтроллер ATmega8 имеет ограничение по суммарному току, протекающему через любой вывод питания, который составляет 300 мА. Максимальный ток через любой другой вывод не должен превышать 40 мА. Поэтому ток через один светодиод не должен превышать 15-18 мА. Это необходимо учитывать при подборе ограничительных резисторов в цепях светодиодов. Для светодиодов с рабочим напряжением 2.5 вольта, сопротивление ограничительных резисторов не должно быть менее 110 ом.
Сопротивление ограничительных резисторов для применяемых в схеме светодиодов, можно рассчитать по следующей формуле;
R=(Udd - Ut - Uled)/Imax
Udd - напряжение после стабилизатора, 5 вольт
Ut - падение напряжения на открытом ключе, примерно 0.5 вольт
Uled - номинальное напряжение светодиода
Imax - максимальный ток светодиода, но не более 18 мА

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

Программа рассчитана на работу микроконтроллера от внутреннего RC-генератора с частотой 1 МГц, поэтому изменения заводских фьюзов микроконтроллера при программировании не требуется.

Индикатор лучше всего подключать на выход предварительного усилителя, чтобы регуляторы громкости и тембра не оказывали влияние на индикацию. Для зажигания всех светодиодов, на вход индикатора необходимо подать сигнал, напряжением 2 вольта. Если Ваш предварительный усилитель не обеспечивает необходимый уровень сигнала на входе индикатора, то его входную часть (индикатора) нужно дополнить дополнительными усилителями (один корпус LM358) по следующей схеме (показан один канал).

Рисунок 3.
Предварительный усилитель.

В целом, конструкция не критична к выбору деталей. Постоянные резисторы могут быть любой мощности. В качестве ограничительных резисторов, и резисторов подключенных к DIP-переключателям, можно использовать и резисторы SMD, для них предусмотрены контактные площадки на печатной плате. При этом отверстия для установки обычных резисторов, которые устанавливаются на эти места вертикально, можно не сверлить.
При подборе замены транзисторов необходимо учитывать максимальный ток коллектора, который должен быть не менее 300 мА. Диоды - любые маломощные, с обратным напряжением не меньше амплитуды напряжения, выдаваемого усилителем на максимальной мощности.

Рисунок 4.
Печатная плата индикатора.

Индикатор собран на печатной плате, размером 100х70 мм. Светодиоды для индикатора используются плоские и установлены они на плату вплотную друг к другу широкой стороной.
Да, для того, чтобы зажженные светодиоды не засвечивали своим свечением соседние, между ними желательно проложить светоотражающий материал, например кусочки пищевой алюминиевой фольги.
Вы можете по своему желанию изменить размеры печатной платы, как в длину, так и в ширину, например, применив круглые светодиоды (длинна платы естественно увеличится), или поставить плоские светодиоды узкой стороной друг к другу.

Рисунок 5.
Светодиодная матрица.

В конструкции можно применять и светодиодные матрицы, подобны таким или меньшим (по 10 светодиодов). Засветки соседних светодиодов в таких матрицах нет.
Стабилизатор 7805, установлен на небольшом радиаторе.

Посмотрите демонстрационное видео своего варианта реализации данной схемы индикатора от Михаила Сергеева. Своеобразное решение оформления и при работе выбран режим линейного отображения, с индикацией пикового уровня.

Видео.

В прикреплённом архиве содержатся все необходимые файлы для сборки индикатора.

Архив для статьи

6 месяцев назад

Щас бы логарифмический и линейный режимы называть чувствительностью. "Задержка светодиода", которая "так прикольней" - это пик холд (peak hold), который очень нужная штука в профессиональной аппаратуре.
А в целом, это какие-то поделки а-ля елочная гирлянда. Этот т.н. "измеритель" силшком быстро интегрируется для VU, у которого время интеграции по стандартам EBU составляет 300 мс. Она больше была бы похожа на PPM - квазипиковый индикатор, о чем и написано под видео, НО, БЛЯТЬ, НЕ БЫВАЕТ ПИКОВЫХ VU В ПРИРОДЕ, ибо последний ПО ОПРЕДЕЛЕНИЮ измеритель средних значений. Так вот, у сей поделки какая-то всратая реакция на сигнал: бас и инструменталку она пропускает, а на ударные реагирует как на бешеные клипы. Не может и не должен так работать ни VU, ни PPM, ни любой другой измеритель. Автор, почитайте про стандарты измерения громкостей, хотя бы тот же EBU или ГОСТ его копирующий (можно ограничиться кратким изложением на тематических ресурсах). И не надо называть эту светомузыку VU метром, не путайте ни себя, аудиофилов, что корчат из себя профессионалов, которым нужны измерители уровней.