Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Беспроводная передача данных
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
amiller
Приветствую!
Возникла задача сделать канал передачи данных между основным устройством на микроконтроллере и пультом управления (тоже на микроконтроллере).
Сначала я сориентировался на блютуз модули типа НС-05 и НС-06.
Закупил несколько штук, удалось настроить канал связи достаточно легко.
Тестировал в двух вариантах:
1. COM-порт блютуза от ноутбука - НС-05 (slave) - UART микроконтроллера.
2. USB-UART - НС-05 (master) - НС-05 (slave) - UART микроконтроллера.
В принципе связь есть в обоих случаях, но с проблемами.
У меня протокол полудуплексный, спроектирован под RS485: запрос - ожидание ответа - если таймаут, то новая попытка.
А эти модули похоже отправляют данные пачками, т.е. мои запросы набиваются в буфер и при его заполнении или по таймауту (достаточно большому), происходит передача целого блока. С ответами тоже самое. При этом эффективная скорость передачи данных получается примерно на порядок меньше расчётной.
Конечно можно переделать ПО для связи, сделать отдельные очереди на передачу и прием с разбором и распределением ответов, хотя это не избавляет от задержек реакции на единичный запрос.
Но вдруг есть способ настроить эти модули (размер буфера, интервал передачи данных). Может у кого есть опыт успешного использования?
Может есть варианты перепрошивки модулей. Кстати для их прошивки я находил только реализацию программаторов на базе LPT. Может кто видел решение посовременнее?
Или предложите совсем другое решение. Цель в общем то понятна из названия.
zltigo
Цитата(amiller @ Apr 11 2017, 18:50) *
Цель в общем то понятна из названия.

1)Название абсолютно не отражает НИЧЕГО.
2)Все радиоитерфейсы ПАКЕТНЫЕ а не байтовые в отличие он UART.
3)Так что либо как то подстраиваться под правила формирования пакетов такими модулями, либо писать свой софт со своими правилами формирования пакетов.
Но фомировать пакеты по любому придется.
4) Все. Чудес не будет. Никто за Вас устраивающую Вас упаковку Вашего неведомого байтового протокола во фреймы эфирного не сделает.
bassizlink
Цитата(amiller @ Apr 11 2017, 15:50) *
Приветствую!
Возникла задача сделать канал передачи данных между основным устройством на микроконтроллере и пультом управления (тоже на микроконтроллере).
Сначала я сориентировался на блютуз модули типа НС-05 и НС-06.
Закупил несколько штук, удалось настроить канал связи достаточно легко.
Тестировал в двух вариантах:
1. COM-порт блютуза от ноутбука - НС-05 (slave) - UART микроконтроллера.
2. USB-UART - НС-05 (master) - НС-05 (slave) - UART микроконтроллера.
В принципе связь есть в обоих случаях, но с проблемами.
У меня протокол полудуплексный, спроектирован под RS485: запрос - ожидание ответа - если таймаут, то новая попытка.
А эти модули похоже отправляют данные пачками, т.е. мои запросы набиваются в буфер и при его заполнении или по таймауту (достаточно большому), происходит передача целого блока. С ответами тоже самое. При этом эффективная скорость передачи данных получается примерно на порядок меньше расчётной.
Конечно можно переделать ПО для связи, сделать отдельные очереди на передачу и прием с разбором и распределением ответов, хотя это не избавляет от задержек реакции на единичный запрос.
Но вдруг есть способ настроить эти модули (размер буфера, интервал передачи данных). Может у кого есть опыт успешного использования?
Может есть варианты перепрошивки модулей. Кстати для их прошивки я находил только реализацию программаторов на базе LPT. Может кто видел решение посовременнее?
Или предложите совсем другое решение. Цель в общем то понятна из названия.

