реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> USB на ATtiny45 и с UART-ом
Oleg_IT
сообщение Oct 4 2007, 05:21
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Не могу найти работающий проект на ATtiny45 AVR-USB с UART с использованием libusb. CDC с UART есть, i2c-tiny-usb есть, а в сочетании с UART нет. Помогите найти.
Go to the top of the page
 
+Quote Post
GDI
сообщение Oct 4 2007, 07:40
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Чета я не понял , что надо то? CDC вас чем не устраивает?


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Oct 4 2007, 10:37
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



CDC «анонимная» вещь. При смене USB порта меняется номер COM порта. Не удобно это. Можно конечно на стороне РС методом перебора найти нужный порт, но лучше чтобы было всё жёстко определено.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 4 2007, 11:08
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Oleg_IT @ Oct 4 2007, 13:21) *
Не могу найти работающий проект на ATtiny45 AVR-USB с UART с использованием libusb. CDC с UART есть, i2c-tiny-usb есть, а в сочетании с UART нет. Помогите найти.
А какие проблемы переделать самому подходящий проект под USART?


--------------------
Go to the top of the page
 
+Quote Post
GDI
сообщение Oct 4 2007, 12:34
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



По-моему смена COM порта при смене USB порта обходится заведением и передачей в хост серийного номера устройства.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 4 2007, 12:46
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(GDI @ Oct 4 2007, 20:34) *
По-моему смена COM порта при смене USB порта обходится заведением и передачей в хост серийного номера устройства.
Нет, винда присвоит номер порта по своему усмотрению. Хотя, возможно, есть методы установки статического номера...

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


--------------------
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Oct 5 2007, 06:19
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Цитата(prottoss @ Oct 4 2007, 16:46) *
Нет, винда присвоит номер порта по своему усмотрению. Хотя, возможно, есть методы установки статического номера...

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

А как с COM порта считать VID и PID? Процедуру опознания вижу так: последовательно открывать порты от COM0 до COM… Если порт открылся кинуть туда команду с паролем, если ответ получен и он правильный, то продолжаем дальше штатно работать.
Go to the top of the page
 
+Quote Post
GDI
сообщение Oct 5 2007, 06:48
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



VID и PID читаются с самого USB устройства, которое является УАРТом, в виндах можно получить список всех существующих КОМ (и не только) портов из реестра, а не тупо перебирать все возможные, как это сделать я не помню, давно это делал... гугль в помощь.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 5 2007, 11:17
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(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


--------------------
Go to the top of the page
 
+Quote Post
defunct
сообщение Oct 5 2007, 11:28
Сообщение #10


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



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

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

HKEY_LOCAL_MACHINE\hardware\devicemap\serialcomm

Список портов лучше брать отсюда, и открывать только имеющиеся в системе порты, а не 1-255. Это будет действительно быстрее чем опрос 255-ти портов.
Go to the top of the page
 
+Quote Post
bodja74
сообщение Oct 5 2007, 11:33
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



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

обьявляем
Код
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
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 5 2007, 11:41
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(defunct @ Oct 5 2007, 19:28) *
HKEY_LOCAL_MACHINE\hardware\devicemap\serialcomm

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


--------------------
Go to the top of the page
 
+Quote Post
GDI
сообщение Oct 5 2007, 12:36
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Нет, там появляются и USB-Serial порты, только вот глюки там действительно есть... вроде как помнится мне что USB-шные КОМы там появляются если они были подключены на момент загрузки компа, хотя может это прога моя подглючивала.. smile.gif


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
IceS
сообщение Oct 5 2007, 13:43
Сообщение #14


Участник
*

Группа: Свой
Сообщений: 43
Регистрация: 17-10-06
Из: Санкт Петербург
Пользователь №: 21 387



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

Только что проверил в WinXp.
- открыл реестр, USBшного кома нет.
- подлючил девайс
- в регедите сделал обносить, ком появился.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 5 2007, 13:53
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



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



ПО моему так "более безглючнее"


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 13:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01472 секунд с 7
ELECTRONIX ©2004-2016