Прочитал, что данный интерфейс очень удобен при проектировании разного рода устройств (самоделок) Скоростью связи вполне удовлетворен которую предоствляет мне интерфейс. Собственно, сам вопрос - какие штатные функции есть в ком-пе для работы с такими устройствами и как реализовать поддержку этого интерфейса на ATmega-48 (имя устройства чтоб еще выводилось)? В гугле забанили действительно А если серьезно, то нигде нет ПОЛНОЙ информации по этим двум вопросам НА РУССКОМ ЯЗЫКЕ. А данная инфа могла бы быть полезна для большинства форумчан. Может, плохо искал, но не нашел.
какие штатные функции есть в ком-пе для работы с такими устройствами
Что Вы понимаете под словосочетанием "штатные функции"? Драйвера есть. =) Вот эту тему гляньте, там ребята приводили ссылки на проект на меге восьмой. Правда, не помню, какой тип устройства - HID аль нет. Но это не суть важно. Ищите и читайте спецификацию на интерфейс USB (1.1, к примеру). Читать и разбираться придется много. Правда, не совсем понимаю, что означает "данный интерфейс очень удобен при проектировании разного рода устройств". Это еще смотря каких устройств. =)
_________________ pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего ) MrYuran: Самые ортодоксальные — это PICудеи ) Katz: Не, 51-ники. )
Почитайте для начала вторую часть статьи в предыдущих новостях на сайте. Она, правда, не для AVR, н какие-то сведения по USB HID вы из нее извлечете. В компе имеетя готовый драйвер для HID, но как с ним работать зависит от языка программирования. У Windows есть много API для работы с HID.
как реализовать поддержку этого интерфейса на ATmega-48 (имя устройства чтоб еще выводилось
http://purebasic.mybb.ru/viewtopic.php?id=211 Тут мега 8, но легко можно переделать под 48. Вроде толко изменить имя рег-файла (заменить $regfile = "m8def.dat" на $regfile = "m48def.dat") и перекомпилировать.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Ну там есть функции типа HidD_GetHidGuid, HidD_GetAttributes, HidD_GetPreparsedData, HidP_GetCaps и многие другие. Проще использовать компонент "HID_Lib_Plus.dll" (см. первую ссылку в моем предыдущем посте) чем лезть в дебри WinAPI, но хозяин-барин.
И многое зависит от языка программирования. На каком пишите?
Global HidD_GetHidGuid.ProtoHidD_GetHidGuid=GetFunction(hid_Lib, "HidD_GetHidGuid") Global HidD_GetAttributes.ProtoHidD_GetAttributes=GetFunction(hid_Lib, "HidD_GetAttributes") Global HidD_GetPreparsedData.ProtoHidD_GetPreparsedData=GetFunction(hid_Lib, "HidD_GetPreparsedData") Global HidD_GetFeature.ProtoHidD_GetFeature=GetFunction(hid_Lib, "HidD_GetFeature") Global HidD_SetFeature.ProtoHidD_SetFeature=GetFunction(hid_Lib, "HidD_SetFeature") Global SetupDiEnumDeviceInterfaces.ProtoSetupDiEnumDeviceInterfaces=GetFunction(Setupapi_Lib, "SetupDiEnumDeviceInterfaces") Global SetupDiGetDeviceInterfaceDetail.ProtoSetupDiGetDeviceInterfaceDetail=GetFunction(Setupapi_Lib, "SetupDiGetDeviceInterfaceDetailA")
Procedure HID_OpenDevice(PID.w, VID.w, VersionNumber.w, Index.w) ; Получение доступа к HID устройству HidGuid.Guid devInfoData.SP_DEVICE_INTERFACE_DATA
HidD_GetHidGuid(@HidGuid) hDevInfo=SetupDiGetClassDevs_(@HidGuid,0,0, #DIGCF_PRESENT|#DIGCF_DEVICEINTERFACE) If hDevInfo=0 ProcedureReturn 0 EndIf LastDevice = #False For i=0 To 255 MyDeviceDetected=#False Result=SetupDiEnumDeviceInterfaces(hDevInfo, 0, @HidGuid, i, @devInfoData) If Result Result = SetupDiGetDeviceInterfaceDetail(hDevInfo, @devInfoData, 0, 0,@Length, 0) *detailData.PSP_DEVICE_INTERFACE_DETAIL_DATA=AllocateMemory(Length) *detailData\cbSize=SizeOf(PSP_DEVICE_INTERFACE_DETAIL_DATA) Result = SetupDiGetDeviceInterfaceDetail(hDevInfo, @devInfoData, *detailData, Length+1, @Required, 0)
If DeviceHandle>0 Attributes\Size = SizeOf(HIDD_ATTRIBUTES) Result = HidD_GetAttributes(DeviceHandle, @Attributes)
If Attributes\ProductID=PID And Attributes\VendorID=VID And (Attributes\VersionNumber=VersionNumber Or VersionNumber=-1 ) If CurrentIndex=Index SetupDiDestroyDeviceInfoList_(hDevInfo) ProcedureReturn DeviceHandle Else CurrentIndex+1 CloseHandle_(DeviceHandle) EndIf Else CloseHandle_(DeviceHandle) EndIf
Procedure HID_WriteDevice(DeviceHandle, *buffer, LenBuffer) ; Запись данных в HID устройство If DeviceHandle=0 Or *buffer=0 Or LenBuffer<=0 ProcedureReturn 0 EndIf Written.l=0 Result=WriteFile_(DeviceHandle, *buffer, LenBuffer, @Written, 0) ProcedureReturn Written EndProcedure
Procedure HID_ReadDevice(DeviceHandle, *buffer, LenBuffer) ; Чтение данных из HID устройства If DeviceHandle=0 Or *buffer=0 Or LenBuffer<=0 ProcedureReturn 0 EndIf Written.l=0 Result=ReadFile_(DeviceHandle, *buffer, LenBuffer, @Written, 0) ProcedureReturn Written EndProcedure
Procedure HID_GetFeature(DeviceHandle, *buffer, LenBuffer) If DeviceHandle And *buffer And LenBuffer>0 ProcedureReturn HidD_GetFeature(DeviceHandle, *buffer, LenBuffer) Else ProcedureReturn 0 EndIf EndProcedure
Procedure HID_SetFeature(DeviceHandle, *buffer, LenBuffer) If DeviceHandle And *buffer And LenBuffer>0 ProcedureReturn HidD_SetFeature(DeviceHandle, *buffer, LenBuffer) Else ProcedureReturn 0 EndIf EndProcedure
Тестирование кода, включение и отключение режима программирования в программаторе PICkit 2, который является USB HID устройством.
Можно еще использовать V-USB http://we.easyelectronics.ru/electro-an ... v-usb.html Но остался один незатронутый вопрос, как отлаживать подобные устройства. если что то не заработает то трудно понять на какой стороне на стороне хоста или на стороне МК. есть ли программные эмуляторы HID устройств с помощью которых можно отладить софт на стороне хоста и быть уверенным что он работает? облазил интернет но ничего кроме снифферов найти не смог, было бы здорово запустить эмулятор прописать VID и PID и обмениваться данными с ней вместо устройства.
а со стороны МК как быть? pruteus программную реализацию usb не эмулирует. пытался запустить V-USB в режиме отладки в AVR studio 4, студия вылетела по ошибке причем ничего не сказала просто закрылась.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения