Как стать автором
Обновить

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

DIY или Сделай сам
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
Теги:.netAVRusbhiddll
Хабы: DIY или Сделай сам
Всего голосов 60: ↑52 и ↓8 +44
Просмотры20.4K

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

.Net разработчик
от 150 000 ₽ArtezioСаратов
.Net разработчик
от 150 000 ₽ArtezioСанкт-Петербург
Lead .NET Developer
до 5 000 $Spiral ScoutМожно удаленно
Опытный программист .Net
от 150 000 до 210 000 ₽Redberries.proМожно удаленно
.Net разработчик
от 150 000 ₽Hunt4YouМожно удаленно

Лучшие публикации за сутки