Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
03.08.2014, 14:29
|
|
Частый гость
Регистрация: 06.03.2011
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Тормоза при передаче данных через UART в Bluetooth модуль
Всем привет!
Делаю Bluetooth HID джойстик на микроконтроллере PIC18F4550 и bluetooth модуле Bluegiga WT12. Микроконтроллер с модулем общается через UART на скорости 115200, эта скорость вшита в модуль производителем. С конфигурацией bluetooth модуля разобрался, компьютер определяет его как HID джойстик, данные тоже передаются, кнопки джойстика работают, но есть одна проблемка при передаче данных. Данные передаются в WT12 микроконтроллером через UART постоянно в цикле. Почему-то возникают тормоза при передаче данных, а именно, если передавать данные без паузы после каждого байта, то данные идут с тормозами, а если добавить паузу после передачи очередного байта, то все нормалек. У меня контролируется буфер UART, контролируется буфер WT12, и все равно эти не понятные тормоза. Такое впечатление, что где-то что-то еще осталось без контроля, и оно типа переполняется и дает ошибки, хотя данные поступают на комп без искажений, проверял спец прогой, которая, показывает входящие HID данные. Программку для контроллера пишу в MikroC. Вот два варианта кода:
Вариант передачи данных через UART в Bluetooth WT12 без паузы, который дает тормоза т.е. я нажимаю кнопку джойстика и через секунду вижу как загорается кнопка в параметрах джойстика, в винде, а так же вижу во входящих данных в программе которая показывает входящие данные HID.
PHP код:
|
while(1)
{
writebuff[0]=0x9F;
writebuff[1]=0x07;
writebuff[2]=0xA1;
writebuff[3]=x_axis;
writebuff[4]=y_axis;
writebuff[5]=x2_axis;
writebuff[6]=y2_axis;
writebuff[7]=hat;
writebuff[8]=~PORTD;
for(i=0;i‹9;i++)
{
while( PIR1.TXIF == 0){}//контроль буфера UART
while(UART1_Tx_Idle() == 0) {}//контроль буфера UART
while( BTM_NRTS_bit == 1){}//контроль буфера WT12
UART1_Write(writebuff[i]);//передача байта в WT12
//Delay_us(100);//пауза
}
}
|
Вариант, который работает нормально, но с паузой после очередной передачи данных.
PHP код:
|
while(1)
{
writebuff[0]=0x9F;
writebuff[1]=0x07;
writebuff[2]=0xA1;
writebuff[3]=x_axis;
writebuff[4]=y_axis;
writebuff[5]=x2_axis;
writebuff[6]=y2_axis;
writebuff[7]=hat;
writebuff[8]=~PORTD;
for(i=0;i‹9;i++)
{
while( PIR1.TXIF == 0){}//контроль буфера UART
while(UART1_Tx_Idle() == 0) {}//контроль буфера UART
while( BTM_NRTS_bit == 1){}//контроль буфера WT12
UART1_Write(writebuff[i]); //передача байта в WT12
Delay_us(100);//пауза
}
}
|
Подскажите, пожалуйста, в чем может быть дело? Может кто-то работал с WT12 и сталкивался с такой проблемой?
|
|
|
|
03.08.2014, 15:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,016
Сказал спасибо: 0
Сказали Спасибо 4,954 раз(а) в 2,378 сообщении(ях)
|
Re: Тормоза при передаче данных через UART в Bluetooth модуль
rus_12345,
а что показывают NRTS/NCTS - может нужно работать с учетом "переваривания" потока? или попробовать снизить скорость до 9600 - зачем джойстику скорость 115к?
|
|
|
|
03.08.2014, 15:38
|
|
Почётный гражданин KAZUS.RU
Регистрация: 18.02.2012
Адрес: Саратов
Сообщений: 1,647
Сказал спасибо: 168
Сказали Спасибо 428 раз(а) в 347 сообщении(ях)
|
Re: Тормоза при передаче данных через UART в Bluetooth модуль
в энтом не разбираюсь.может размер стека увеличить.
|
|
|
|
04.08.2014, 08:58
|
|
Частый гость
Регистрация: 06.03.2011
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Тормоза при передаче данных через UART в Bluetooth модуль
Цитата:
|
а что показывают NRTS/NCTS - может нужно работать с учетом "переваривания" потока? или попробовать снизить скорость до 9600 - зачем джойстику скорость 115к?
|
NRTS bluetooth модуля контролируется:
while( BTM_NRTS_bit == 1){}//контроль буфера WT12
т.е. когда модуль разрешает, тогда данные и отправляются. Точно так же с буфером микроконтроллера - если буфер полный, то запись в него приостанавливается.
На счет скорости. Не знаю, может и хватит скорости по меньше, нужно проверить, но предварительно необходимо сконфигурировать модуль на эту скорость. Думаете эти тормоза из-за высокой скорости? А модуль разве не рассчитан на эту скорость? Мне просто интересно, 115200 как бы рекомендуемая скорость производителем, если его прописали по умолчанию. Микроконтроллер тоже поддерживает данную скорость. На этой скорости в самом начале программы идет конфигурирование модуля и получение инфы в ответ на АТ команды т.е. все проходит хорошо, а в режиме данных такая беда. Не знаю может дело в HID библиотеке? Хотя через USB HID мой джойстик работает без проблем, а скорость передачи та же что и через bluetooth. Я попробую на скорости 9600, посмотрим что получится, но странно что не работает нормально на 115200. Пропускная способность радиоканала вроде как не слабая, в datasheet написано: BlueCore4 implements Bluetooth® 2.1 + EDR (Enhanced Data Rate) and it can deliver data rates up to 3 Mbps. Если я правильно понимаю...
Какие еще варианты могут быть?
|
|
|
|
06.08.2014, 08:47
|
|
Частый гость
Регистрация: 06.03.2011
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Тормоза при передаче данных через UART в Bluetooth модуль
Проверил вчера передачу данных микроконтроллером в bluetooth модуль через UART на скорости 9600. Результат тот же т.е. данные доходят до компа с задержкой.
|
|
|
|
06.08.2014, 11:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,616
Сказал спасибо: 708
Сказали Спасибо 4,383 раз(а) в 2,007 сообщении(ях)
|
Re: Тормоза при передаче данных через UART в Bluetooth модуль
Попробуйте модули HC-06 у меня не было проблем при непрерывном потоке на 921600бод
__________________
Я не помогаю. Я провоцирую думать.
Не дай вам Бог плохих контактов.
|
|
|
|
05.01.2015, 16:47
|
|
Прописка
Регистрация: 21.03.2011
Сообщений: 107
Сказал спасибо: 15
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Тормоза при передаче данных через UART в Bluetooth модуль
Народ, кто знаком с БТ модулями?
Есть ли у них возможность получать уровень сигнала???
|
|
|
|
05.01.2015, 18:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Тормоза при передаче данных через UART в Bluetooth модуль
У дешевых нет, у дорогих есть
|
|
|
|
05.01.2015, 19:39
|
|
Прописка
Регистрация: 21.03.2011
Сообщений: 107
Сказал спасибо: 15
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Тормоза при передаче данных через UART в Bluetooth модуль
Сообщение от niXto
|
У дешевых нет, у дорогих есть
|
не подскажешь модель модуля небольшую по размерам и экономную в плане энергии.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:28.
|
|