Воскресенье, 11.12.2016, 12:59
Приветствую Вас Гость

Портал светоэффектов

Меню сайта
Категории раздела
Наш опрос
Оцените мой сайт
Всего ответов: 580
Статистика

Онлайн всего: 7
Гостей: 6
Пользователей: 1
Петрин
Форма входа
Главная » Статьи » Цветомузыкальные установки

Цветомузыкальное устройство, управляемое по USB
Часть 1
Микроконтроллерная плата. 
 
Начать описание своей разработки мне захотелось с отрывка из стихотворения, которое, как мне кажется, очень точно описывает саму суть. Итак:
Вот на экране - цвета синей рани -
Кристаллов переливчатые грани
Полифонично зазвучали вдруг!
И видел я, как в их игре спектральной,
Пленяя души связью изначальной,
Цвет фантастично превращался в звук.
 
 [Линник Ю. В. Светомузыка. - Техника молодежи, 1975, № 11, с. 17.].
 
ВВЕДЕНИЕ
 
Не ошибусь, если скажу, что практически все радиолюбители с более или менее приличным стажем хоть один раз, но пытались собрать цветомузыкальное устройство (ЦМУ). За прошедшие годы было создано не мало таких устройств, как аналоговых, так и цифровых, но со временем интерес к ним угас. Думаю, что это связано с практически полной отработкой схемотехнических решений, так что для творцов не осталось поля деятельности.
Сегодня интерес к цветомузыкальным устройствам вновь переживает ренессанс. Достаточно набрать в поисковой машине заветные слова и вам на выбор будет предложено такое количество ссылок, которые не просмотреть и за год. К моему великому сожалению подавляющее большинство таких ссылок ведут начинающих "цветомузыкантов" в тупик. Это либо элементарные моргалки на простейших фильтрах, а то и без оных, либо это пространные обсуждения в форумах, как это бы должно быть сделано. Те немногие устройства, которые приглянулись мне подчас сложны в схемотехническом плане и малодоступны для повторения начинающими радиолюбителями, поэтому я и принял решения попытаться создать еще один вариант цветомузыкального устройства.
Дабы идти в ногу со временем было решено делать ЦМУ на базе широко распространенного  микроконтроллера AT90USB162. Это позволит прилично снизить количество радиодеталей и упростить схему до минимума. 
Еще одним новшеством  является использование шины USB для управления. Правда отсюда вытекает и некоторое ограничение использования нашего устройства, т.к. данные о параметрах музыки мы сможем брать только из персонального компьютера. Никаких внешних подключений аналоговых сигналов в данной разработке не предусмотрено (хотя ничего не мешает расширить функциональность введением такого входа). 
Микроконтроллер имеет на борту 16К памяти программ и 512 байт памяти данных, что с лихвой хватит для осуществления нашей задумки. Самым главным критерием выбора является присутствие полнофункционального USB интерфейса, что значительно снижает трудоемкость программирования и практически полностью исключает сбои в работе, что очень часто наблюдается в программных реализациях шины USB. 
В контроллере имеются два таймера 8-ми разрядный TIMER0  с двумя выходами PWM и 16-ти разрядный TIMER1 с тремя выходами PWM. К сожалению разработчики объединили выводы OC0A и OC1C, что исключает возможность использования 5 выходов PWM одновременно, но для нашей задачи хватит и 4-х выходов. Оба таймера мы будем использовать в режиме 8-ми разрядной PWM, т.е. количество градаций яркости будет 255.
Управление нашим устройством будет осуществляться внешней программой, которая будет описана во второй части.
Плата является HID устройством и не требует драйверов для своей работы.
 
ОПИСАНИЕ СХЕМЫ
 
Приступим к рассмотрению схемы устройства. 
 
 
"Сердцем" устройства является микроконтроллер AT90USB162 фирмы "Atmel" с аппаратным USB на борту. Внешняя обвязка включает в себя кварцевый резонатор Х1 частотой 8 МГц с конденсаторами С2 и С3. Схему сброса при включении питания R1 и С1. Через разъем J1 шины USB на схему подаются питание и данные. Шина данных развязана через резисторы 22 Ома. Светодиод D1 сигнализирует о корректном определении устройства в компьютере. Включение этого светодиода сигнализирует об удачном подключении.
Резистор R4 и конденсатор С5 образуют цепочку простейшего АЦП, при помощи которого производится начальная инициализация генератора случайных чисел.
Резисторы R6 – R13 и транзисторы Q1 – Q4 образуют ключевой каскад для подключения 4-х светодиодов. Максимальный ток ключа не более 500 мА, что позволяет подключить к устройству светодиоды мощностью до 1 Вт. Данный тип транзисторов выбран только исходя из их стоимости и доступности. По возможности их лучше заменить на MOSFET транзисторы. Например использование  2-х сборок IRF7101, которые включают в себя два транзистора позволят получить ток до 3,5А! При этом сопротивление канала открытого транзистора составляет не более 0,1 Ома, что снижает рассеиваемую транзистором мощность до минимума.
Всего в устройстве сформировано 4 цветовых канала. D2 — желтый. D3 — красный. D4 — зеленый. D5 — синий. 
С6 — С9 конденсаторы фильтров по питанию.
На плате предусмотрен разъем ISP для внутрисхемного программирования.
 
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
 
