Перейти к содержанию
    

PIC18F4550 USB Программирование С++ Скорость приема данных

Ребя помогите плиз, надо получать данные с АЦП с 8ми каналов, взял готовое решение от Microchip , Отправляю запрос - получаю ответ,

работает как часики , проблема в скорости очень медленно откудато задержка в 15 млсек...Смотрел USBLizer

Помогите плз разобраться...Большое СПС...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

... очень медленно откудато задержка в 15 млсек...

 

Это такт обмена пакетами для USB1. Работаешь в режиме Bulk?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это такт обмена пакетами для USB1. Работаешь в режиме Bulk?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Изменено пользователем Artem_Gusev

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как реализовать по другому???...

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Это у меня в МК....

 

как обрабатывать данные со стороны РС ..??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...