uDMX - USB-DMX контроллер на Atmega8 (+usbasp-fw)

Простой и достаточно дешевый USB-DMX512 контроллер можно собрать на основе микроконтроллера Atmega8 с небольшим количеством "обвеса", что собственно и сделали ребята из [ anyma ] в своем устройстве uDMX. Здесь описана одна из реализаций uDMX на доступной элементарной базе в smd исполнении, все изменения в коде и схеме почти косметические, то есть полная совместимость с программами поддерживающими uDMX обеспечена на 146%.

Немного описания

И так, как мы знаем DMX-512 - это последовательный протокол передачи данных с уровнями совместимыми с протоколом RS-485.
Поэтому для формирования пакетов DMX-512 используется обычный UART (последовательный порт) микроконтроллера, на выходе которого стоит формирователь уровней для RS-485.

Для этого нужно проинициализировать UART на скорости 250kbps и установить 8 бит данных и 2 стоп бита, а "служебные" уровни такие как ”BREAK” и “MAB” будем формировать прямой записью соответствующих уровней в порт при выключенном UART`е. За связь с компьютером через USB порт у нас отвечает подпрограмма написанная на языке ассемблер разработанная в далеких лихих нулевых программистом Igor Cesko. Впоследствии этот код вошел в апноуты Atmel по работе с программным USB, а “Objective Development” написали удобную для использования библиотеку-драйвер виртуального USB.
Именно V-USB от “Objective Development” и будет обеспечивать работу через USB-интерфейс.
Со стороны компьютера все общение с устройством производится через оупенсорсную библиотеку libusb-win32, драйвер лежит в папке libusb\bin архива UDMX_basic.zip.

Теперь немного о деталях:

U1 – любой формирователь уровней для RS-485 с соответствующей распиновкой например SN75176 или другие с цифрами 485 или 75 176 в маркировке.
Стабилитроны ZD1 и ZD2 на 5 вольт «декоративные» - то есть они для защиты драйвера от внешнего высокого напряжения – их можно не ставить.
Резисторы R1-R3 - согласование, для упрощения можно R1 удалить, а R2 и R3 заменить перемычками.
Диод шоттки DS1 для развязки питания при программировании через AVR-ISP, если на время программирования будете отключать устройство от компьютера – его тоже можно заменить перемычкой.
U2 – серии LM1117 с фиксированным напряжением 3.3 вольта, если есть только ADJ версия то придется перерезать дорожку от вывода 1 и впаять делитель согласно даташиту.
JP1 изначально планировалось использовать для активации усб-загрузчика, что бы не разбирать каждый раз корпус при обновлении прошивки, но он мне не понадобился, а понадобился светодиод на проводке, сигнализирующий о передачи пакетов, вместо smd светодиода D2 который уже припаян на плате. Для использования этого светодиода нужно раскомментировать (раскомментировано по умолчанию) строку 39 в файле "main.c" исходного кода прошивки.

Теперь для тех, кто плохо умеет читать даташит:

Микроконтроллер U3 обязательно не серии L.
Большинство людей бегло читавшие даташит, видя питание в 3.3 вольта сразу начинают ставить низко потребляющую версию микроконтроллера Atmega8Lтак как для них указано 2.7-5.5V а для полной версии только 4.5-5.5V.
Но если подробнее прочитать документ до конца, то сразу станет ясно, что для полной версии микроконтроллера напряжение питания в 4.5V указано как минимальное для работы на частоте 20МГц (16МГц для серии Atmega8A)
При 3.3 вольт гарантируется работа микроконтроллера на частоте не более 14 мегагерц, а по сколько у нас всего 12МГц, то никаких проблем возникать недолжно.
PS:
Во вложениях все необходимые файлы проекта в Altium и исходные коды, в том числе бонус “dashard.dll” переименованный в сами знаете что, для замены в сами знаете какой программе. Для сборки прошивки и dll`ок нужно все вложения распаковать в одну папку. Для сборки dashard.dll лучше использовать не выше Visual Studio 2010 иначе она(dll) не будет работать на системах ниже windows 7.
Печатная плата разведена с учетом ЛУТ возможностей, под плохой лазерный принтер, хотя лучше использовать фоторезист. Плотность монтажа позволяет все паять обычным паяльником.

PPS:
Вроде бы все основное расписал, если что не понятно спрашивайте в комментариях, так будет проще чем расписывать все подробнейшим образом.

PPPS:
За ломаный русский, не очень красивый код, и не очень вылизаный проект не ругайте, делалось очень срочно, а после причесывать желания нет.

UPDATE:Подправил прошивку для работы uDMX на железе USBASP, по замечанию пользователя karpesh94, должно все работать

Для работы uDMX на железе USBASP нужно залить адаптированную прошивку и подключить вход формирователя уровней для RS-485(в оригинальной схеме это вывод 4 микросхемы ADM485) к выходу последовательного порта меги, то есть к PD1(TXD), обычно на USBASP этот порт выведен через резистор на 4 пин разъема программирования - с него и можно снять сигнал.

UPDATE 2:Забыл указать фузы: для avrdude "-U lfuse:w:0xef:m -U hfuse:w:0xc8:m", для avreal "-f_low=EF,_high=C8"

UPDATE 3:Все gif - 2400 dpi, исправил масштаб в outputs.pdf

Надеюсь что все правильно, проверте кому не сложно, у меня пока нет второго программатора, залить не могу.
Отпишитесь в комментариях пожалуйста.