Пере прошивать можно.Для реализации вашей задачи нужно создавать прошивку, но слава богу не с нуля.Качайте Bluelab 4.1, в месте с ним будет доступны примеры, интерактивная справка по структурам, функциям, перечислениям и.д. , через браузер. Там же и документация по программированию. По всей видимости на BC417 доступно только программирование на СИ, так как во всей документации я не нашел информации по MCU XAP, не смог найти и по ассемблеру, накопал только по XAP4,5,6, все что ниже как будто засекретили.В блюкор чипах уже с завода предустановлена прошивка.Программист имеет возможность создавать программу, которые взаимодействует с Виртуальной машиной и работает с уже встроенной прошивкой.Как я понял там несколько кольцевых буферов, все тонкости не знаю, сам учусь, в качестве любителя, но думаю размер буфера настроить можно.Отлаживать и запускать можно прям на Ваших платках, через SPI LPT.USB SPI для SCR bluecore продают китайцы на али.Есть решение на FTDI чипе, но у меня не вышло, так как я самостоятельно сделал платку, а чип оказался поддельный, мне кажется проще купить готовый USB to UART с FTDIRL.
V_G
1. БеСпроводная
2. Китайские модули HC05 ужасно плохо документированы (по состоянию на 5 лет назад, когда я рассматривал их применение). Было на что-то более солидное описание, где расписывались эфирные пакеты и эфирные таймауты. В первом случае (если не пользоваться механизмом таймаутов) вам просто надо забить любым мусором свой пакет от конца информационной части до конца эфирного пакета. Во втором случае надо попробовать настроить таймауты блютус-модуля, чтобы он выдавал в эфир незаполненный буфер. В любом из этих случаев в эфире будет присутствовать мусорная часть пакета. В третьем случае можно попробовать подогнать длину эфирного пакета под Вашу длину (если протокол и система команд модуля позволяют менять длину эфирного пакета)
bassizlink
Цитата(V_G @ Apr 11 2017, 22:45) *
1. БеСпроводная
2. Китайские модули HC05 ужасно плохо документированы (по состоянию на 5 лет назад, когда я рассматривал их применение). Было на что-то более солидное описание, где расписывались эфирные пакеты и эфирные таймауты. В первом случае (если не пользоваться механизмом таймаутов) вам просто надо забить любым мусором свой пакет от конца информационной части до конца эфирного пакета. Во втором случае надо попробовать настроить таймауты блютус-модуля, чтобы он выдавал в эфир незаполненный буфер. В любом из этих случаев в эфире будет присутствовать мусорная часть пакета. В третьем случае можно попробовать подогнать длину эфирного пакета под Вашу длину (если протокол и система команд модуля позволяют менять длину эфирного пакета)

Вся передача внутри микроконтроллера основана на потоках.То есть например источником выступает UART, а приемником RFComm, два пути обмена данными, это прямое соединение, например что то в роде ConnectStreame(Источник,Приемник). В этом случае происходит не контролируемая передача, но при этом есть функции которые конфигурируют потоки, там вроде как можно указывать максимальную длину пакета и что то там еще.Я честно говоря совсем в другой области работаю, поэтому из за ненадобностью я плохо ориентируюсь в тонкостях.Есть еще и контролируемая передача, в которой можно проверять количество байт в источнике(я так понимаю это кольцевой буфер обмена) читать , что то делать с ними, а потом отправлять их в приемник или не отправлять, причем задача получает сообщения типа MORE_DATA,если в источник поступили байты и соответственно обработчик сообщений может выполнить обработку данных из него и дальнейшую передачу. Управление происходит по имени сообщения,которое передается в качестве аргумента обработчику.
amiller
Цитата(V_G @ Apr 12 2017, 02:45) *
2. Китайские модули HC05 ужасно плохо документированы (по состоянию на 5 лет назад, когда я рассматривал их применение). Было на что-то более солидное описание, где расписывались эфирные пакеты и эфирные таймауты. В первом случае (если не пользоваться механизмом таймаутов) вам просто надо забить любым мусором свой пакет от конца информационной части до конца эфирного пакета. Во втором случае надо попробовать настроить таймауты блютус-модуля, чтобы он выдавал в эфир незаполненный буфер. В любом из этих случаев в эфире будет присутствовать мусорная часть пакета. В третьем случае можно попробовать подогнать длину эфирного пакета под Вашу длину (если протокол и система команд модуля позволяют менять длину эфирного пакета)