Внутреннее ПО контроллера основывается на одной из лучших библиотек LUFA.
LUFA переводится как Lightweight USB Framework for AVRs, т. е. "облегченная рабочая среда USB для микроконтроллеров AVR" (старое название библиотеки MyUSB). Это библиотека и примеры программ (все с открытыми исходными кодами, разрешающая лицензия MIT), реализующие полный стек протоколов USB на микроконтроллерах ATmel, которые имеют аппаратную поддержку интерфейса USB - серии AT90USBxxxx and ATMEGAxxUx, например AT90USB162. 
Библиотека LUFA написана специально для бесплатного компилятора AVR-GCC и использует некоторые выражения языка, специфичные только для GCC - чтобы сделать интерфейс API библиотеки более наглядным и упрощенным. В среде Windows для использования AVR-GCC можно свободно скачать и использовать пакет WinAVR. 
В архив библиотеки LUFA добавлены многочисленные примеры демонстрационных программ, которые показывают, как использовать библиотеку. 
Полная поддержка аппаратных средств: LUFA поддерживает весь ряд микроконтроллеров AVR USB Atmel, с портированием между микросхемами, являющимися во многих случаях столь же простым, как единственный переключатель компиляции (makefile -> MCU). 
Лучшая поддержка Библиотеки: так как множество людей используют LUFA, вокруг этой библиотки появилось сообщество. Вы можете быстро получить ответы на вопросы, связанные с LUFA электронной почтой от автора библиотеки, или отправив запрос на официальный LUFA support mailing list. LUFA не единственный (хотя наверное, наилучший) стек, доступный для AVR USB.
Из этой библиотеки мы будем использовать стек HID устройства.
Программа состоит из 4-х файлов. 
Главная программа — ColorMain.c
Файл описания дескрипторов -  Descriptors.с
Заголовочный файл — ColorMain.h
Заголовочный файл — Descriptors.h
Эти файлы расположены в папках Soft MC/Software.
В папке LUFA располагаются все библиотеки и необходимости корректировать там что либо нет. При компиляции все , что нужно будет подключено автоматически. 
В связи с полной неразберихой назначения VID и PID (по крайней мере для меня) было принято решение "изобрести" свои значения. Для данного устройства они выбраны такими: 
/** VID and PID */
#define GENERIC_VID   0xFAFA
#define GENERIC_PID   0x0003
При необходимости их можно изменить в файле Descriptors.h. Там же любопытные любители могут отыскать другие параметры настройки репортов USB. Полные описания репортов находятся в файле  Descriptors.с.
 
ФУНКЦИИ КОНТРОЛЛЕРА
 
Какие же функции скрыты внутри микроконтроллера?
1. "Ручной".  В этом режиме можно регулировать яркость всех 4-х каналов вручную. Светодиоды будут постоянно светиться с установленной яркостью. Количество градаций 255. 
0 — светодиод выключен, 255 — максимальная яркость.
2. "Автомат".  В этом режиме цвет и скорость его изменения выбирается случайно. Настройке подлежит диапазон выдержек скорости.
3. "По времени". В этом режиме цвет выбирается случайным образом, а время его изменения постоянно и может быть изменено. т.е. переливы случайного цвета с заданной задержкой.
4. "ЦМУ". В этом режиме цвет синхронизируется с музыкой, проигрываемой на РС. Настройке подлежат время затухания (инерционность светодиодов), коэффициент АРУ, а так же яркость, цвет и время включения фоновой подсветки в паузах между музыкальными произведениями..
Более подробно рассмотрим эти режимы при описании ПО.
Взаимодействие микроконтроллера с системой верхнего уровня (СВС) организовано по шине USB.
От СВС в микроконтроллер поступают 16 байт. Рассмотрим их более подробно.
Внутри микропроцессора сформирован массив из 16 байт для хранения принятых команд.
Байты 0 - 3 (R G Y B) – управляют яркостью каналов красного, зеленого, желтого и синего цветов соответственно. Диапазон изменения 0 – 255. 
R=ReportData_u8[0];  
G=ReportData_u8[1];
Y=ReportData_u8[2];
B=ReportData_u8[3];
 
