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

10.09.2021

Здравствуйте. Закончились праздники и можно снова приступить к работе. Наверное, многие уже видели наши фотографии светодиодного индикатора уровня - столбики на умных светодиодах 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. В следующей записи будет показана схема подключения линии аудиосигнала к индикатору уровня . А те, кому интересно и уже не терпится увидеть, какие у нас получились столбики, могут посмотреть этот видеоролик:


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

Я представляю вам еще один простой стереофонический индикатор уровня звука для усилителя или другого аудиооборудования. Индикатор имеет 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

Представляю Вам простой проект индикатора аудио-сигнала, отличительной особенностью этого проекта от других является то, что в схеме на каждый канал я примел по 32 светодиода, получилась длинная линейка. В основе устройства - микроконтроллер AVR ATmega8535, ULN2803 - 8-канальный ключ Дарлингтона, кроме того, применен операционный усилитель, его назначение думаю так же понятно. Чувствительность индикатора регулируется резисторами R32 и R33, для каждого канала отдельно. Данный проект является моей дипломной работой, которую я делал пару лет назад, наткнулся на схему когда шарился в папках на своем ПК, и решил отправить на сайт.

Схема достаточно объемная, сокращать обозначение светодиодов не стал, схему можете посмотреть ниже:

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

Все устройство собиралось на макетной плате, печатную плату рисовать не стал, кому понравился проект может нарисовать печатную плату и прислать ее на форум. Все радиодетали в схеме можно заменять на аналогичные, номиналы резисторов и конденсаторов можно ставить близкие по номиналу. Транзисторы можно заменить на любые другие, аналогичные. Кварцевый генератор можно поставить на 14-16 МГц, не критично. Фотографии устройства ниже:

При программировании микроконтроллера фьюзы выставлять не нужно, т.е. выбираем нужный нам контроллер в программе, открываем прошивку и нажимаем прошить. Если устройство собрано без ошибок, то схема заработает сразу.

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
IC1 МК AVR 8-бит

ATmega8535

1 В блокнот
IC2, IC3 Составной транзистор

ULN2803

2 В блокнот
IC4A, IC4B Операционный усилитель

LM358

1 В блокнот
Q1-Q4 Биполярный транзистор

BD140

4 В блокнот
Q5 Кварцевый резонатор 16 МГц 1 В блокнот
С1-С4, С11, С14 Конденсатор 100 нФ 6 В блокнот
С5-С8 Конденсатор 10 нФ 4 В блокнот
С9, С10, С15, С16 Конденсатор 220 нФ 4 В блокнот
С12, С13 Электролитический конденсатор 10 мкФ 2 В блокнот
С17, С18 Конденсатор 22 пФ 2 В блокнот
R1-R16 Резистор

68 Ом

16 В блокнот
R17-R20, R23, R24, R30, R31, R36, R37 Резистор

1 кОм

10 В блокнот
R21, R22, R29 Резистор

1.5 кОм

3 В блокнот
R25, R26, R34, R35 Резистор

47 кОм

4 В блокнот
R27 Подстроечный резистор 100 Ом 1 В блокнот
R28 Резистор

470 Ом

1 В блокнот
R32, R33 Подстроечный резистор 20 кОм 2

Продолжая тему «Подстраиваемого светодиода» и преследуя цель опробовать в деле умную светодиодную ленту на базе WS 2812 B (NeoPixels) родилось новое устройство — Adjusty strip — продвинутый индикатор уровня!

Ленту на пробу мне предоставил магазин Если Вам понравится устройство и Вы захотите его повторить, то ленту в Украине можно приобрести в этом-же магазине — ссылка на ленты . Для России ее можно приобрести еще у одного моего партнера TIXER.RU (обещались в ближайшее время пополнить ассортимент).


Переходим к конструкции.

Схема элементарна – на несколько деталек и ATtyni13. Надеюсь, знаете, как записать в МК прошивку? Нет? Тогда Вам .

Длина ленты по умолчанию — 30 пикселей. Количество пикселей отображения можно изменить, указав в исходнике значение константы «Number_Pixels» равное реальному количеству пикселей (эффекты автоматически пересчитаются под новое значение).

Несмотря на простую схему, индикатор уровня получился интересный! С большим выбором вариантов отображения линейки. В устройстве задействована специальная палитра, стилизованная под пламя. Соответственно, каждому значению уровня будет соответствовать свой цвет из палитры:


Устройство
– визуально отображает на ленте уровень входного сигнала . Это, своего рода, большой светодиодный столбик.

Индикатор умеет работать в 9-ти режимах отображения входного уровня. Для перебора режимов нужно нажимать на кнопку «Режим ». Выбранный режим запоминается в энергонезависимую память и при повторном старте устройства будет автоматически активирован.