С этим согласен. И интерфейс управления через AT-команды убогий. Забивать буфер мусором, при этом не зная его реального размера, тоже не очень эффективно. я надеялся, что можно простыми средствами изменить настройки модуля, но похоже не судьба. Видимо придётся переходить в реализации протокола от уровня отдельных сообщений к уровню обработки потоков данных. При этом заполнение буферов произойдёт автоматически.


Цитата(bassizlink @ Apr 12 2017, 00:59) *
Пере прошивать можно.Для реализации вашей задачи нужно создавать прошивку, но слава богу не с нуля.Качайте Bluelab 4.1, в месте с ним будет доступны примеры, интерактивная справка по структурам, функциям, перечислениям и.д. , через браузер. Там же и документация по программированию. По всей видимости на BC417 доступно только программирование на СИ, так как во всей документации я не нашел информации по MCU XAP, не смог найти и по ассемблеру, накопал только по XAP4,5,6, все что ниже как будто засекретили.В блюкор чипах уже с завода предустановлена прошивка.Программист имеет возможность создавать программу, которые взаимодействует с Виртуальной машиной и работает с уже встроенной прошивкой.Как я понял там несколько кольцевых буферов, все тонкости не знаю, сам учусь, в качестве любителя, но думаю размер буфера настроить можно.Отлаживать и запускать можно прям на Ваших платках, через SPI LPT.USB SPI для SCR bluecore продают китайцы на али.Есть решение на FTDI чипе, но у меня не вышло, так как я самостоятельно сделал платку, а чип оказался поддельный, мне кажется проще купить готовый USB to UART с FTDIRL.

Путь погружения в программирование блютуз модулей выглядит слишком затратным. Часть моего вопроса была ещё в том, что может быть известны другие работоспособные варианты реализации беспроводного канала связи.
Желателен конечно блютуз (из-за распространенности), но не исключены и другие технологии.
Или же, как пишет уважаемый zltigo "2)Все радиоитерфейсы ПАКЕТНЫЕ а не байтовые в отличие он UART." Следовательно при беспроводной передаче данных следует просто это учитывать.
bassizlink
Цитата(amiller @ Apr 12 2017, 04:04) *
С этим согласен. И интерфейс управления через AT-команды убогий. Забивать буфер мусором, при этом не зная его реального размера, тоже не очень эффективно. я надеялся, что можно простыми средствами изменить настройки модуля, но похоже не судьба. Видимо придётся переходить в реализации протокола от уровня отдельных сообщений к уровню обработки потоков данных. При этом заполнение буферов произойдёт автоматически.



Путь погружения в программирование блютуз модулей выглядит слишком затратным. Часть моего вопроса была ещё в том, что может быть известны другие работоспособные варианты реализации беспроводного канала связи.
Желателен конечно блютуз (из-за распространенности), но не исключены и другие технологии.
Или же, как пишет уважаемый zltigo "2)Все радиоитерфейсы ПАКЕТНЫЕ а не байтовые в отличие он UART." Следовательно при беспроводной передаче данных следует просто это учитывать.

Думаю, что говорить о платках HC-05,06, как о китайских не совсем правильно на мой взгляд.По сути из китайского там только обвязка, текстолит и не большой кусочек кода микропрограммы.Посмотрел на дорогие модули bluegiga, там тот же чип от SCR, только обвязка другая и экран металлический,разочаровался.На самом деле не так страшен черт как его малюют и запрограммировать этот чип не так сложно.Весь процесс заключается в том, что нужно взять пример из Bluelab4.1(в инете пошарьте найдете), с которым платка будет полностью работать как готовое устройства реализуя профиль SPP, только не будет ни одной AT команды.Если сравнить HC-05,06 и другие например блюгига, то базовая прошивка там везде одинаковая, это предустановленная заводом изготовителя чипа и всем известная под именем linvor.Процесс программирования сводится к тому,что просто создаются свои AT команды, которые изменяют PSkey ключи из хранилища.Но такая микропрограмма необходима не во всех случаях.Можно абсолютно легально скачать Bluesuite с сайта SCR и с помощью PSTool изменить нужные ключи, которые будут заставлять работать чип так как Вам нужно, если конечно нет необходимости в динамическом изменении поведения работы чипа.В этой же программе есть кнопка, которая предоставляет описание на ключ.
jcxz
Цитата(amiller @ Apr 12 2017, 06:04) *
Путь погружения в программирование блютуз модулей выглядит слишком затратным. Часть моего вопроса была ещё в том, что может быть известны другие работоспособные варианты реализации беспроводного канала связи.
Желателен конечно блютуз (из-за распространенности), но не исключены и другие технологии.

Так и их вагон + маленькая тележка.
При отсутствии других требований, можно выбрать то, что попроще в реализации и предсказуемо себя ведёт: например nRF24L01 - описание простое, подробное.
BT я бы выбирал в последнюю очередь, если только нужна связь устройство - комп(телефон) без доп. устройств на стороне компа(тела) и если в этом случае нельзя почему-то использовать WiFi.
И работа с ними на МК гораздо проще чем уродским интерфейсом АТ-команд и прошлого века терминалов и пользователей.
Не понимаю - почему так народ на этом BT зациклен??? Если нужна радио-связь, то и следует выбирать радио-связь, а не левую надстройку над ней.
bassizlink
Цитата(amiller @ Apr 11 2017, 16:50) *
Приветствую!
Возникла задача сделать канал передачи данных между основным устройством на микроконтроллере и пультом управления (тоже на микроконтроллере).
Сначала я сориентировался на блютуз модули типа НС-05 и НС-06.
Закупил несколько штук, удалось настроить канал связи достаточно легко.
Тестировал в двух вариантах:
1. COM-порт блютуза от ноутбука - НС-05 (slave) - UART микроконтроллера.
2. USB-UART - НС-05 (master) - НС-05 (slave) - UART микроконтроллера.
В принципе связь есть в обоих случаях, но с проблемами.
У меня протокол полудуплексный, спроектирован под RS485: запрос - ожидание ответа - если таймаут, то новая попытка.
А эти модули похоже отправляют данные пачками, т.е. мои запросы набиваются в буфер и при его заполнении или по таймауту (достаточно большому), происходит передача целого блока. С ответами тоже самое. При этом эффективная скорость передачи данных получается примерно на порядок меньше расчётной.
Конечно можно переделать ПО для связи, сделать отдельные очереди на передачу и прием с разбором и распределением ответов, хотя это не избавляет от задержек реакции на единичный запрос.
Но вдруг есть способ настроить эти модули (размер буфера, интервал передачи данных). Может у кого есть опыт успешного использования?
Может есть варианты перепрошивки модулей. Кстати для их прошивки я находил только реализацию программаторов на базе LPT. Может кто видел решение посовременнее?
Или предложите совсем другое решение. Цель в общем то понятна из названия.

Я тут учусь и пишу прошивку на эти модули, правда пока только Slave режим, хочу сделать возможность конфигурировать устройство по воздуху, например менять параметры UART, включать аппаратное управление потоками, менять имя, пинкод, изменять размер кадра при передачи по UART(7 бит, но пока сомневаюсь, что получится ).Вы хотите, чтобы пакет не превышал определенного размера?Могу попробовать реализовать это в своей прошивки, выложить на форуме.
amiller
Цитата(jcxz @ Apr 12 2017, 14:12) *
Так и их вагон + маленькая тележка.
При отсутствии других требований, можно выбрать то, что попроще в реализации и предсказуемо себя ведёт: например nRF24L01 - описание простое, подробное.
BT я бы выбирал в последнюю очередь, если только нужна связь устройство - комп(телефон) без доп. устройств на стороне компа(тела) и если в этом случае нельзя почему-то использовать WiFi.
И работа с ними на МК гораздо проще чем уродским интерфейсом АТ-команд и прошлого века терминалов и пользователей.
Не понимаю - почему так народ на этом BT зациклен??? Если нужна радио-связь, то и следует выбирать радио-связь, а не левую надстройку над ней.