Теги: 

Комментарии

Я бы сделал вариант для тех людей, у которых завалялись несколько ненужных usbasp программаторов. Ну или тех, у кого нет возможности вытравить плату. У меня например совсем не получается делать платы лутом. Там по сути нужно будет просто смастерить переходничек с преобразователем интерфейса, который можно и на макетке собрать.

vk.com/karpesh94
icq 616833808

Не вижу проблем, шейте адаптированную прошивку в USBASP и снимайте с TXD сигнал DMX-512.
Добавил в закачку нужные файлы.

Das radio!

Спасибо:) Хотел отправить автору статьи http://habrahabr.ru/post/208470/ ссылку на данный метод использования, но я readonly:(

vk.com/karpesh94
icq 616833808

Прошивал ардуиной со скетчем ArduinoISP. Для начала нужно не забыть замкнуть JP2, иначе шиться не будет. У меня получилось весьма забавно: VID_0000 PID_0002. Сам бы попробовал разобраться в исходниках, да знаний маловато...

vk.com/karpesh94
icq 616833808

Что-то не верно, раздобыл LPT байтбластер проверю.

Das radio!

Проверил, внес изменения, основная ошибка - перевод MCU в слип если нет активности на USB, вывод из слипа по прерыванию INT1 к которому в оригинале подведен -USB, а так как к этому пину в USBASP ничего не подключено то и вывести из слипа некому. Ну еще поменял направление портов для учета джамперов и ресета на USBASP.
Сейчас все ок, если был установлен libusb для USBASP то и uDMX определится как usbasp, на работу во FreeStyler это никак не влияет, там поиск устройства по VID/PID, впрочем на работу в Martin Light Jockey через dll`ку тоже не влияет - поиск устройства так же по дескрипторам.
Если хотите что бы устройство определилось как uDMX - обновите драйвер из папки libusb архива udmx_basic.zip.

Das radio!

Все заработало. Осталось только разобраться с программами. Freestyler сходу подхватил, но в нем не могу найти мои устройства. У меня 8 RGBI в корпусе PAR-56. В мартине они вроде как были все. Буду делать ручками.

vk.com/karpesh94
icq 616833808

Ок.Вроде как там не сложно, ведь это же не 3D модель.
Удачи!

Das radio!

Прощу прощения за столь глупые вопросы. Почему то не могу подружить с martin lj. Какой версии он должен быть? И что нужно сделать, чтобы заработало? Я просто заменил martinusb.dll в папке с программой.

vk.com/karpesh94
icq 616833808

Да просто меняете на ту которая в архиве и все должно работать, лайтжокей версии которая без ключа, то есть до 2,95 включительно все работает.

Das radio!

Не работает у меня. Да и ладно. Freestyler оказался куда мощнее. Вот только у меня не воспринимает русский текст. Это как то можно побороть?

vk.com/karpesh94
icq 616833808

Объясните,для чего там Sunlight.Magic.3d.exe пожалуйста?

Слышал что его можно прикрутить к фристайлеру, но так и не разобрался как. Видимо он не нужен.

Das radio!

Всем привет! К сожалению не работает, не определяется usb устройство. Подскажите, где смотреть ошибку?

какое именно устройство, "по схеме" или сделано из usbasp, какая прошивка, где не определяется, в диспетчере устройств или в программах?
если не определяет комп:

  1. Проверьте фузы, должны быть low=EF, high=C8 (для прошивки через avreal, бат файл лежит в папке firmware, для avrdude окончание команды запуска "-U lfuse:w:0xef:m -U hfuse:w:0xc8:m").
  2. Проверьте правильно ли подключены d+ d-, пробовать поменять
  3. Проверьте напряжение питания мк - "по схеме" должно быть 3-3.3в, для usbasp это не важно так как в нем напряжение линий USB ограничено стабилитронами и его проверяют перед продажей.

Если все еще не понятно - прошу больше информации.

Das radio!

Собирал по схеме. и понял что допустил ошибку в питании при разводке платы, еле заметил, всего несчастная перемычка. и фьюзы неправильно посчитал =( теперь он установился и определился как на ноутбуке, так и на пк. Большое спасибо Вам. Прошивал в PonyProg. единственное на windows 7 не определяется коробка, а windows XP ругается на отсутствие файла MSVCR100.dll, я то его скачал из интернета, но мартин все равно ругается и не хочет работать с переделанной библиотекой, которая прилагается.

спасибо автору за материал, всё работает, в схему была добавлена гальваническая развязка. В прошивке микроконтроллера пришлось изменить ток потребления устройства от USB со 100ма на 200 . подружить с мартином в windows 7 удалось при помощи компиляции DLL библиотеки для мартина заново, в исходниках библиотеки ничего не менял в XP работает с той что предоставил автор

Да, по мартину у меня изначально все сделано было под 7 но принес в один клуб с XP, и оно не заработало, сказало что не хватает каких то там функций в виндовых dll'ках, пришлось поковыряться, что бы заработало на XP. Видимо что то я не учел, делалось по просьбе знакомого не для продажи и публикации, позже решил выложить, что бы всем было "хорошо", к тому же мартин наплевал на старых кустомеров оставив их во временах XP.

Das radio!

Здравствуйте подскажите пожалуйста какие фьюзы нужно выставить в Code vision для mega8 16 pu?

 
 
Rambler''s Top100