Байты 4 - 7 (Rf Gf Yf Bf) – управляют яркостью и цветом канала фона.  Диапазон изменения 0 – 255. Если устройство работает в режиме "ЦМУ", то установкой этих байтов можно подобрать цвет и яркость канала фоновой подсветки, которая включается при отсутствии музыки.
Rf=ReportData_u8[4];  
Gf=ReportData_u8[5];
Yf=ReportData_u8[6];
Bf=ReportData_u8[7];
 
Байт 8 (Regim) - переключает режимы работы устройства. Код команды следующий:
0 - Устройство выключено, все светодиоды погашены.
1 - Режим Автомат. 
2 - Режим Ручной.
3 - Режим ЦМУ.
4 - Режим По времени. 
Regim=ReportData_u8[8]; 
 
Байты 9 и 10 (Zmax, Zmin) - Устанавливают диапазон генерации временных задержек в режиме Автомат. При этом необходимо следить, чтобы всегда выполнялось условие Zmax > Zmin. Диапазон изменения 1 — 255. Для перевода значений в секунды можно использовать следующую формулу: Тзад = (Zmax(Zmin) x 255)/1000 сек. 
При работе устройства в режиме Автомат программа генерирует случайное число в этом заданном диапазоне, которое потом используется для задержки смены цвета. Т.е. например если Zmax = 39(~10 сек), а Zmin = 5(~1 сек), то время задержки изменения цвета будет выбираться программой в диапазоне от 1 до 10 сек. 
Zmax=ReportData_u8[9];     //Макс. задержка
Zmin=ReportData_u8[10];    //Мин. задержка
 
Байт 11 (Tim)- управляет временем изменения цвета в режиме По времени. Т.е. работа устройства аналогична работе в режиме Автомат, но время задержки переключения цвета не выбирается из диапазона Мах и Мин, а задается этим байтом.
Tim=ReportData_u8[11];  
 
Байты 12 — 15 управляют временем затухания цвета и временем включения фоновой подсветки. Тип используемых переменных WORD, поэтому для передачи этих параметров их разбивают на два байта. Hi...- старший байт параметра, Lo...- младший байт.  Физический смысл параметра затухание можно описать так. В связи с тем, что инерционность у светодиодов практически отсутствует, то при работе в режиме ЦМУ это приводит к малоприятному для глаз резкому изменению цвета. Картинка как бы "отрывается" от музыки, что есть не хорошо. Введение искусственной инерции для светодиодов позволяет сгладить эту резкость, в результате чего глаза не устают.
Время (плавность) включения фоновой подсветки можно также регулировать, что позволяет при окончании музыки включать фон плавно с заданной задержкой. Это также приводит к повышению зрелищности цветовой картинки. Цвет и яркость фона выбирается байтами 4-7, как описано выше.
Hizat=ReportData_u8[12];     //Затухание цвета Hi
Lozat=ReportData_u8[13];     //Затухание цвета Lo
Hizatf=ReportData_u8[14];    //Время включения фона Hi
Lozatf=ReportData_u8[15];    //Время включения фона Lo
 
Так, как эти параметры передаются в виде байтов, а нам необходимы параметры в формате WORD, то из байтов соберем слово, используя нехитрое преобразование.
HiZat=Hizat * 256 + Lozat;
HiZatf=Hizatf * 256 + Lozatf;
 
Необходимо отметить, что подключение контроллера к порту USB без передачи в него какой  либо информации запустит его программу в режиме Автомат с предустановленными настроечными параметрами.
 
ОПИСАНИЕ ПРОГРАММЫ
 
Приступим к подробному рассмотрению программы контроллера.
Так как библиотека LUFA, на которой и базируется наше устройство, написана специально для бесплатного компилятора AVR-GCC то и мы будем использовать данный компилятор в среде WinAVR. Мы не будем здесь останавливаться на ньюансах установки, настройки и использования данной среды. Заинтересованный читатель может самостоятельно найти всю интересующую его информацию в интернете.
 
Вот вкратце более или менее подробное описание устройства микропроцессорной платы управления. Во второй части статьи будет рассмотрена управляющая программа для нее.
 
 
Часть 2
Программа управления. 
 
ВВЕДЕНИЕ
 
В предыдущей статье я постарался наиболее полно дать описание микроконтроллерного устройства для реализации различных светодинамических эффектов.
Во второй части мы остановимся на реализации программы управления
В качестве среды программирования мною был выбрана Delphi 7, как наиболее близкая мне по духу. "Продвинутые" пользователи, основываясь на описании протокола (описанного в первой части), могут реализовать свой алгоритм обработки сигналов используя совершенно любые среды и языки программирования.
Так, как наше устройство является устройством типа HID, то качестве базового компонента для работы с ним я взял TjvHidDeviceController из известной и, что не мало важно, бесплатной библиотеки JEDI Visual Component Library, которую можно совершенно свободно скачать с сайта http://jvcl.delphi-jedi.org. Кстати, в этой библиотеке просто куча всяких красивых и полезных компонентов, которые я и использовал для своей программы.
Компонент  TjvHidDeviceController весьма удобен в применении. Он освобождает программиста от кучи не нужного кода. Огромное спасибо его разработчикам. В данной статье я не буду подробно описывать все его свойства, т.к. это совершенно отдельная задача и все желающие могут самостоятельно найти и изучить его возможности.
Программа не требует инсталляции. Скопируйте ее в нужное вам место и запустите. Не удаляйте файл set.dat, в нем хранятся все настройки программы.
 
ОПИСАНИЕ ПРОГРАММЫ
 
На рисунке представлено главное окно со всеми органами управления.
 
 
Рассмотрим его более подробно. Хотя, забегая вперед должен отметить, что я постарался максимально облегчить пользование программой. При наведении курсора мыши на любой элемент управления будет появляться подсказка для чего предназначен тот или иной элемент.
В верхней части окна находится панель информации о подключаемом устройстве. Слева название производителя, описанное в программе микроконтроллера, как строковая константа 
const USB_Descriptor_String_t PROGMEM ManufacturerString =
{
.Header = {.Size = USB_STRING_LEN(LEN_MANUFACTURER), .Type = DTYPE_String},
.UnicodeString          = GENERIC_MANUFACTURER
};
и используемая в дескрипторе устройства.
Посередине название устройства, также описанное в программе микроконтролеер а в виде:
const USB_Descriptor_String_t PROGMEM ManufacturerString =
{
.Header = {.Size = USB_STRING_LEN(LEN_MANUFACTURER), .Type = DTYPE_String},
.UnicodeString          = GENERIC_MANUFACTURER
};
Эти строки появляются только при подключении и правильном определении устройства в системе. Справа находится индикатор успешного (или не успешного) подключения.
Перепрыгнув все окно посмотрим на панель, находящуюся в самом низу. В ней слева направо отображаются:
1. Версия программы микроконтроллера (принимается из МК).
2. Сообщение о том, что устройство подключено или не найдено.
3. Серийный номер устройства. Ввод серийного номера я ввел не случайно. Дело в том, что пресловутые VID и PID значения дело весьма запутанное и для того, чтобы максимально развязаться с ними и для исключения возможности возникновения конфликта с одинаковыми VID и PID я определяю свое устройство в системе именно по серийному номеру. Для данного устройства используется серийный номер представленный на картинке.
Программа и, естественно микроконтроллер, реализует 5 программ управления светодиодами, которые выбираются путем нажатия на соответствующие кнопки, расположенные в правом нижнем углу.
1. Автомат.
2. Ручное управление.
3. Цветомузыкальное устройство.
4. По времени.
5. Выключить светодиоды.
При выборе того или иного режима работы все не нужные в данный момент органы управления отключаются, что не дает возможности испортить логику работы и предотвратить зависание программы.
Нажатием кнопки СОХРАНИТЬ мы сохраняем все установки программы и при следующем включении параметры будут восстановлены именно в том виде, в котором они сохранялись.
Рассмотрим их по порядку.
 
АВТОМАТ.
В этом режиме лампа выбирает цвет и скорость его изменения по случайному закону. Диапазон выбора скорости перелива цвета можно задать переключателями панели "Задержки". Случайная скорость будет выбрана из диапазона заданного между минимумом и максимумом. Для перевода значения переключателей в секунды необходимо его значение умножить на 255 и разделить на 1000. Например, для данного примера: 39 х 255 /1000 = 9,94 сек.  5 х 255 / 1000 = 1,27 сек. В данном случае скорость изменения цвета будет выбираться в диапазоне от 1,27 до 9,94 сек.
Вы можете выставить этот диапазон в соответствии со своими предпочтениями.
При работе в этом режиме ползунки будут устанавливаться автоматически в зависимости от состояния внутренних регистров контроллера показывая режим его работы. Окна справа от ползунков отображают значения яркости каждого канала. В панели "Задержка" будет отображаться величина задержки изменения цвета, которую "сгенерировал" контроллер.
 
РУЧНОЙ.
В этом режиме свет будет постоянным, а его цвет и яркость можно вручную задать ползунками.
Перескочив режим ЦМУ, перейдем в режим ПО ВРЕМЕНИ. В данном режиме цвет меняется случайным образом, а время его изменения задается розовым ползунком. При этом можно получить весьма интересный эффект. 
 
Ну и на сладкое режим ЦМУ.
При переходе в данный режим программа через стереомикшер перехватывает все звуки компьютера и пытается синтезировать из них некую цветовую картину.
Поэтому для начала необходимо правильно настроить стереомикшер вашего компьютера. Я не буду подробно рассказывать, как это сделать. Для тех, кто не сможет сам его настроить, даю ссылку на весьма подробное описание этой процедуры.
Как видите в данном режиме органов управления значительно добавилось. Это связано с тем, что автор сделал попытку дать возможность пользователю максимально воздействовать на весь процесс формирования цветовой картинки.
Ну что же, начнем описание.
Справа находится 16-ти полосный индикатор спектра. В нем удобно анализировать исходный музыкальный материал. При перегрузке цвет столбиков становится сначала желтым, а при увеличении уровня сменяется на красный. Уровнем отображения можно управлять при помощи регулятора УСИЛЕНИЕ. Сам индикатор не оказывает никакого воздействия на формируемую цветовую картинку, но под ним находятся 4 серых панельки, которые индицируют возникновение перегрузки в  каналах цвета, что при большой перегрузке приводит к ухудшению динамики изменения цвета. Проще говоря если те или иные панельки начнут мигать своим цветом, а то и вовсе будут гореть постоянно, необходимо убрать усиление в канале при помощи ползунков. Кратковременные вспышки можно игнорировать.
Вверху слева находятся 4 ползунка для регулирования уровня сигнала в 4-х цветовых каналах. Справа от них можно наблюдать значение коэффициента усиления в каждом из каналов. 
Правее от ползунков располагаются 4 пары регуляторов, при помощи которых можно полностью поменять частотный диапазон каналов в соответствии со своими предпочтениями. Процесс настройки наглядно отображается в средней части окна программы в виде некой диаграммы.
Под регуляторами в панели с названием УПРАВЛЕНИЕ ФОНОВОЙ ПОДСВЕТКОЙ можно выбрать цвет фона. Т.е. тот цвет, который включится при отсутствии звукового сигнала на входе. Слева от цветных регуляторов находится регулятор времени задержки включения фона. Им можно выбрать "плавность" его включения, дабы убрать неприятные моргания при кратковременных пропаданиях звука.
Слева пользователь может выбрать тип компрессии сигнала и степень сжатия в режиме логарифм. Просто поэкспериментируйте с этими регулировками и найдите устраивающую вас картинку.
Регулятор ЗАТУХАНИЕ вводит некоторую инерционность включения и выключения светодиодов, которые в отличии от ламп накаливания ее не имеют и поэтому без искусственной задержки цветовая картинка получается резкой и не приятной для глаз. Для быстрой композиции ее можно уменьшить, а для медленной лучше увеличить. Вы сами увидите степень ее воздействия на формирование цвета и быстро научитесь пользоваться ею.
Регулятор ЗАДЕРЖКА определяет время извлечения выборки звукового спектра. Установите его так, чтобы цветовая картинка была максимально динамичной, но не резкой и не приятной для глаз.
Ну и регулятором АРУ можно также "подправить" процесс формирования цвета. Он воздействует не так явно, как другие, но иногда можно поиграть и им. В любом случае его наличие нисколько не ухудшает функциональность всего устройства.
Вот в принципе и все. Осталось еще раз напомнить, что все ваши настройки можно сохранить кнопочкой СОХРАНИТЬ.
 
Часть 3
Обмен по USB
 
ВВЕДЕНИЕ
 
В двух предыдущих статьях я постарался наиболее полно дать описание микроконтроллерного устройства для реализации различных светодинамических эффектов и его программы управления. 
Поступило предложение более подробно раскрыть механизм взаимодействия программы и микроконтроллера, что я попытаюсь сделать в третей части описания. 
Как было сказано раньше в качестве базового компонента для работы с HID USB я взял TjvHidDeviceController из известной и, что не мало важно, бесплатной библиотеки JEDI Visual Component Library, которую можно совершенно свободно скачать с сайта http://jvcl.delphi-jedi.org. 
В данной статье мы не будем останавливаться на всем многообразии применения данного компонента, а изучим минимально необходимый набор функций, которые помогут начинающим начать писать собственные программы для взаимодействия своих устройств с компьютером по шине USB.
 
ОПИСАНИЕ ФУНКЦИЙ
 
