Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USB на ATtiny45 и с UART-ом
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Oleg_IT
Не могу найти работающий проект на ATtiny45 AVR-USB с UART с использованием libusb. CDC с UART есть, i2c-tiny-usb есть, а в сочетании с UART нет. Помогите найти.
GDI
Чета я не понял , что надо то? CDC вас чем не устраивает?
Oleg_IT
CDC «анонимная» вещь. При смене USB порта меняется номер COM порта. Не удобно это. Можно конечно на стороне РС методом перебора найти нужный порт, но лучше чтобы было всё жёстко определено.
prottoss
Цитата(Oleg_IT @ Oct 4 2007, 13:21) *
Не могу найти работающий проект на ATtiny45 AVR-USB с UART с использованием libusb. CDC с UART есть, i2c-tiny-usb есть, а в сочетании с UART нет. Помогите найти.
А какие проблемы переделать самому подходящий проект под USART?
GDI
По-моему смена COM порта при смене USB порта обходится заведением и передачей в хост серийного номера устройства.
prottoss
Цитата(GDI @ Oct 4 2007, 20:34) *
По-моему смена COM порта при смене USB порта обходится заведением и передачей в хост серийного номера устройства.
Нет, винда присвоит номер порта по своему усмотрению. Хотя, возможно, есть методы установки статического номера...

НО, это не есть хороший стиль для ПО. Лучше, если ПО будет искать устройство не по номеру порта, а по VID и PID устройства, а у устройства будут Вендор Рекюесты в запросах по управляющей ендпоинт
Oleg_IT
Цитата(prottoss @ Oct 4 2007, 16:46) *
Нет, винда присвоит номер порта по своему усмотрению. Хотя, возможно, есть методы установки статического номера...

НО, это не есть хороший стиль для ПО. Лучше, если ПО будет искать устройство не по номеру порта, а по VID и PID устройства, а у устройства будут Вендор Рекюесты в запросах по управляющей ендпоинт

А как с COM порта считать VID и PID? Процедуру опознания вижу так: последовательно открывать порты от COM0 до COM… Если порт открылся кинуть туда команду с паролем, если ответ получен и он правильный, то продолжаем дальше штатно работать.
GDI
VID и PID читаются с самого USB устройства, которое является УАРТом, в виндах можно получить список всех существующих КОМ (и не только) портов из реестра, а не тупо перебирать все возможные, как это сделать я не помню, давно это делал... гугль в помощь.
prottoss
Цитата(Oleg_IT @ Oct 5 2007, 14:19) *
А как с COM порта считать VID и PID? Процедуру опознания вижу так: последовательно открывать порты от COM0 до COM… Если порт открылся кинуть туда команду с паролем, если ответ получен и он правильный, то продолжаем дальше штатно работать.
ИМХО работать лучше с портами, а не с реестром, что я обычно и делаю. Во первых - это быстрее. Во вторых не у каждого Васи Пупкина реестор в порядке, и вообще, это такая неустойчивая весчь, состояние которой часто зависит от погоды на Марсе.



Процедуру опознавания можно проводить так:

1. Открываем СОМn (n = 1...255);

2. Если порт не доступен (открыт другим приложением или отсутсвует) n = n+1; goto п.1

3. Вызываем Win32API функции GetCommConfig, GetCommProperties и GetDefaultCommConfig из которых извлекаем ВСЕ нужные нам данные.

4. Если это то, что нам нужно, хлопаем в ладоши, если нет: n = n+1; goto п.1



Подробнее о Win32API функциях раскажет товарисч Гугль smile.gif
defunct
Цитата(prottoss @ Oct 5 2007, 14:17) *
ИМХО работать лучше с портами, а не с реестром, что я обычно и делаю. Во первых - это быстрее. Во вторых не у каждого Васи Пупкина реестор в порядке, и вообще, это такая неустойчивая весчь, состояние которой часто зависит от погоды на Марсе.

Процедуру опознавания можно проводить так:
1. Открываем СОМn (n = 1...255);

HKEY_LOCAL_MACHINE\hardware\devicemap\serialcomm

Список портов лучше брать отсюда, и открывать только имеющиеся в системе порты, а не 1-255. Это будет действительно быстрее чем опрос 255-ти портов.
bodja74
Ну вот такое я использую у себя на васике ,для определения существующих ,точнее доступных на данный момент портов.

обьявляем
Код
Type DCB
    DCBlength As Long
    BaudRate As Long
    fBitFields As Long
    wReserved As Integer
    XonLim As Integer
    XoffLim As Integer
    ByteSize As Byte
    Parity As Byte
    StopBits As Byte
    XonChar As Byte
    XoffChar As Byte
    ErrorChar As Byte
    EofChar As Byte
    EvtChar As Byte
    wReserved1 As Integer
End Type

Type COMMCONFIG
    dwSize As Long
    wVersion As Integer
    wReserved As Integer
    dcbx As DCB
    dwProviderSubType As Long
    dwProviderOffset As Long
    dwProviderSize As Long
    wcProviderData As Byte
End Type


Declare Function GetDefaultCommConfig Lib "kernel32" _
    Alias "GetDefaultCommConfigA" (ByVal lpszName As String, _
             lpCC As COMMCONFIG, lpdwSize As Long) As Long

Public Function EnumSerPorts(port As Integer) As Long
    'this function returns non-zero value if the port exists
    Dim cc As COMMCONFIG, ccsize As Long
'
    ccsize = LenB(cc)     'gets the size of COMMCONFIG structure
'
    EnumSerPorts = GetDefaultCommConfig("COM" + Trim(Str(port)) + _
                                        Chr(0), cc, ccsize)
'
End Function


определяем ,передаем параметр номер порта ,если существует EnumSerPorts возвращает 1.

Код
If EnumSerPorts(5) = 1 Then menu_port_com5.Enabled = True
If EnumSerPorts(4) = 1 Then menu_port_com4.Enabled = True
If EnumSerPorts(3) = 1 Then menu_port_com3.Enabled = True
If EnumSerPorts(2) = 1 Then menu_port_com2.Enabled = True
If EnumSerPorts(1) = 1 Then menu_port_com1.Enabled = True
prottoss
Цитата(defunct @ Oct 5 2007, 19:28) *
HKEY_LOCAL_MACHINE\hardware\devicemap\serialcomm

Список портов лучше брать отсюда, и открывать только имеющиеся в системе порты, а не 1-255. Это будет действительно быстрее чем опрос 255-ти портов.
Угу, и видит там максимум два порта материнской платы
GDI
Нет, там появляются и USB-Serial порты, только вот глюки там действительно есть... вроде как помнится мне что USB-шные КОМы там появляются если они были подключены на момент загрузки компа, хотя может это прога моя подглючивала.. smile.gif
IceS
Цитата(GDI @ Oct 5 2007, 16:36) *
вроде как помнится мне что USB-шные КОМы там появляются если они были подключены на момент загрузки компа, хотя может это прога моя подглючивала.. smile.gif

Только что проверил в WinXp.
- открыл реестр, USBшного кома нет.
- подлючил девайс
- в регедите сделал обносить, ком появился.
prottoss
Да, на самом деле появляется новый порт... Может быть через реестр быстрее. Но я предпочитаю через Win32API-функции работы с communication port



ПО моему так "более безглючнее"
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.