Управление самодельным USB-HID светодиодом, c помощью GUI оболочки на .NET

    image
    Подобная вещь, собранная из малого количества деталей, может пригодиться для моддинга или просто для подсветки клавиатуры.


    Для подключения к USB используется AVR микроконтроллер AtTiny45 компании Atmel. Этот микроконтроллер не имеет аппаратного USB интерфейса, поэтому он реализуется программно, с помощью библиотеки V-USB от Objective Development. Также этот восьминогий таракан имеет встроенный ФАПЧ (PLL), что позволяет избавиться от кварца и обвязки, и освободить итак не многочисленные ноги, а самое главное настроить на нужную для USB тактовую частоту ~16,5 МГц. Так же, ФАПЧ позволяет подстраивать эту частоту при необходимости, используя те же такты USB. Что, собственно, и делается при первом подключении устройства. После чего значение подстройки сохраняется в памяти EEPROM, и при следующем подключении выгружается из нее. Далее идет программный USB-стек, так что ресурсов у микроконтроллера остается не много. Tiny45 легко прошивается любым внутрисхемным программатором, я использовал USBasp.

    image

    Так как я существо ленивое, мне было не охота разводить самому платку, поэтому она была приобретена на сайте microsin.ru/content/view/655/44, там же есть схема подключения, а также переведенная на русский библиотека V-USB и описание как с ней работать microsin.ru/content/view/613/44.

    Используя пример библиотеки V-USB из папки \examples\hid-custom-rq\ прикрутив ФАПЧ \libs-device\, откомпилировал под AtTiny45. Прошил. Проверил с помощью командной строки. Работает. Для работы надо установить библиотеку libusb sourceforge.net/projects/libusb-win32/files, по идее ее можно и не устанавливать, а просто положить файл libusb0.dll в директорию рядом с программой вызывающей ее функции. Но у меня не заработало.

    Командная строка конечно хорошо, но не практично. Решил подправить и пересобрать в DLL пример из \examples\hid-custom-rq\commandline\ и прикрутить к нему GUI оболочку.

    Сначала собрал DLL пользуясь MinGW компилятором и мануалом отсюда www.adp-gmbh.ch/win/misc/mingw/dll.html, пришлось попотеть, что бы все компилилось с библиотекой libusb-win32. Внутри DLL'ки получились две функции:
    void  led_set( int isOn ){
    ...
    }
    int  led_get( void ){
    ...
    }

    * This source code was highlighted with Source Code Highlighter.

    Потом написал небольшую программку на C#, вызывающую эту DLL’ку из под командной строки, пользуясь мануалом www.adp-gmbh.ch/csharp/call_dll.html. На XP все заработало почти сразу, единственное что .NET под win7'64 не хочет общаться с моей DLL, остальные ОС не проверял.
    Получившийся код программы командной строки:
    using System.Runtime.InteropServices;
    using System;

    class call_led {
      [DllImport("led.dll")]
      private static extern int led_get();
      [DllImport("led.dll")]
      private static extern void led_set( int isOn );
      
      public static void Main()
      {
        led_set(0);
        Console.WriteLine("led is {0}", led_get());
      }
    }

    * This source code was highlighted with Source Code Highlighter.

    Поставил Microsoft Visual C# 2008 Express Edition и на базе простейшего проекта WindowsFormsApplication создал маленькую программку с одним единственным ChekBox’ом, который включает и выключает светодиод. А так же проверяет каждые 300мс подключено ли устройство, и в каком оно состоянии.

    imageimageimage

    Это моя первая программа на C# поэтому никаких классов я не реализовывал, а в лоб вызывал функции из dll’ки. Собственно видео получившегося девайса:


    Собственно схема + hex + исходники + проект студии:
    led_t45.rar
    Поделиться публикацией

    Похожие публикации

    Комментарии 54

      0
      а какая по итогу вышла стоимость устройства + можно ли к одной плате подключить несколько диодов?
        0
        До 3х-4х напрямую и очень много через сдвиговые регистры.
        Микроконтроллер стоит копейки, плата и светики- вообще ничего не стоят. Главное-найти программатор.
          0
          Этот контроллер шьется через «5 проводков», у меня в городе самое сложное — найти контроллер :)
            0
            Не у всех есть LPT порт.
            Да и спалить его проще некуда.
            USB программаторы рулят.
          +1
          AtTiny45 ~50-100руб
          обвязки ~1-5руб
          светодиод ~5-50руб (в зависимости от яркости цвета и тд...)
          плата от 0 (собранная самим) до 100руб купленная у microsin.ru
          +9
          Классная тема оформления у вашей XP )
            0
            У меня вот лежит метров 40 такого шнурка Дюралайт:

            Им раньше магазины обвешивали… вот тоже надо бы заняться, замодить чё-нить… только вот от юсб он питаться не будет)
              0
              по юсб можно контролить )
              0
              В комплекте с библиотекой V-USB уже идет готовый пример, реализующий ваш функционал. Боюсь, вы изобрели велосипед)
              А я из подобной платки сделал USB-АЦП
                0
                Да, забыл пруфф: microsin.ru/content/view/757/1/
                  0
                  И маленькое уточнение, этот пример идет с русской версией библиотеки от microsin ru)
                  0
                  Смысл статьи наверное все таки в GUI интерфейсе…
                  Не стал добавлять функциональности пока. Хотя можно реализовать ШИМ и им управлять напрямую тремя RGB светодиодами. Или подключить кнопку и управлять от нее, соответственно дублируя все в программе.
                    +2
                    Нет, в переведенной microsin версии библиотеки есть именно такой пример. На WindowsForms с одним чекбоксом:

                    И, да, я ничуть не умаляю ваш результат, первым делом, когда изучал, собрал подобное устройство)
                      0
                      Да… следить за обновлениями его сайта довольно проблематично… RSS бы ему…
                      Честно говоря не видел этой статьи.
                        0
                        Главное, не останавливайтесь на мигающем светодиоде. Можно таких вещей наделать! АЦП, ЦАП, самодельные джойстики, управление домашними приборами с ПК… Вплоть до самодельной системы «умный дом»!
                          0
                            0
                            Прикрутил бы RSS, но пока не знаю, как это делается.
                      0
                      чтобы net под 64 битной осью заработал — собери его в студии в x86 проект, а не any platform
                        0
                        Тут дело не в .net, он-то как раз отлично работает в 64 битах с типом «Any platform». И JIT-компилятор сделает 64-битное приложение при старте. А вот 64-битное приложение не может загружать 32-битные dll. Так что или ограничить приложение 32 битами с помощью типа целевой платформы x86, или найти 64-битную dll.
                          0
                          А где там это выставляется???
                          Собираю проект в winXP запускаю готовое в win7 не пашет… также и собирание под win7 не помогает…
                            0
                            Правый клик по проекту в solution, потом Properties, вкладка «Application», и вверху будет «Plaftorm»
                              0
                              Упс… Вкладка «Build». На память плохо получилось.
                              img.pixs.ru/storage/9/1/2/ScreenShot_2411968_495912.png
                                0
                                Ха… у меня нет…
                                Решение > свойства > построение > и начинается с общих
                                за русскую среду конечно по голове меня не погладят, но в ней я хоть как то разобрался…
                                  0
                                  А в этих общих нет разве «Platform Target» и combo box на 3 элемента? Any CPU — x86 — x64.

                                  У меня на приведенном скриншоте как раз выбрано x86
                                    0
                                      0
                                      Погуглил, вот что нашел.
                                      social.msdn.microsoft.com/Forums/en-US/vblanguage/thread/d4fa83dc-eed1-4ead-96a1-78bbd9ba6d3a
                                      То есть в express-версии это в интерфейс не вынесено, нужно вручную подправить файл проекта.

                                        +1
                                        Это не так.
                                        По умолчанию в експресс версии отключены дополнительные кофигурации построения. Включаем так: Tools => галка Show all settings => вкладка Projects and Solutions => включаем Show advanced build configurations. Жмем OK.
                                        Открываем меню Build => Configuration Manager и создаем новые пресеты платформ.
                                        После описанных действий в свойствах проекта будет доступен выбор целевой платформы.
                                          0
                                          Благодарю, теперь работает.
                                          Правда я делал под winXP и в win7 она криво отображается…
                                        0
                                        Express Editions:
                                        The VB and C# Express products do not expose the Target property inside the development environment. You will need to carefully modify the project file using a text or XML editor.
                                        1. Close the project and/or solution
                                        2. Select Open File from the File menu
                                        3. Navigate to the project directory, and highlight the project file
                                        4. Press the Open button, the project file should open in the XML editor
                                        5. Locate the first section and add the following line:
                                        x86
                                        1. Save the project file
                                        2. Reopen the project and/or solution using Open Project/Solution from the File menu
                                        3. Continue with development, debugging, and testing
                                          0
                                          Спасибо, но не помогло…
                                          Вечером посмотрю как следует…
                              0
                              так это и написал. вернее не причину, а решение. про причину знал. сам на работе с таким сталкивался
                            0
                            А мне бы сейчас автокликер мышкой разработать на нём. (Точнее на ATtiny2313) Только вот, я даже не знаю с какого конца подходить, т.к. опыта в этом мало :(
                              0
                              Вам прямой путь сюда workshop.stiff.ru/2009/03/autoclicker-1-1-light.html
                                0
                                Спасибо. Но я уже посещал данную страницу. Мне не купить, мне самому бы сделать
                                  0
                                  Посмотрите внимательнее. Внизу есть схема устройства и ссылка на прошивку. Этого вполне достаточно)
                                0
                                А зачем железяка для этого? Можно же софтверно сделать, указать кординаты и пусть кликает. Самый примитивеый /afk бот. Правда я не интересовался этой темой.
                                  0
                                  Для игры. Софтверно блокирует защита. Она устанавливает драйвер в нулевое кольцо ядра и софтверно по-моему нереально обойти это. Если только не установить (опять же софтверно) драйвер отдельный и через него использовать программу. Но я таких не видел.
                                    0
                                    А запустить в виртуалке если систему с игрухой?
                                      0
                                      Захотелось ответить: «Под вайном? Не пойдёт».
                                      Но на то оно и утро, что мысли в голове все смешаны =)

                                      Надо попробывать. Спасибо.
                                        0
                                        Не прокатило =(
                                        Ни под VMWare, ни под Sun'овским VirtualBox'ом.

                                        Уже, наверно, легче купить мышку с буфером и записать ей макрос.
                                          0
                                          А Remote Desktop?
                                            0
                                            Это тем более.

                                            Я купил A4tech OSCAR X-748K со встроенной 16кб памяти, в которую можно записывать абсолютно любые макросы на действия. И всего за 420 рублей. Для мышки с регулируемыми грузыми, регулируемым разрешение до 3200 dpi и встроенной памятью на макросы, это очень дёшего. Плюс приятное качество и хорошо лежит в руке.
                                  –2
                                  Круто у вас получилось в ролике под музыку мышкой щелкать )
                                    –1
                                    >ФАПЧ а
                                      –2
                                      за кадром children of bodom играет?)
                                        +1
                                        Чтобы не «потеть под mingw», нужно напрямую использовать LibUsb.net.
                                          0
                                          Попробую… Благодарю.
                                          0
                                          вот www-user.tu-chemnitz.de/~heha/mb-iwp/Datenhandschuh/ прикольная штука, аж самому сделать захотелось
                                          0
                                          Я когда-то баловался подобным — только использовал RGB светодиод, ШИМ-ом рулил цветом итоговым и прикрутил это в итоге к Windows Media Player как плагин для визуализации :)
                                            0
                                            извините за офтоп, но как называется тема для windows которая на видео
                                            0
                                            Ха! Чёткая вещь!

                                            а если собрать таких светодиодов целых n+1, то можно и освещение в квартире сделать)) ТОлько думаю тока не хватит и напряжения…

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

                                            Самое читаемое