Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Световые эффекты » USB цветомузыка.


USB цветомузыка.

Сообщений 1 страница 11 из 11

1

Господа, столкнулся вот тут с такой проблемой. Делаю этакий цветомузыкальный плафон. Контроллер AT90USB162. На выходе четыре 1-ваттных светодиода + 2 на фон. По USB на него подается значения яркости по четырем каналам. Частотное разделение на стороне РС библиотекой BASS. Вроде бы все просто, но не совсем. Если тупо подавать четыре параметра, то светодиоды включаются с такой частотой, а яркость (в связи с отсутствием инерционности) меняется так быстро, что во первых устают глаза, а во вторых цвет и музыка живут каждый своей жизнью. Как их "поженить"? Что м ожно было бы предпринять? Желательно никаких внешних схем. Только контроллер, ключи и светодиоды. Хотя можно рассмотреть и эти варианты. Как говориться - оптимизация по цене.

0

2

С первого раза и у меня такая ЦМУ получилась - хотелось выбросить и больше не браться.
Потом попустило, но до совершенства далеко.
Итак, делим весь диапазон на нужное количество каналов. Выше 10-12кГц брать смысла нет - всё основное в ритме находится в этом диапазоне. Каналы не равномерные, а такие, как в эквалайзере, например 500 гц, 1, 2, 4 кГц - центра полос. Обычно всё суммируется, потом делится на количество выборок. Тем самым усредняя значения в каналах. Лучше искать в них максимальные значения, их и использовать при расчётах. Эти максимальные значения умножаем на определённый коэффициент усиления каналов - чем выше частота, тем больше нужно усиление. Затем экспонента на каждый канал. Потом ограничиваем максимальное значение - например, нее более 255. и отправляем в контроллер. Ну и самое интересное - плавное затухание. Нужно сравнивать предыдущие и текущие значения каналов. Если текущий замер больше предыдущего - присваиваем выходному значению текущее значение. Если предыдущий замер канала окажется больше, то уменьшения на выходе должны быть на небольшую константу. От неё зависит плавность затухания. Должна быть регулируемая, чтобы пользователь мог сам настроить желаемый режим.
Примерно так... На чём программу пишите?

0

3

Спасибо за ответ, но есть вопросы.

radan написал(а):

Каналы не равномерные, а такие, как в эквалайзере, например 500 гц, 1, 2, 4 кГц - центра полос.

С этим пока не определился. Экспериментов была куча. На Ваш взгляд какой диапазон (точно) оптимален для 4-х каналов. Я уже в своей программе сделал вариант выбора пользователем диапазона частот для каждого канала. Пусть сам долбётся.

radan написал(а):

Тем самым усредняя значения в каналах.

В принципе так и делаю.

radan написал(а):

Лучше искать в них максимальные значения

Не совсем понял. По каким критериям определять макс. значения?

radan написал(а):

умножаем на определённый коэффициент усиления каналов - чем выше частота, тем больше нужно усиление.

Да, так и делаю.

radan написал(а):

Затем экспонента на каждый канал.

Вот тут не совсем понятно. Смотрел как сделано в "Кошачьем глазе", так там все под квадратный корень подведено, а я, так полагаю, что нужен логарифм?
От мерцающего безобразия я практически избавился так. В контроллер подаем 4 сигнала R G Y B. Сравниваем с предыдущими значениями. Если новый сигнал > предыдущего, включаем его без всяких заморочек, а если меньше, то начинаем его уменьшать от старого до нового значения с какой то задержкой, которую пользователь может выбирать сам. В принципе стало намного плавнее и эстетичнее.
Пишу в Delphi7, а для контроллера LUFA.

0

4

Mrshilov написал(а):

Берется первое значение, сравнивается со вторым, то которое больше сравнивается с третьим