Все не один раз наблюдали, как при подключении какого либо USB устройства к компьютеру появлялось сообщение, что найдено некое устройство и через некоторое время оно было готово к работе. Такая автоматизация очень сильно упрощает нашу жизнь. Вот и мы попробуем написать такую программу.
Для начала создадим чистую форму и поместим на нее компонент  TjvHidDeviceController. В окне инспектора объектов заменим его имя на более удобоваримое, например HIDCtl.
Поместим на форму кнопку для инициации процедуру записи и метки Label для вывода сообщений. Вот в принципе все готово для начала кодирования.
Вот в принципе и все, что нужно знать для выполнения простеньких задач по обмену данными между компьютером и микроконтроллером по шине USB. Ведь действительно не сложно? 
Отмечу, что мы охватили только малую часть возможностей замечательного компонента  TjvHidDeviceController. Желающие более подробно разобраться со всем его возможностями найдут всю необходимую информацию в интернете.
 
Дополнительные материалы - код контроллера, программа управления.
 
Если у желающих повторить это устройство появятся вопросы, с удовольствием на них отвечу. Можете писать на почту sva-don@yandex.ru
Принимается так же конструктивная критика и советы по улучшению устройства.
 
P.S. Т.к. Delphi 7 не поддерживает Unicode, то у пользователей англоязычной версии ХР возникают проблемы с отображением русского языка. Для устранения проблемы в настройках Языки и региональные настройки на вкладке Региональные настройки необходимо установить русский язык. Полная ссылка http://novikovmaxim.livejournal.com/135472.html
 
P.S. Вторая версия программы. Программа для РС без исходника. Для МК полная, с исходниками.
 
С уважением, Степанов Владимир.
 
Категория: Цветомузыкальные установки | Добавил: defaultNick (25.02.2012) | Автор: Radan
Просмотров: 12309 | Комментарии: 50
Всего комментариев: 50
49  
Спасибо за обновление! Я как то пропустил новость об этом раньше. Теперь будем смотреть smile

50  
Самое главное, чтобы пользователи не молчали. Попробовал, разнес конструкцию в пух и прах, чтобы потом не повадно было. biggrin Шутка конечно. Хочется прочитать в отзывах все о недостатках и пожеланиях того, что человек не нашел в данной конструкции.

48  
Здравствуйте. Сегодня столкнулся с такой проблемой: при загрузке главной формы происходит подключение к USB устройству, передаются ему какие-то данные. Тут все хорошо работает. Но вот есть еще одна форма, при открытии которой тоже должны передаваться данные, но не получается.(при этом во второй форме я создаю новый экземпляр:
Form1 Peredacha = new Form1();
byte[] data = { 0, 1, 2 };
Peredacha.usbHidPort1.SpecifiedDevice.SendData(data);)
А не получается потому что во второй форме не видит устройство если до этого оно уже было найдено в главной форме. Если же сделать поиск устройства сначала во второй форме, попередавать данные и вернуться в главную форму, то теперь главная форма не будет видеть устройство. Может подскажите в чем дело, а то я помоему никогда не догадаюсь. Заранее спасибо.

42  
Сделал вторую версию данной программы. На мой взгляд работает лучше. Пока нет времени оформить статью. Кому нужно обращайтесь. Программа для РС без исходника. Для МК полная, с исходниками.

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

44  
Отправил на почту.

0
45  
Спасибо, разместил в конце статьи.
Попробовал, действительно работает лучше чем первая версия.
Но как по мне так каналов бы побольше, благо железо позволяет. smile

46  
Я попробую. У меня есть начало на 8 каналов. В принципе если быстродействие позволит, то почему и нет. Хотелось бы услышать конструктивную критику. Что не хватает, что лишнее. Иногда так на одном зациклишься, что потом ничего в голову не лезет.  biggrin

47  
Забыл написать, что железо нужно поменять. В 162 всего пять PWM каналов. В ATmega32U6 их уже 7. А еще лучше АТ90USB1287. Но когда все успеть? wacko

40  
Привет! Если я куплю вот эту плату http://ru.aliexpress.com/item/Free-Shipping-1pc-Teensy-USB-development-board-AVR-MKII-ISP-download-cable-AT90US B162/1215168990.html и прошью вашей прошивкой, будет работать?

41  
Да, будет.

33  
Подскажите начинающему, залил вашу прошивку в контроллер и все норм, комп нашел устройство. Но я хотел на основе вашего примера, собрать свое устройство. Мне необходимо передавать 20 байт в сторону МК и несколько байт обратно. Проблема состоит в том, что я не умею работать в WinAVR, поэтому пытаюсь собрать хотя бы ваш проект (для того чтоб понять как и что) в AVR Studio 4. При компиляции вылазит вот эта ошибка: ColorMain.h:46:26: fatal error: avr/iobits.h: No such file or directory
На каком то форуме читал что если брать проекты из WinAVR то надо менять Toolchain на WinAVR, а как это сделать не понял. Может подскажите? А вот если собирать пример из библиотеки Lufa под названием GenericHID то вроде все норм собирается, но вот после прошивки МК и подключения к ПК он никак не определятся. В чем там касяк тож не пойму

