Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PIC18F4550 USB Программирование С++ Скорость приема данных
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Artem_Gusev
Ребя помогите плиз, надо получать данные с АЦП с 8ми каналов, взял готовое решение от Microchip , Отправляю запрос - получаю ответ,
работает как часики , проблема в скорости очень медленно откудато задержка в 15 млсек...Смотрел USBLizer
Помогите плз разобраться...Большое СПС...
r_dot
Цитата(Artem_Gusev @ Jun 14 2008, 11:29) *
... очень медленно откудато задержка в 15 млсек...


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

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


Да да так и вышло, все дело в винде, запрос ответ получаю в течении 1млсек. а вот между задержа из-за того что таймер не может в винде быстрее срабатывать, как реализовать по другому???... если не сложно подскажите..программирую на Buildere C++
=AK=
Цитата(Artem_Gusev @ Jun 15 2008, 18:52) *
как реализовать по другому???...

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

Непонятно, зачем вы вообще посылаете этот запрос. Сам факт чтения данных из пайпа уже является запросом. Пусть ваши АЦП все время ведут преобразование, а результаты ваша прога может посылать в PC безо всяких специальных запросов, до тех пор, пока может посылать (т.е. пока буфер не полон).
Artem_Gusev
Цитата(=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
Это у меня в МК....

как обрабатывать данные со стороны РС ..??
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.