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

|
Я откопал кварц 12 МГц, впаял, настроил компил на мегу8, скомпилил, загрузил в МК, кодключил к компу и наконец то комп нашел новое устройство и попросил драйвер! ну я установил драйвер который Goodefine кинул вместе с проэктом и комп сказал что устройство готово к работе. После этого я поключил аппаратный ЮАРТ к компу открыл терминалку и соеденился с СОМ1 потом открыл ещё одну терминалку поключился в виктуальному СОМ4. в обеих терминалах настройки такие: 9600, 8бит, 1 стоп-бит, четность не проверяеться. Насколько я понял, при приеме какоги нить бита по UART он передаеться по ЮСБ и я должен видеть во второй терминалке то, что печатаю в первой но этого не происходит!!!! Goodefine, почему так? или я как то не правильно выбрал настройки?
|
|
|
|
|
Sep 4 2009, 20:34
|
Местный
  
Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646

|
>Связь между uart-ами должна быть физическая - соответствующие линии должны быть соединены >(Rx->Tx,Tx->Rx) через преобразователь уровней типа max232 (если требуется)... я точно так и сделал но не работает, щас хочу попробовать просто передавать массив на комп, вот что я сделал: в вашей проге написано: /* device -> host */ if( usbInterruptIsReady() && (UCSRA & (1<<RXC)) ) { uchar c; c = UDR; usbSetInterrupt(&c, 1); } я это убрал и написал так: volatile char text[10] = "Hello!"; volatile char text1=0; if( usbInterruptIsReady() && (text1<8) ) { uchar c; c = text[text1]; usbSetInterrupt(&c, 1); text1++; } но даные в комп НЕ ПЕРЕДАЮТЬСЯ!!! в терминалке ничего нету  . В чем проблема?
|
|
|
|
|
Sep 5 2009, 11:14
|

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

|
Взял сегодня сам, вышеприведенный проект для тини2313 и проделал с ним следующие манипуляции: -В makefile указал тип mcu=atmega8 -там же заменил строчки ## Include Directories INCLUDES = -I"C:\Project\Recursion\CDC-2313.2008-01-27\usbdrv" -I"C:\Project\Recursion\CDC-2313.2008-01-27\." на ## Include Directories INCLUDES = -I"." -I"..\usbdrv" -I".." что позволяет размещать папку с проектом где угодно -для того чтобы не светилось ненужное теперь 2313 заменяем ВЕЗДЕ в makefile cdc2313 на cdcAtm8. Тоже самое делаем в файлах проекта *.aps и *.aws (редактируются в тоталкомандере по F4). Соответственно, переименовываем эти файлы в cdcAtm8. -удаляем результаты компиляции в папке default (файлы cdc2313.*) В итгое получаем рабочий проект для m8, с нормальными именами. Для примера, я изменил исходный файл main.c так, что при отправке с терминала в виртуальный порт цифры 1, в ответ приходит "Hello_World!". Разумеется при этом исходные функции устройства не работают. Думаю для чего это сделано, понятно...
Проект прилагаю. Одно небольшое замечание по поводу переопределения ноги D- . При необходимости, это лучше делать одновременно в двух файлах: usbconfig.h в корне папки проекта, и в usbconfig-prototype.h в папке usbdrv. Иначе можно поймать глюк...
cdcAtm8.rar ( 108.4 килобайт )
Кол-во скачиваний: 119
--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
|
|
|
|
|
Sep 5 2009, 14:38
|
Местный
  
Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646

|
Вобщем открыл я ваш проект, там были закоментированые строки UBRRL = 77; и UCSRB = (1<<RXEN) | (1<<TXEN);, я коменты убрал чтобы аппаратный юарт смог работать, переставил D- на ногу 4 в обеих файлах которые вы сказали. Прошил МК, загрузил прошивку подключил к компу, девайс компом распознался, открыл две терминалки, соеденился с двумя СОМ портами, отправил в виртуальный символ 1 но с аппаратного СОМ порта ничего не пришло  . Я немного переделал код и добавил вот это: DDRC |= (1<<2)|(1<<3);// на PC2 and PC3 припаяны светодиоды. PORTC |= (1<<3);//зажечь один светодиод. и несколько изменил одну функцию и вот что получилось: if( usbAllRequestsAreDisabled()&& 1) { switch (u2d){ ///Пример управления устройством со стороны ПК case '1': PORTC ^= (1<<3); break; case '2': PORTC ^= (1<<2); break; } usbEnableAllRequests(); } больше ничего не трогал, отправляю символы 1 и 2 в терминал но со светодиодами ничего не происходит  Кстате, какое в терминалке нада выбирать управление потоком? я всегда выбирал none. PS: юзал стандартную программу терминала и ещё одну какую то скачаную с инета(я ею посоянно пользуюсь при работе с СОМ).
|
|
|
|
|
Sep 5 2009, 15:43
|

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

|
Цитата(Br.Misha @ Sep 5 2009, 17:38)  Вобщем открыл я ваш проект... Повторю еще раз для тех кто... Я что комменты зря поставил? В последнем проекте ничего сначала менять не нужно! Вообще ничего. Просто зашить (линии не меняем - PD2 и PD3) и все. Если терминалом в виртуальный ком отправить 1-цу (см. скриншот) то он ответит (в тот же терминал). Что непонятного то? Не надо делать хаотических попыток что то изменить... Насчет терминалки, выкладывал здесь. Работает точно (см. скриншот)...
--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
|
|
|
|
|
Sep 5 2009, 17:59
|
Местный
  
Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646

|
Блин, точно, я как то лохонулся..... сделал как вы сказали и заработало!!!!! даже пробовал светодиодами управлять, тоже получилось! Только вот почему то когда я заменил папку usbdrv на папку последней версии то девайс стал определяться но потом комп пишет ошибку, ну та лан, с этим я уже сам разберусь  И появились ещё два вопроса: 1. Насколько часто нада вызывать ф-цию usbPoll(); ? 2. Во всех примерах этого драйвера использовался сторожевой таймер. Обизательно ли его нада юзать?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|