34  
Alex, извиняюсь, что не ответил. Давно сюда не заходил.
По сути. В сообщении об ошибке говориться, что нет такого файла или директории. Нужно зайти в WinAVR\avr\include\avr и убедиться, что такой каталог и файл в нем существуют. Поскольку вы работаете в AVRStudio, то там нужно прямо указывать пути к этим файлам.
Чтобы изменить количество передаваемых в МК и принимаемых от него байт нужно открыть файл Descriptors.h и поправить в нем вот эти параметры:
        /** от ПК в МК */
#define OUTPUT_SIZE                  20

/** от МК в ПК */
#define INPUT_SIZE                      8
Необходимо отметить, что реальные прием и передача должны соответствовать этим значениям. Если количество параметров меньше, чем заказано, нужно заполнить их нулями.
В этом же файле можно изменить другие параметры.
При определении МК в ПК мною был добавлен параметр - серийный номер. Если он не введен, то устройство не определиться.
Для того, чтобы это убрать нужно в коде Delphi сделать такие изменения:
function TfrmMain.HidCtlEnumerate(HidDev: TJvHidDevice;
  const Idx: Integer): Boolean;
begin
.......
  if (HidDev.Attributes.VendorID = VID) and (HidDev.Attributes.ProductID = PID)
     and (HidDev.SerialNumber=SerN) then begin
......
 Тогда устройство будет определяться только по VID и PID.
Надеюсь, мои советы помогут.

35  
Спасибо за ответ. А можете подсказать, есть какие-нибудь прерывания, которые отлавливали бы приход данных от ПК? И у меня еще проблема в том, принимается и передается почему на один байт больше чем я записываю в OUTPUT_SIZE и INPUT_SIZE, может подскажите в чем может быть дело? правда я реализовал не ваш пример а пример из библиотеки, который называется GenericHID, но по идеи они сильно похожи.

36  
я правильно понимаю что функция USB_USBTask() говорит компу что микроконтроллер подключен к компу? просто я замечал если только один раз поставить эту функцию то контроллер определится компом и потом пропадет, а если поставить реже чем 50 милисекунд, то МК будет постоянно пропадать и появляться. И правильно ли я угадал с частотой вызова этой функции?

37  
В принципе все так. По этой теме можно еще прочесть тут http://we.easyelectronics.ru/AVR/nebolshoy-primer-s-lufa-hidapi.html

38  
а вот именно его я и собрал))) а вот про это еще можете подсказать: имеются ли какие-нибудь прерывания, которые отлавливали бы приход данных от ПК? И у меня еще проблема в том что, принимается и передается почему на один байт больше чем я записываю в OUTPUT_SIZE и INPUT_SIZE, может подскажите в чем может быть дело?

39  
Аппаратных прерываний нет. Есть только логические прерывания, так называемые callback функции. По поводу лишнего байта могу сказать следующее. При отправке репорта от ПК в МК самым первым байтом в посылке идет его номер, а дальше все остальное. Т.е. если длина посылки описанная в дескрипторе например 16 байт, то передаваться должно 17. А вот по поводу приема от МК в ПК сказать сложно. У меня такого не наблюдается. Может быть тоже с номером репорта связано?

32  
я вот только простенький автомат сделал http://ehob.by/index.php/skhemy/svetovye-pribory/tsmu/88-migalka-na-pic12f629-i-8-svetodiodakh
можно ли его переделать чтоб управлять с компа можно было, или только новый делать подобный описанному на этой странице?

31  
здравствуйте. Выложите кто нибудь пожалуйста картинку фьюзов. Просто я слабоват в программировании контроллеров и Вот Это сообщение мне ни о чем не говорит : CKSEL3..1 в состояние 111 для использования внешнего кварца 8 МГц. Заранее спасибо

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

30  
А как же - ждём конечно smile

23  
Простите за нескромность, а готового файла прошивки нет ? Ну не силен я в компиляторах.

24  
Почему нет, есть. Чуть выше этого поста белая подчеркнутая надпись "Дополнительные материалы". Там в папке SoftMC находим папку Software и в нем есть hex файл прошивки.

26  
О, спасибо, не увидел раньше этот файлик.

27  
А фьюзы какие ставить ?

28  
CKSEL3..1 в состояние 111 для использования внешнего кварца 8 МГц.

