сделал светомузыку из светодиодной RGB ленты. Убрал вывод на LCD индикатор, вместо него 8 RGB каналов.
Видео зесь, правда звук тихий получился.
Аналоговую входную часть оставил как есть, только использовал входы ADC4 и ADC5.
Входные цепи в отличии от оригинала немного изменены - конденсаторы на входе АЦП стоят, и сопротивления, чтобы при отсутствии сигнала не наводился фон. Без конденсаторов, со
средней точкой 2,5в у меня не получилось нормальной работы, каналы засвечивались.
На видео не используется восьмой канал, так как изначально я собирался сделать анализ спектра на BA3834, она должна разделять звук на 7 полос по очереди, но результат был плохой, разделение спектра вообще видно не было. Потом я занялся поиском алгоритма Фурье, и начал осваивать для этих целей Bascom, так как только на нём и на ассемблере можно было такое сваять, да ещё к тому же тут был готовый исходник. Тем более asm тяжёл для больших программ, а Bascom мне понравился, всё доступно и просто! До этого я пользовался Flowcode. Но восьмой канал есть в исходнике (на самые верхние частоты), просто у меня светодиодная ленточка отрезана на 7. Когда буду монтировать дома основательно, подключу все 8. Да, ещё забыл сказать, у светодиодной ленточки я просто вырезал края где общая + шинка идёт, и от каждого канала припаял отводы.
Исходник хорошо откомментирован, чтобы было понятно что, для чего и откуда.
Основной код по получению замеров АЦП, расчёту Фурье и вычислению уровней каналов оставлен без изменений.
Автоматическая регулировка чувствительности программная (меняется множитель на выходе DFT преобразования).
Прерывания таймера 0 работают на динамическую развёртку каналов светодиодной ленты (предделитель 8). Частота обработки сигнала получается около 200 гц. Цвета
каналов фиксированые, не придумал ещё как их менять в зависимости от музыки...
Обьясню алгоритм работы АРУ:
Идёт счёт количества каналов где уровень сигнала < 6, когда количество в счётчике превышает 20 идёт увеличение уровня на 0,1 (на 10%)
То же самое на уменьшение, только счёт идёт когда уровень >8.
Реализация ШИМ 3Х8:
Шим реализован на подпрограмме обработки прерывания Pwm, которая включается по таймеру TMR0.
Переменная Tik, по которой контролируется ширина импульса ШИМ начинается с 16 и убавляется по началу подпрограммы. Когда Tik = 0, она снова сбрасывается на 16, выключаются
выхода R,G,B и в порт D передаётся значение переменной Razv (динамическая развёртка по каналам, каналы последовательно переключаются с 1 по 8).
Когда значение текущей яркости цвета текущего канала (R_out, G_out, B_out) сравнивается с переменной Tik, цветовой выход(R,G,B) отключается.
Резонный вопрос, почему у меня переменная идёт на убывание? Ответ: Если переменную сделать на возрастание, то прийдётся включать выход, а по сравниванию значений выключать. И
при значении мощности = 0 светодиод будет включен на время нескольких тактов микроконтроллера, а если учесть что используются ещё и другие прерывания то и на большее время.
Визуально это выглядит как слабое хаотичное мерцание каналов, при уменьшении переменной и включении выхода по сравнению - такого нет. Я правда подозреваю что мощность будет не
100%, но визуально это в отличие от мерцания не заметно. Чтобы переключать управление каналами сперва делается развёртка по каналам. Самый простой способ - значение переменной Razv начинается с 1 и умножается на 2 при каждом цикле переменной Tik. По достижению 256 - сбрасывается на 1. в двоичном коде это и получается последовательное переключение каналов порта D. Значение переменной Razv и пересчёт мощности следующих цветовых каналов развёртки происходит при значении переменной Tik = 1. Чтобы когда прийдёт пора переключиться на другой канал (Tik =0) всё было уже посчитано и подпрограмма обработки прерывания Pwm прошла быстрее.
Как появятся изменения в программе (что нибудь добавлю или усовершенствую) исходник сразу выложу.
При повторении с этого исходника всё должно заработать абсолютно сразу.
Как всегда тихий звук, не пишет у меня телефон видео с нормальным звуком. :((
Вернул на место 10-битные АЦП (ADC0 и ADC1), сделал среднюю точку и доработал польский алгоритм , помог очень MrShilov, спасибо ему! Частотный анализ стал намного лучше!
Место в программе освободил побольше.
Восьмой канал тоже убрал, не вижу в нём необходимости, под бегущие огни всё равно ресурсов не хватает...
Алгоритм работы АРУ немного поменялся (считается общая мощность по всем 7 каналам, затем сравнивается), исполнительное устройство - полевой транзистор с конденсатором на затворе. Экспериментальным путём подобрал такое время задержки, при котором на любой громкости нет плавания уровня (несколько секунд). Конденсатор либо заряжается (Pinb.4 =1) либо разряжается (Pinb.4 = 0), а если уровень в норме, то Pinb.4 работает как input. В паузе чувствительность повышается ( на Pinb.4. = 1). Полностью независимое от контроллера АРУ делать не стал, потому как сложнее и результат, я думаю, визуально хуже будет.
Цветовая гамма каждого канала зависит от переменной cvet, имеется 6 режимов:
1. примерно к-о-ж-з-г-с-ф и сдвиг цвета в каждом канале в зависимости от уровня канала
2. то же самое, только сдвиг больше
3. то же что п.1, только примерно ф-с-г-з-ж-о-к
4. то же что предыдущий, только сдвиг больше
5. все каналы одного цвета, цвет меняется в красную сторону в зависимости от НЧ, в зелёную от СЧ и в синюю от ВЧ,
всего 4 канала: крайние 1 и 7 - НЧ, 2 и 6 СЧ, 3 и 5 - СЧ2, 4 - ВЧ.
6. Случайный цвет
При включении режим №1, при каждой паузе режим меняется, можно так же кнопкой.
EEPROM пока не использовал. На данный момент занято в Atmega8 96%. Ещё есть небольшие но возможности.
В общем я чувствую, что чего то не хватает, и можно сделать покрасивее, но до середины января у меня времени больше не будет, так что пока выкладываю на чём остановился. Буду очень рад советам...
ВЕРСИЯ 2 strobo.
Выкладываю изменённую версию ЦМУ - исправлена схема входной части(там, где АРУ), добавлен режим стробоскопа - частота зависит от темпа НЧ.
Мы рады, что проект развивается и вы делитесь с обществом. Удачи вам в следующем году и новых успехов в цветомузыкостроении!
В Новом году нужно Мегу 168 или 328 использовать, без изменения в схеме. Тогда будет где развернуться и можно многое добавить!
P.S.
Юрис cобрал и запустил RGB цму конструкцию и выслал фотки.
Выходного устройства пока никакого, пробовал по каналам одним RGB светодиодом.
По выходным собрал линейку из таких диодов.
ВЕРСИЯ 2b strobo+ .
По просьбе Юриса доработал немного программу и добавил ещё одну кнопку: в режиме музыки - вкл/выкл авто смены режимов ЦМУ, а в режиме паузы - вкл/выкл еффектов паузы. Также устранил некорректный вывод красного первого канала. Схема с добавленной кнопкой, исходник и hex в архиве.
Элементы подписаны - смотрите всплывающую подсказку. Часть элементов - СМД, просто так было удобнее. Но можно переделать полностью под ДИП, основа есть.
Категория: Мои статьи | Добавил: bascom (06.12.2012)
| Автор: Radan
При программировании фьюзов USB Basp(Pony Prog ни одной галки ) кристалл пропадает для программатора пишет "ошибка" пришлось параллельно перепрошивать от здоровой ATmega8! Кто-нибудь подскажет причину такой беды?На USBasp установлен кварц 12Мгц для внешнего генератора...
Уважаемые спецы ...Подскажите...Восьмой канал по схеме снимается с 11 ноги TD ,на печатной плате с 16 ,где правильно?Решил переделать печатную плату исходя из имеющихся в статье наработок на DIP ,ну соответственно исключить 8 канал т.к. он по сути отсутствует .Какой максимальный ток дает TD на канал (сколько светодиодов можно повесить?) стоит ли вводить второй корпус TD, ну скажем если использовать 10 светодиодов пиранья в канале?Ну если у кого есть переделанная окончательная плата DIP буду очень благодарен.Прибор привлёк ,жаль только как -то не завершён...,не доведён до конца...Сам не спец,поэтому прошу помощи .Спасибо!
Здравствуйте, коллеги. Автору устройства благодарность! Некоторые мои соображения: 1. Конечно, функционал схемы надо использовать по максимуму. Вследствие этого 8-ой канал необходимо вернуть. 2. Режим "стробоскоп" исключить. 3. Включение режима в паузе необходимо сделать мягким, плавным. 4. При использовании линейного входа, необходимости в АРУ нет. При использовании микрофонного усилителя, в нем должено быть реализовано глубокое АРУ. 5. Кнопками надо регулировать не режимы, а плавность (скорость) переключения. Предлагаю всем, кто заинтересовался данным устройством, подключиться к модификации программы.
Вы правы, увлечённо занимаюсь новыми наработками... Правда в новой конструкции... А по поводу просьб по изменению прошивки извините, ещё руки не дошли, дело не в сложности что то изменить, а в том что нужно ведь после этого проверить, на это нужно время и желание. Но всё таки обещаю переключиться и доделать что наобещал.
Желаю успехов в новых конструкциях! Не надо специально отрыватся для модернизации старой Я лично пока прошил версией ниже, где не было Стробо. Правда, мерцание диодов более заметно. Если не секрет, что намечаетса в новой разработке? Спасибо!
Посоветовался с Василием, объясню в двух словах про новую СМУ. Будет 21 канальная тоже на RGB ленте,два микроконтроллера Мега8 и Мега 16 и ещё планируется плата индикации на дисплее от Нокиа1100. В конструкции карта памяти CD для эффектов бегущих огней (сами эффекты пишуться в "Блокноте"), пульт ДУ RC5, энкодер для задания режимов без пульта. В самой СМУ алгоритм Аврора, такое же DFT как в этой конструкции, режимы работы комбинированые. Пример некоторых планируемых режимов работы: '0 - эффекты отключены, плавно зажигается белая подсветка '1 - уровень каналов через DFT, цвет фиксированый '2 - уровень каналов через DFT, цвет случайный '3 - уровень каналов через DFT, цвет с алгоритма "Авроры" '4 - уровни через DFT (1,21-НЧ и т.д.;11-ВЧ) цвет всех каналов одинаковый и зависит от уровней частотных составляющих '5 - При превышении определённого уровня звукового канала (DFT) - включение выхода на полную мощность, цвет из алгоритма "Авроры" '6 - белый стробоскоп, частота определяется музыкой (компаратор) '7 - цветной стробоскоп, частота определяется музыкой (компаратор), цвет из алгоритма "Авроры" (НЧ канал) '8 - '9 -
'------------- использование карты памяти ----------------------------
'10 - уровень каналов через DFT, цвет с файлов эффектов '11 - уровень каналов из файлов эффектов, цвет из алгоритма "Авроры" '12 - уровень каналов из файлов эффектов, цвет всех каналов одинаковый и зависит от уровней частотных составляющих (как в "3") '13 - уровень и цвет из файлов эффектов, темп смены эффектов определяется музыкой (компаратор) '14 - только эффекты с карты памяти, случайный выбор '15 - эффекты с карты памяти, последний по кругу '16 - '17 -
'----------------------- фон ----------------------------
'20 - постоянно включены все каналы, яркость и цвет регулируются с пульта '21 - постоянно включены все каналы, яркость регулируются с пульта, цвет медленно меняется (быстро сменить можно с пульта) Потом посмотрим что ещё добавить, если у кого какие мысли есть - предлагайте.
О да. Это что-то. Предлагаю название устройства: "ЧМНП" - "Чтоб' Мало Не Показалось" Ну это конечно добрая шутка. Я позитивно ошеломнён новостями. Желаю чтобы всё получилось да и собственно я уверен, что получитса
Одно размышление / пожелание. Когда конструкция очень многоканальная, как "Кошкин Глаз" и как эта 21-канальная конструкция будущего, появляетса (это я конечно о себе, субъективно) желание в режиме цветомузыки опции с меньшем числом каналов, цветов, как бы более дискретную картину цветового представления. Мне лично симпатизируют количества частотных каналов 4...6. Повторусь - конечно, только как одна из опций. У множества каналов и множества цветов своя привлекательность. 21 мало на что делитса поровну, но навеврное можно хитрить с неодинаковым количеством диодов на условный канал, скажем 4-4-5-4-4.
Ну почему же не делится? На 3 и на 7. Можно 3 канала(RGB) продублировать 7 раз, можно 7 каналов(Радуга) продублировать 3 раза. Я думаю, что это всё будет реализовано.
Скажите, в схеме и программе ориентировка именно на +2,5 вольт, или половину питающего микросхемы? У меня там питание подаётса через диод Шотки, для защиты от меня же (от обратного включения), ну и половинка соответственно 2,38 вольт. Сейчас вспомнил, когда я делал конструкции "АВРОРА-1", в одном случае я ставил подстроечник там где на входе делитель 12кОм и 36кОм, чтобы в паузе "огоньки не ползали". Может тут похоже. Я приболел, нету сил экспериментировать сейчас