nRF24L01 посмотрю, спасибо.
Почему блютуз, - я для себя так ставил задачу:
У меня в производстве достаточно много разных устройств с управлением по последовательному интерфейсу.
Хотелось иметь в качестве опции универсальное беспроводное решение.
Чтобы можно было управлять с ноутбука, с телефона, и с собственного микроконтроллерного пульта, поставив туда беспроводной адаптер.
Поэтому и выбрал такое предварительное решение. А сейчас хочу или утвердится в этом решении или сменить на другое.
bassizlink
Цитата(amiller @ Apr 12 2017, 12:06) *
nRF24L01 посмотрю, спасибо.
Почему блютуз, - я для себя так ставил задачу:
У меня в производстве достаточно много разных устройств с управлением по последовательному интерфейсу.
Хотелось иметь в качестве опции универсальное беспроводное решение.
Чтобы можно было управлять с ноутбука, с телефона, и с собственного микроконтроллерного пульта, поставив туда беспроводной адаптер.
Поэтому и выбрал такое предварительное решение. А сейчас хочу или утвердится в этом решении или сменить на другое.

Почему бы вам просто не включить аппаратное управление потоками например изменив ключ "UART configuration when under VM control"(PSKEY_UART_CONFIG_USR), в PSTool , на 0x08a8 , в ваших HC05,06, проделать что то похожее на других микроконтроллерах, добавить пару лишних проводов и гарантированная передача данных без переполнения буферов готова.

Если у вас нет LPT, то купите себе вот этот адаптер https://www.aliexpress.com/item-img/Wavesha...2728399302.html
Поставьте себе вот этот драйвер https://github.com/lorf/csr-spi-ftdi, там и распиновка есть.
bassizlink

Программно управление потоком можно задействовать так:

PioSetRts (True) //устанавливает лог 1 на контакте RTS, это говорит о готовности принимать данные, в противном случае виртуальная машина автоматически меняет лог на 0.

PioGetCts () // активизирует Cts на прием, Виртуальная машина начинает реагировать на входящий сигнал.

amiller
Цитата(bassizlink @ Apr 12 2017, 15:32) *
Почему бы вам просто не включить аппаратное управление потоками например изменив ключ "UART configuration when under VM control"(PSKEY_UART_CONFIG_USR), в PSTool , на 0x08a8 , в ваших HC05,06, проделать что то похожее на других микроконтроллерах, добавить пару лишних проводов и гарантированная передача данных без переполнения буферов готова.

Если у вас нет LPT, то купите себе вот этот адаптер https://www.aliexpress.com/item-img/Wavesha...2728399302.html
Поставьте себе вот этот драйвер https://github.com/lorf/csr-spi-ftdi, там и распиновка есть.

Если Вы говорите о добавлении пары лишних проводков, то речь идёт о интерфейсе между блютуз модулем, например НС-05, и моим микроконтроллером.
Так тут проблем никаких нет, я работаю на скорости всего лишь 115200 и никаких переполнений буферов не наблюдается.
Речь идёт о том, что модуль накапливает данные, которые я посылаю, и потом их достаточно большим пакетом передает по радиоканалу.
Поможет ли аппаратное управление потоком между НС-05 и микроконтроллером упорядочить/изменить передачу пакетов по радиоканалу? Что-то сомневаюсь.
LPT у меня есть, при желании найду на складе. Только я с большим сомнением отношусь к технологиям, которые в 2017 году имеют единственную возможность программирования через интерфейс 30-летней давности.
bassizlink
Цитата(amiller @ Apr 13 2017, 07:07) *
Если Вы говорите о добавлении пары лишних проводков, то речь идёт о интерфейсе между блютуз модулем, например НС-05, и моим микроконтроллером.
Так тут проблем никаких нет, я работаю на скорости всего лишь 115200 и никаких переполнений буферов не наблюдается.
Речь идёт о том, что модуль накапливает данные, которые я посылаю, и потом их достаточно большим пакетом передает по радиоканалу.
Поможет ли аппаратное управление потоком между НС-05 и микроконтроллером упорядочить/изменить передачу пакетов по радиоканалу? Что-то сомневаюсь.
LPT у меня есть, при желании найду на складе. Только я с большим сомнением отношусь к технологиям, которые в 2017 году имеют единственную возможность программирования через интерфейс 30-летней давности.