20  
Собрал эту вещь, и оно работает smile Припаял чип к breakout-платке, и остальные детали напаял там же. Прошивал Atmel программой FLIP через USB. Теперь разбираюсь с устновками в программе, получением субективно приятной динамики режима цветомузыки. На днях смогу выложить фото.
Спасибо Автору! smile

21  
biggrin Я рад, что все получилось!
Прошу прощения, что не заходил сюда. Были дела.
Сразу хочу сообщить, что сейчас активно перерабатываю программу управления, как только закончу, то сразу выложу.
По поводу ножки 4. Я проектирую в Proteuse, а у него ноги питания часто скрыты, ну и я не усмотрел. Вобщем 4 нога должна быть подключена к выоду 1 разъема USB по которому подается +5В.

22  
Pin 3 земля, Pin 4 +5V, я так и делал, по стандартным шемам включения. Буду с нетерпением ждать новую версию программы! smile
По моим не слишком долгим экспериментам с текущей версией, по моему что-то не очень хорошо в момент зажыгания частотного канала, если даже музыка начинает тихо, канал сразу подскакивает резко по яркости. Также не помешало бы общую регуляцию чувствительности, по всем каналам сразу.

25  
Я понял, будем решать.

19  
На Вашей схеме не подключен ВЦЦ ножка 4. Это так должно быть?

17  
Скажите, если покупаетса голый AT90USB162 , он с USB bootloader или нет? Если нет, чем и как Вы посоветуйте прошивать? Спасибо!

18  
Да, он идет с загрузчиком, но я не рекомендую им пользоваться, т.к. прошить фьюзы все равно не получится. Да и малейшая ошибка приводит к его уничтожению. Я пользуюсь стандартным программатором AVRISP через AVR Studio. Когда то купил и забыл о головной боли. В инете куча самодельных.

16  
И я присоединяюсь к поздравлениям! biggrin

15  
Спасибо всем за поздравления! smile
Все здесь присутствующие авторы светоэффектов, а также все им помогающие - Ваше творчество большие подарки для меня! smile

13  
Поздравляю Юрис! Да и дата такая красивая 44! Удачи тебе в жизни и творчестве.

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

10  
Юрис, если лень делать свою плату, то это самый оптимальный вариант. Кстати, когда компилируется код для МК, то именно она используется, как прототип. Я просто не стал заморачиваться с написанием своего драйвера, хотя это весьма не сложно, а раз есть готовое, то почему бы не воспользоваться. Хотя стоит она в Терраэлектронике 1036 руб. Сделать самому в разы дешевле.

12  
Вот бы кто подарил такое на моё сегодняшное день рождения... cool

14  
Так подарки нужно заранее заказывать biggrin
И желательно тому, кто действительно может и хочет подарить - СЕБЕ! С днём рождения Большому Почитателю Светоэффектов!

9  
Наверное, удобно взять такое (PDF по ссылке) ну и пару деталей добавить. С другой стороны, может слишком денег стоит.
http://docs-europe.electrocomponents.com/webdocs/0e24/0900766b80e24b65.pdf

7  
Делать полностью готовую конструкцию я пока не стал. Купил макетку и на ней все отрабатываю. На ней в дополнение к тем деталям установлена МСХ порта RS232 для отладки и все. Проблем с пайкой CMD деталей и МСХ не в DIP корпусах не испытываю. Приловчился их паять обычным 25 ваттным паяльником. Разведенная в Протеусе плата есть. Кому нужно вышлю. И еще одно весьма важное замечание. К данной статье нужно бы написать еще одну часть, четвертую и назвать ее "Выходное оптическое устройство", ВОУ. Считаю, что успех работы на 70% состоит именно в ВОУ!

8  
Мы ждём эту часть!

5  
Интересно, есть ли какие фото готовой конструкции, платы? Вы делали полностью свою разводку или может использовали какой готовый Breakout Board с процессором? Наьсколько я понимаю, USB-шние AVR нету в DIP корпусах. По этому поводу, может кто посоветует по приобретению дешёгого Breakout Board с процессором как в этой конструкции? Спасибо!

4  
В конце статьи появилась 3 часть - обмен информацией с USB на Delphi.

3  
Т.к. Delphi 7 не поддерживает Unicode, то у пользователей англоязычной версии ХР возникают проблемы с отображением русского языка. Для устранения проблемы в настройках Языки и региональные настройки на вкладке Региональные настройки необходимо установить русский язык. Полная ссылка http://novikovmaxim.livejournal.com/135472.html

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

2  
Присылайте, добавим

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
YOUTUBE LIGHTPORTAL
ALIEXPRESS
Поиск
Translation
Donate
QR
Часики
 
Облако тегов
Друзья сайта
Портал светоэффектов
Catcatcat Electronics
Color Music Beniamina Grinberg