Режимы:
0 – Off – лента выключена
1 – Simple – обычная одноцветная полоса
2 – Bar – линейка от синего к белому по палитре
3 – Inv_Bar – линейка от белого к синему по палитре
4 – Color – вся линейка подсвечивается одним цветом в зависимости от длины
5 – Point – цветная точка, отображающая уровень
6 – Solid_Color – все пиксели горят цветом, зависящим от величины уровня
7 – Fire – стилизованный огонь — чем больше уровень, тем больше пламя
8 – Chaos – хаотичные засветки пикселей (изменяются от уровня)
9 – Scroll – сдвиг уровня по полосе

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

Так как устройство элементарно, для демонстрации его возможностей я собрал его на макетке, за пару минут:

И вот что получилось:



Материалы для сборки устройства:
- Материалы для сборки устройства

Область применения индикатора уровня Adjusty strip :

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


Обновление 2016
viktor001 проделал большую работу по подключению звука к устройству. Получилось здорово. Прошивка тоже немного изменена — смотрите в архиве.


Схема к индикатору получилась до безобразия простой и собственно соответствует поставленной задаче — простата, легкодоступные компоненты и 100 процентная повторяемость. При правильной сборке работает сразу. Вся настройка сводится к выставлению уровней компрессии и выхода микрофонного усилителя. Главное и единственное требование — не выставлять усиление по максимуму. Наличие компрессора не является таблеткой от всех болезней и при работе от микрофона всё же имеет свои границы регулирования. Можно конечно «зажать» сигнал регулятором компрессии, но тогда страдает подвижность индикации. Лучшим средством является предусмотренный регулятор усиления Ку на первом операционнике фильтра нч. При работе от линейного входа, компрессор замечательно справляется без дополнительных регулировок.

С питанием схемы всё ещё проще. Выбор блока питания исходил от требования ленты WS2812B, точнее от потребления тока, плюс небольшой запас. 10 вольт получаем через DC/DC преобразователь.

Схема к индикатору получилась до безобразия простой и собственно соответствует поставленной задаче — простата, легкодоступные компоненты и 100 процентная повторяемость. При правильной сборке работает сразу. Вся настройка сводится к выставлению уровней компрессии и выхода микрофонного усилителя. Главное и единственное требование — не выставлять усиление по максимуму. Наличие компрессора не является таблеткой от всех болезней и при работе от микрофона всё же имеет свои границы регулирования. Можно конечно «зажать» сигнал регулятором компрессии, но тогда страдает подвижность индикации. Лучшим средством является предусмотренный регулятор усиления Ку на первом операционнике фильтра нч. При работе от линейного входа, компрессор замечательно справляется без дополнительных регулировок.С питанием схемы всё ещё проще. Выбор блока питания исходил от требования ленты WS2812B, точнее от потребления тока, плюс небольшой запас. 10 вольт получаем через DC/DC преобразователь.

Кстати, что бы первые пиксели не светились в паузе между треками, на вход МК надо повесить резистор на 100к относительно массы. Я когда рисовал схему упустил этот момент.


В архиве есть печатки усилителей. Расположение деталей микрофонного усилителя я не стал указывать. Поэтому прилагаю плату МУ как отдельный блок. На ней всё указано. Обратите внимание на перемычки.


(Visited 21 101 times, 1 visits today)

Индикатор уровня сигнала 2 x 20 LED на ATMEGA8.

На одном из зарубежных сайтов нашел материал по сборке индикатора уровня сигнала, построенного на микроконтроллере Atmel AVR ATmega8A или более старой Atmega8 или Atmega8L. Переводить статью дословно нет смысла, потому что автор собирал схему на макетке, но тем не менее работу индикатора вы можете посмотреть в ролике, который найдете в архиве. Индикатор имеет 20 светодиодных делений на каждом канале. Диапазон отображения - от -34 до +4 дБ. В качестве индикаторных светодиодов вы можете использовать монолитные столбы типа DC20/20GGGWA, именно под эти светодиодные матрицы я рисовал лейку платы. Для начала приведу принципиальную схему индикатора уровня сигнала:

При реализации схемы так же можно применить две линейки по 20 обычных светодиодов. Резисторы R1 ... R4 определяют ток и, следовательно, яркость светодиодов. Сигналы левого и правого каналов подключены к входам аналого-цифрового преобразователя ADC0 и ADC1. Время падения (затухание) шкалы составляет около 600 мс. В устройстве имеется функция отображения пиковых уровней сигнала, активировать её можно замыканием перемычки «IM» (Indicator of Maximum), вместо перемычки можно поставить кнопку ON/OFF с фиксацией.

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

Вид платы светодиодного индикатора уровня сигнала в формате LAY6:

Прошивку микроконтроллера найдете в архиве (файл с расширением hex) . Настройка битов конфигурации в PonyProg показана на следующем изображении.
(Шестнадцатеричные значения: Low Fuse: A4, High Fuse: D9.)

Предупреждение!!! Схема в железе мной не тестировалась.

Размер архива с материалами по индикатору уровня сигнала на AVR Atmega8A 2 x 20 LED - 4,8 Mb.

Найдете ошибки или появятся предложения - не стесняемся писать комментарии.