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

 
 
 
Reply to this topicStart new topic
> PIC18F4550 USB Программирование С++ Скорость приема данных, вопросы посвяшенные по работе с PIC18F4550 в часности программирование
Artem_Gusev
сообщение Jun 14 2008, 07:29
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 30-04-08
Пользователь №: 37 190



Ребя помогите плиз, надо получать данные с АЦП с 8ми каналов, взял готовое решение от Microchip , Отправляю запрос - получаю ответ,
работает как часики , проблема в скорости очень медленно откудато задержка в 15 млсек...Смотрел USBLizer
Помогите плз разобраться...Большое СПС...
Go to the top of the page
 
+Quote Post
r_dot
сообщение Jun 15 2008, 01:20
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 237
Регистрация: 14-08-07
Из: Москва
Пользователь №: 29 791



Цитата(Artem_Gusev @ Jun 14 2008, 11:29) *
... очень медленно откудато задержка в 15 млсек...


Это такт обмена пакетами для USB1. Работаешь в режиме Bulk?
Go to the top of the page
 
+Quote Post
=AK=
сообщение Jun 15 2008, 02:51
Сообщение #3


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(r_dot @ Jun 15 2008, 10:50) *
Это такт обмена пакетами для USB1. Работаешь в режиме Bulk?

Один такт обмена для USB1 равен 1мс. Но за это время можно послать данные только в одну сторону (за исключением Control pipe, по которой можно успеть получить ответ с том же 1мс фрейме). А 15 мс - это задержки Винды, причем, это еще мало, обычно бывает 20-30 мс. Если по bulk отправлять запрос, а потом ждать ответа, то такие задержки и следует ожидать.
Go to the top of the page
 
+Quote Post
Artem_Gusev
сообщение Jun 15 2008, 09:22
Сообщение #4





Группа: Новичок
Сообщений: 5
Регистрация: 30-04-08
Пользователь №: 37 190



Цитата(=AK= @ Jun 15 2008, 05:51) *
Один такт обмена для USB1 равен 1мс. Но за это время можно послать данные только в одну сторону (за исключением Control pipe, по которой можно успеть получить ответ с том же 1мс фрейме). А 15 мс - это задержки Винды, причем, это еще мало, обычно бывает 20-30 мс. Если по bulk отправлять запрос, а потом ждать ответа, то такие задержки и следует ожидать.


Да да так и вышло, все дело в винде, запрос ответ получаю в течении 1млсек. а вот между задержа из-за того что таймер не может в винде быстрее срабатывать, как реализовать по другому???... если не сложно подскажите..программирую на Buildere C++

Сообщение отредактировал Artem_Gusev - Jun 15 2008, 09:23
Go to the top of the page
 
+Quote Post
=AK=
сообщение Jun 15 2008, 09:51
Сообщение #5


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(Artem_Gusev @ Jun 15 2008, 18:52) *
как реализовать по другому???...

Трудно что-то советовать, если неизвестно, что вы хотите.

Непонятно, зачем вы вообще посылаете этот запрос. Сам факт чтения данных из пайпа уже является запросом. Пусть ваши АЦП все время ведут преобразование, а результаты ваша прога может посылать в PC безо всяких специальных запросов, до тех пор, пока может посылать (т.е. пока буфер не полон).
Go to the top of the page
 
+Quote Post
Artem_Gusev
сообщение Jun 15 2008, 10:48
Сообщение #6





Группа: Новичок
Сообщений: 5
Регистрация: 30-04-08
Пользователь №: 37 190



Цитата(=AK= @ Jun 15 2008, 12:51) *
Трудно что-то советовать, если неизвестно, что вы хотите.

Непонятно, зачем вы вообще посылаете этот запрос. Сам факт чтения данных из пайпа уже является запросом. Пусть ваши АЦП все время ведут преобразование, а результаты ваша прога может посылать в PC безо всяких специальных запросов, до тех пор, пока может посылать (т.е. пока буфер не полон).

Код
void ServiceRequests(void)
{
    byte index;
    OpenADC(ADC_FOSC_4 & ADC_RIGHT_JUST & ADC_12_TAD, ADC_INT_OFF & ADC_REF_VDD_VSS ,0b0000);
    SetChanADC(ADC_CH0);
                Delay10TCYx(5);
                ReadPOT();
                dataPacket._byte[0] = ADRESL;
                dataPacket._byte[1] = ADRESH;
    SetChanADC(ADC_CH3);
                Delay10TCYx(5);    
                ReadPOT();
                dataPacket._byte[2] = ADRESL;
                dataPacket._byte[3] = ADRESH;
    SetChanADC(ADC_CH4);
                Delay10TCYx(5);    
                ReadPOT();
                dataPacket._byte[4] = ADRESL;
                dataPacket._byte[5] = ADRESH;
    SetChanADC(ADC_CH8);
                Delay10TCYx(5);    
                ReadPOT();
                dataPacket._byte[6] = ADRESL;
                dataPacket._byte[7] = ADRESH;
    SetChanADC(ADC_CH9);
                Delay10TCYx(5);    
                ReadPOT();
                dataPacket._byte[8] = ADRESL;
                dataPacket._byte[9] = ADRESH;
    SetChanADC(ADC_CH10);
                Delay10TCYx(5);    
                ReadPOT();
                dataPacket._byte[10] = ADRESL;
                dataPacket._byte[11] = ADRESH;
    SetChanADC(ADC_CH11);
                Delay10TCYx(5);    
                ReadPOT();
                dataPacket._byte[12] = ADRESL;
                dataPacket._byte[13] = ADRESH;
    SetChanADC(ADC_CH12);
                Delay10TCYx(5);    
                ReadPOT();
                dataPacket._byte[14] = ADRESL;
                dataPacket._byte[15] = ADRESH;
    CloseADC();            
if(!mUSBGenTxIsBusy())
    {            
    USBGenWrite((byte*)&dataPacket,16);
    }//end if
}//end ServiceRequests
Это у меня в МК....

как обрабатывать данные со стороны РС ..??
Go to the top of the page
 
+Quote Post

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

 


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


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