Т.е., как я понял получаем выборки в каком то диапазоне и просто находим этом массиве максимальное значение?
Тогда получается, что в Delphi вообще ничего не нужно сравнивать. Есть функция нахождения максимального значения в массиве.
Например:
A: array[0..2048] of Double;
M: Double;
M:=MaxValue(A);

Попробуем сегодня. А вот с компрессией действительно атас. Поэкспериментируем с логарифмами переменного основания. Интересная идея, спасибо.

0

5

sva-don написал(а):

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

Правильно.

sva-don написал(а):

Поэкспериментируем с логарифмами переменного основания. Интересная идея, спасибо.

Эта идея работает весьма успешно в ЦМУ "Союз-1" - http://lightportal.at.ua/publ/cvetomuzy … 1/3-1-0-18
Попробуйте скачать программу и поизменять положение регулятора "Выход".
Результат можно увидеть на контрольных светодиодах программы.

0

6

Спасибо, сейчас попробую.

0

7

sva-don написал(а):

Поэкспериментируем с логарифмами переменного основания

Поэксперементировал  :mad: Получается, что если брать макс. значение из выборки, то в цифрах это колеблется от 0,1 до 0,0001. Все зависит от настроек микшера и проигрывателя, а Log числа<1 есть число отрицательное.  o.O Выполнить условие, когда все выборки > 1 не очень получается. Буду долбить дальше. Хотя картинка с квадратным корнем мне уже нравится. Может быть не стоит терять время? Про статью не забыл, сейчас готовлю часть 1 про плату обработки.

0

8

Ну все, черновой вариант готов. Отправил все radan-у. Кто попробует повторить и улучшить буду очень рад.

0

9

sva-don написал(а):

Отправил все radan-у.

Не получал...
Продублируй ещё раз на radan1970#gmail.com

0

10

Ок, попробую завтра.
Правда ящик ругается.
<radan1970@gmail.com>: host gmail-smtp-in.l.google.com[173.194.69.26] said:   
552-5.7.0 Our system detected an illegal attachment on your message. Please   
552-5.7.0 visit http://support.google.com/mail/bin/answ … nswer=6590 to   
552 5.7.0 review our attachment guidelines. um8si15697795bkb.113 (in reply  to end of DATA command)
Говорит, что нелегальная прищепка??? Хотя там был обычный zip.

Вот, нашел, для меня это новость! :mad:
Заблокированные типы файлов В целях защиты от возможных вирусных угроз в Gmail запрещено отправлять или получать исполняемые файлы (например, с расширением .exe), поскольку они могут содержать вредоносные коды. Также в Gmail запрещено отправлять или получать поврежденные файлы.
Какие типы файлов нельзя отправлять и получать?
"ade", "adp", "bat", "chm", "cmd", "com", "cpl", "exe",
"hta", "ins", "isp", "jse", "lib", "mde", "msc", "msp",
"mst", "pif", "scr", "sct", "shb", "sys", "vb", "vbe",
"vbs", "vxd", "wsc", "wsf", "wsh"
Gmail не принимает файлы указанных типов даже в форматах архива (.zip, .tar, .tgz, .taz, .z, .gz, .rar). Сообщения с файлами указанных форматов автоматически возвращаются отправителю.

Для пользователей Mac
помните, что в этом случае риск повреждения файлов существенно повышается. Распакуйте все файлы и создайте только один zip-файл.
: если вы пытаетесь отправить zip-файл, внутри которого находится еще один zip-файл,
Можно отправлять и получать сообщения, общий размер которых не превышает 25 МБ (включая прикрепленные файлы). Сообщения, размеры которых превышают это ограничение, не будут доставлены и вернутся отправителю.

Отредактировано sva-don (2012-02-22 21:05:17)

0

11

На файлообменник, и ссылку на почту. Или расширение поменять, например на zipp. А я по получении его приведу в нормальное.

0


Вы здесь » Программирование ATMEL в BASCOM. » Световые эффекты » USB цветомузыка.