AVR 309 разбираем на русском или usb+ПК

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

AVR 309 разбираем на русском или usb+ПК

Сообщение demson »

наткнулся в сети на переведенный пакет 309 апликуха, но всеравно не могу понять что за что отвечает. Давайте раз и навсегда разберемся с шиной USB.

вот ссылка
http://microsin.ru/content/view/605/44/

переведенный проект здесь
http://microsin.ru/Download.cnt/avr/avr-usb-russian.rar

ну собственно предлагаю начать с проекта examples\hid-data что в архиве лежит.
[/list]
Вложения
howtobegin-step-by-step.doc
пошаговые инструкции
(121.5 КБ) 3112 скачиваний
Последний раз редактировалось demson Ср апр 01, 2009 19:13:01, всего редактировалось 1 раз.
в спорах рождается ИСТИНА [AND] flud.
Аватара пользователя
nictrace
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вс янв 11, 2009 09:29:08
Откуда: Ярославль
Контактная информация:

Сообщение nictrace »

И какие, собственно, вопросы? 8)
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

прием передача с компа непонятно как взаимодействует программа, точнее не вникну в алгоритм взаимодействия с программой.
Аватара пользователя
nictrace
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вс янв 11, 2009 09:29:08
Откуда: Ярославль
Контактная информация:

Сообщение nictrace »

Так, смотрим ф-ю main()...
Она обращается к устройству через вызов usbOpenDevice(), смотрим его.
Эта ф-я вызывает поочередно usb_find_busses(); и usb_find_devices();
Это библиотечные ф-и :)
в OpenDevice.h мы видим строку:

#include <usb> /* это libusb, см. http://libusb.sourceforge.net/ */

Даже адрес есть! :) Так что не обязательно разбираться как это работает. Но если очень хочется - скачайте на указанном сайте доки по библиотечке :)
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

а библиотека LibUSB-Win32 под basiс работает?
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

hid-data перехожу на него ведь это почти то что нужно 128 байт- 128 переменных.
итак продолжем рассуждать есть проект готовый передать 128 байт.
(hid-data). уважаемые коты, знающие язык си помогите разобраться что куда.
расскажите что куда и откуда получается
и самое главное как поправить его чтобы писала не в eerom а в переменные - регистры и читала переменные тоже.
для начала было бы идеалом сделать на 5 - 10 переменных.
Вложения
main.c
сам исходник
(5.51 КБ) 819 скачиваний
hid-data.zip
полный набор с исходником и по компа
(32.41 КБ) 496 скачиваний
в спорах рождается ИСТИНА [AND] flud.
Аватара пользователя
saschai
Говорящий с текстолитом
Сообщения: 1596
Зарегистрирован: Вс дек 14, 2008 20:36:47
Откуда: SPb

Сообщение saschai »

Пытался сделать переходник на меге8 ЮСБ-КОМ, по выше приведенной методе, в итоге получил AVR 309 USB to UART protocol converter, понял, что чавой то не то :)) долго ломал голову, что с этим добром делать, но ком порт так и не получилсь. По др. схеме все, ОК.
alltihom
Родился
Сообщения: 1
Зарегистрирован: Пн окт 22, 2007 00:44:22
Откуда: Москва
Контактная информация:

Сообщение alltihom »

У вас заработал USB > RS232? А расскажите поподробней что и куда. :)
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

да все с первого ... э ... второго раза завелось. просто забыл фьюзы сначала. а так все ок все работает из под basic. ошибок не наблюдается. ура.
самое важное кварц на 12 Мгц. что еще спрашивайте что интересно отвечу а то чтото ничего сложного не встретил, по этому и рассказать не о чем.
в спорах рождается ИСТИНА [AND] flud.
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

а кто знает или пробывал что будет если две avr 309 воткнуть в usb?
в спорах рождается ИСТИНА [AND] flud.
QZ_
Открыл глаза
Сообщения: 70
Зарегистрирован: Чт дек 20, 2007 14:47:31
Откуда: Челябинск
Контактная информация:

Сообщение QZ_ »

смотрите исходники моего термометра - я думаю то что вам надо.
http://radiokot.ru/circuit/digital/pcmod/16/
Аватара пользователя
__Alexander
Потрогал лапой паяльник
Сообщения: 335
Зарегистрирован: Вт сен 11, 2007 10:27:08
Откуда: Киев

Сообщение __Alexander »

Или других термометров, которые уже года два в сети валяются и не кому не надо.
http://www.stahlke.org/dan/usb-temperature/ :))

А раз и навсегда разобраться с USB не получится никак. На то там и первая буковка "U". Если ты разработал осцилограф на мегагерц 100, и хочешь передать в реалтайме на комп, то тебе не помогут ни HID, ни CDC, а берем и пишем свои драйвера под свое-же железо.
А если для HID, то есть либра avrusb. Если RS232 - то лучше не морочиться с кодом, а поставить usb-rs232 микруху.

Одним словом - вариантов множество. Для начала надо поставить цель задачи.
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

как вижу это я
ТЗ
контроллер.
1 разработать эффективный код устройства, способный принимать и отправлять по 5 байт переменных, находящихся часть в eerom часть во flash.
2 разработать систему которая смогла бы отличить несколько устройств, или выписать все данные индетефикации где-то вариантов пять различных.
ПК
3 разработать DLL способную получать от этих 5 устройств информацию ЛИБО написать 5 проектов dll, соответственно ее команды прочесть записать.

4 учесть возможность расширения базы устройств.
за основу можно взять 309 апликуху.
в спорах рождается ИСТИНА [AND] flud.
Аватара пользователя
__Alexander
Потрогал лапой паяльник
Сообщения: 335
Зарегистрирован: Вт сен 11, 2007 10:27:08
Откуда: Киев

Сообщение __Alexander »

Для 5 байт и пяти устройств хватит и HID, только вот идентификатор какой винда присвоит... короче, с софта на компе точно надо знать свои устройства, т.е. для расширения последних надо заранее подготовить базу. Хотя не факт. По мастдаю не подскажу.
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

а написать dll под hid реально? или что либо такое
тоесть будет функция f1 и устройство U1 U2 ...
обратимся U1(f1)
это было-бы наилучшим вариантом, поскольку вызвать ее можно из любово языка программирования.
в спорах рождается ИСТИНА [AND] flud.
QZ_
Открыл глаза
Сообщения: 70
Зарегистрирован: Чт дек 20, 2007 14:47:31
Откуда: Челябинск
Контактная информация:

Сообщение QZ_ »

да, такое реально
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

вот только как это реализовать? всматриваюсь в исходники и все рано ничего не понимаю.
вот смотрю термометр там по 128 байт обмен
[list=]uchar usbFunctionRead(uchar *data, uchar len)
{
data[0] = Temperature;
data[1] = szero;
data[2] = cel_frac_bits;
data[3] = cback;
data[4] = owstate;
return len;
}[/list]

то есть обмен по байту 5 байт
дата это принятый репорт 128 байт
то-есть берем первые 5 байт - остальные 123 байта нули
    uchar usbFunctionWrite(uchar *data, uchar len)
    {
    if (mode == 0) {
    switch (data[0]) {
    case 21:
    mode = 2; //mess
    owstate = 0;
    break;
    case 3: //check device
    cback = data[1] + 1;
    break;
    case 89:
    mode = 1; //get temp
    break;
    }
    }
    return 1; /* возврат 1, если это был последний кусок */
    }

я так понимаю пишем всего байт от хоста остальное игнорируем
поправьте что не так.
ПО Хоста даже проанализировать не могу, разжуйте пожалуйста.
в спорах рождается ИСТИНА [AND] flud.
QZ_
Открыл глаза
Сообщения: 70
Зарегистрирован: Чт дек 20, 2007 14:47:31
Откуда: Челябинск
Контактная информация:

Сообщение QZ_ »

Размер репорта - 8 байт, там даже для удобства ввел константу REPORT_LEN. Хосту передаю 5 байт, 3 оставшиеся не важно какие.

Код: Выделить всё

PROGMEM char usbHidReportDescriptor[22] = {    /* дескриптор репорта USB */
    0x06, 0x00, 0xff,              // USAGE_PAGE (Generic Desktop)
    0x09, 0x01,                    // USAGE (Vendor Usage 1)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x95, REPORT_LEN,              //   REPORT_COUNT (8)
    0x09, 0x00,                    //   USAGE (Undefined)
    0xb2, 0x02, 0x01,              //   FEATURE (Data,Var,Abs,Buf)
    0xc0                           // END_COLLECTION
};


Как я понял, REPORT_SIZE - это собственно длина одной посылки, в байтах. А REPORT_COUNT - это общее число байт в репорте (в примере hid_data - 128).

Хост отправляет такой же репорт (8 байт), в 0 байте команда. Проверка текущего режима (mode) для игнорирования повторной отправки одной команды. Дальше простой выбор. Условные коды 21,3,89 - выдуманные (или не совсем :) ), можно сделать просто 1,2,3 (в хосте тоже поправить).

Нечто под названием check device - инкремент второго байта из посылки и возврат этого значения через cback. Таким макаром я 100% определяю отсутствие устройства :)) , потому как были проблемы с этим.

owstate - текущее состояние линии 1-ware. В хосте ниакак не используется (или почти никак :) ).
Temperature - целое значение абс. величины температуры.
szero - знак (0 +/1 -)
cel_frac_bits - младшие биты абс. величины температуры (дробная часть).


Про хост:

Прием репорта:
WorkDevice.GetFeature(MyReport, FeatureReportLen); При успехе возвращает true.
MyReport - буффер, куда копируются данные.
FeatureReportLen - собственно длина этих данных.

Точно также отправка репорта:
WorkDevice.SetFeature(MyReport, FeatureReportLen); При успехе возвращает true.
MyReport - буффер, откуда берутся данные.
FeatureReportLen - собственно длина этих данных.
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

dll под hid реально?

что-то я попутал там же можно к любому устройству обратиться dll библиотека уже написана под windows.
а как происходит поиск устройства? через возврат второго байта или по Vendor'у
в спорах рождается ИСТИНА [AND] flud.
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

вот под winapi
Типичная процедура общения с custom USB device из юзер-моды
----------
АПИ DLL Смысл
----------
HidD_GetHidGuid hid.dll Получить GUID для HID класса
SetupDiGetClassDevs setupapi.dll Получить информацию о классе устройства
SetupDiEnumDeviceInterfaces setupapi.dll Получить информацию об устройстве
SetupDiGetDeviceInterfaceDetail setupapi.dll Получить путь к устройству
SetupDiDestroyDeviceInfoList setupapi.dll Освободить ресурсы используемые SetupDiGetClassDevs
CreateFile kernel32.dll Открываем коммуникационный файл
HidD_GetAttributes hid.dll Получаем Vendor ID, Product ID, Version Number.
HidD_GetPreparsedData hid.dll Получаем хэндл к буферу с инфой о возможностях устройства
HidP_GetCaps hid.dll Получаем структуру объясняющую возможности устройства
HidD_FreePreparsedData hid.dll Освобождаем ресурсы используемые HidD_GetPreparsedData
WriteFile kernel32.dll Пишем выходной репорт в девайс
ReadFile kernel32.dll Читаем входной репорт из девайса
HidD_SetFeature hid.dll Передаем фичи-репорт в девайс
HidD_GetFeature hid.dll Читаем фичи-репорт из девайса
CloseHandle kernel32.dll Освобождаем хэндл
----------
в спорах рождается ИСТИНА [AND] flud.
Ответить

Вернуться в «Интеграция с ПК»