Согласен, что не поможет.Есть современное решение, если вы имели введу LPT https://ru.aliexpress.com/item/CSR-Bluetoot...7e-b22d526db131
amiller
Цитата(bassizlink @ Apr 13 2017, 11:15) *
Согласен, что не поможет.Есть современное решение, если вы имели введу LPT https://ru.aliexpress.com/item/CSR-Bluetoot...7e-b22d526db131

Я примерно про это и спрашивал. На аппаратном уровне это же простой преобразователь USB-SPI, таких полно на рынке. Но можно ли с его помощью программировать блютуз модули? Поддерживает ли ПО такие адаптеры?
Ведь недаром в интернете предлагаются только варианты с LPT, резисторами и проводочками...
bassizlink
Цитата(amiller @ Apr 13 2017, 11:25) *
Я примерно про это и спрашивал. На аппаратном уровне это же простой преобразователь USB-SPI, таких полно на рынке. Но можно ли с его помощью программировать блютуз модули? Поддерживает ли ПО такие адаптеры?
Ведь недаром в интернете предлагаются только варианты с LPT, резисторами и проводочками...

Продавец ответил.
2017-04-13 11:51
[support chip] BC2 series: BC215159A, BC213143A, BC213159, BC212015, etc. BC3 series: BC31A223, BC358239A, BC352239, etc. BC4 series: BC413159A06, BC417143B, BC419143A, etc. BC5 series: BC57F687, BC57E687, BC57H687C, BC57K687, etc. BC6 series: BC6110, BC6130, BC6145, BC6030, BC6031, BC6888, etc. BC7 series: BC7820, BC7830, etc. BC8 series: CSR8311, CSR8510, CSR8605, CSR8610, CSR8615, CSR8620, CSR8630, CSR8635, CSR8640, CSR8645, CSR8670, CSR8810, Such CSR8811 BLE series: CSR1000, CSR1001, CSR1010, CSR1011, CSR1012, etc. [Characteristics] Support for all CSR serial chips Support CVC online debugging Support the same computer at the same time to connect multiple usb-spi programmer Support all Bluetooth tools Supports all operating systems (XP, WIN7, WIN8) The latest seven bit device serial number, each device unique device ID, shell, software, device manager three yards consistent

Продавец выслал мне BlueSuite 2.5, там есть опция при установке драйвера USB SPI.Если с этим работает то и c Bluelab4.1 будет аналогично работать. А другие SPI программаторы работать не будут, так как блюлаб не заточен под их драйвера.
bassizlink
Кстати файл, который он мне прислал называется BlueSuite 2.5 for driver.zip.
bassizlink
Писец, я в шоке.После установки USB драйвера перестали работать все блютуз донглы, пока не знаю как это исправить, но появилась возможность читать и менять ключи через PSTools, без всяких программаторов. Попробую это на голом HC06.
bassizlink
Вообщем благополучно удалил драйвер, все снова заработало.Видимо этот драйвер не для программатора, он просто позволяет настраивать модули с USB интерфейсом. Скорее всего нужно выбирать драйвер lpt при установке.НС-06 не завелся, хотя в принципе это закономерно.
bassizlink
Немного по изучал стэк профиля SPP.Из ходя из него Вам нужно по экспериментировать с двумя настройками изменив их в PSTool:
"Maximum HCI ACL packet length" (ACL-Asynchronous Connection-Less. Bluetooth data packet ) ,
"Maximum number of HCI ACL data packets"-максимальное количество отправляемых пакетов данных, ACL HCI,
которые могут храниться ,внутри микросхемы, в любое время.


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