|
и опять вопрос об драйвере obdev, AVR - CDC |
|
|
|
Aug 30 2009, 19:21
|
Местный
  
Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646

|
Здраствуйте! Вобщем хочу сделать девайс который будет подключаться к ЮСБ и распознаваться как ещё один СОМ порт. Всякие дополнительные микрухи использовать не хочу поэтому хочу сделать на софтовом юсб от известного всем obdev. На сайте http://www.recursion.jp/avrcdc/ нашел пример AVR - CDC, только вот я вообще нифига не могу понять где там ф-ция для отправки и ф-ция для приема данных с компа. Может у кого нить есть небольшой примерчик где просто в бесконечном цыкле передаеться байт или массив на комп или пример, где можна получить принятый байт с компа и загрузить его в переменную(как например в случае обычного юарта ISR(UART_RXC_vect){peremennaia = UDR;}) ? ОЧЕНЬ ПРОШУ, ПАМАГИТЕ! Заранее БАЛЬШОЯ СПАСИБА!!!!!!!!!
|
|
|
|
|
Aug 31 2009, 06:41
|

Местный
  
Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581

|
Нужно немного изменить функцию (файл main.c) usbFunctionWriteOut: Код void usbFunctionWriteOut( uchar *data, uchar len ) //---Функция изменена ---// { h2d = *data; usbDisableAllRequests(); } Пример main: CODE int main(void) { // wdt_enable(WDTO_1S); odDebugInit(); hardwareInit(); usbInit(); intr3Status = 0; sei(); for(;;){ /* main event loop */ wdt_reset(); usbPoll();
/* host -> device (пример приема и обработки сообщений) */ if( usbAllRequestsAreDisabled() && 1 /*или флаг*/) { /* switch (h2d){ //Пример управления устройством со стороны ПК case '1': PORTB=1; break;
case '2': PORTB=0; break; } */ usbEnableAllRequests(); }
/* device -> host */ // Передача массива в виртуальный COM if( usbInterruptIsReady() && flag_sucess_buffer /*флаг передачи*/){ static uchar c; static uchar k;
for (k=0;k<REPORT_BUFFER_SIZE;k++) { (usbInterruptIsReady())? c = report_buffer[k], usbSetInterrupt(&c, 1): k--;
wdt_reset(); usbPoll(); if( usbAllRequestsAreDisabled()) usbEnableAllRequests(); } flag_sucess_buffer=0; }
#if USB_CFG_HAVE_INTRIN_ENDPOINT3 /* We need to report rx and tx carrier after open attempt */ if(intr3Status != 0 && usbInterruptIsReady3()){ static uchar serialStateNotification[10] = {0xa1, 0x20, 0, 0, 0, 0, 2, 0, 3, 0};
if(intr3Status == 2){ usbSetInterrupt3(serialStateNotification, 8); }else{ usbSetInterrupt3(serialStateNotification+8, 2); } intr3Status--; } #endif } return 0; }
Прежде чем передавать, необходимо что то положить в буфер и выставить флаг flag_sucess_buffer...
--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
|
|
|
|
|
Aug 31 2009, 10:01
|

Местный
  
Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581

|
Цитата(Br.Misha @ Aug 31 2009, 10:46)  .... Еси не можте то скажите, в каком примере кода нада исправить то что вы мне сказали  ? Я же сказал: Цитата ... (файл main.c) ... AVR-CDC под Atmega8 ...
--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
|
|
|
|
|
Aug 31 2009, 14:30
|
Местный
  
Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646

|
вот http://upwap.ru/540686 сделал всё как вы сказали. компилятор сказал что нету переемнный h2d и flag_sucess_buffer, я их обьявил, потом сказал что нету REPORT_BUFFER_SIZE. я думаю, что это должно быть что то типа #define REPORT_BUFFER_SIZE а вот что после этого писать я хз
|
|
|
|
|
Aug 31 2009, 15:24
|

Местный
  
Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581

|
Я делал под более старую версию проекта. Сейчас посмотрел - у меня переделка с 2313 на мегу8 (делается несложно - немного подправить проект и все...). Исходный проект прилагаю:
--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
|
|
|
|
|
Aug 31 2009, 20:51
|
Местный
  
Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646

|
Исправил только настройки юарта и в usbconfig.h выбрал ногу 4 вместо ноги 3. Полключил к ПК а он пишет неопознаное устройство  . попробовал заменить папку usbdrv на последнюю версию - эфект тот же. кстате, вы писали что переделали этот код с тини2313 на мегу8. можете кинуть тот, что под мегу?
|
|
|
|
|
Aug 31 2009, 21:00
|

Местный
  
Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581

|
Цитата(Br.Misha @ Aug 31 2009, 23:51)  Исправил только настройки юарта и в usbconfig.h выбрал ногу 4 вместо ноги 3... Нафига? И в каком проекте? То что я написал делали?
--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
|
|
|
|
|
Aug 31 2009, 21:54
|

Местный
  
Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581

|
А зачем ноги переопределять? Оставьте их в покое. Что 2313, что м8 подключаются к USB по линиям PD2 и PD3. Для того чтобы перенести проект на m8 достаточно в его свойствах указать тип МК. p.s. Цитата больше ничего не трогал но комп всё равно говорит "я хз что за девайс в ЮСБ" Забавно, проц 2313, зашили в мегу и удивляетесь, да еще и с кварцем на 16... p.p.s. Цитата Только что откомпилировал Ваш проэкт... Проект пишется с буквой "е"... Кроме того, он не мой, а в чистом виде осамовский. И абсолютно рабочий. Что в нем менять я написал. Вы же, как обычно, на это внимание не обратили...
--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
|
|
|
|
|
Sep 1 2009, 13:36
|
Местный
  
Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646

|
Goodefine, еси я тя сильно задолбал то сорри, просто у меня не хочет это работать. Вобщем смотрите что я сделал: Скачал ваш проект, распаковал, открыл. В файл usbconfig.h есть строка #define USB_CFG_DMINUS_BIT 3, это означает что D- от юсб припаян к PD3 но в моей плате он на PD4 поэтому я написал так: #define USB_CFG_DMINUS_BIT 4, сохранил файл. Зашел в настройки проекта, там выбран tiny2313 и частота 12000000, а у меня мега8 с частотой 16Мгц поэтому я выбрал Device: atmega8 Frequency: 16000000. нажал ОК. Потом в main.c нашел строку UBRRL = 77; это значит, что АППАРАТНЫЙ юарт при 12МГц работает на скорости 9600bps но так как у меня 16МГц то для этой скорости нада написать UBRRL = 103; Откомпилировал проект, загрузил в МК, подключил к компу а ПК написал что неизвестное устройство  вроде всё сделал правильно но я хз почему не работает
|
|
|
|
|
Sep 1 2009, 15:19
|

Местный
  
Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581

|
Цитата(Br.Misha @ Sep 1 2009, 16:36)  ... но в моей плате он на PD4 поэтому я написал так: #define USB_CFG_DMINUS_BIT 4, сохранил файл. Зашел в настройки проекта, там выбран tiny2313 и частота 12000000, а у меня мега8 с частотой 16Мгц поэтому я выбрал... Что я могу сказать... Попробуйте запустить проект с минимальными телодвижениями - переделайте себе плату на использование 3-й ноги порта D и поставьте кварц на 12 Мгц. Дальше будет видно...
--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|