Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 07.12.2016
Сообщений: 31

Организация 8 параллельных SPI каналов приема данных

26.03.2017, 13:03. Показов 3237. Ответов 27

Студворк — интернет-сервис помощи студентам
Добрый день.
У меня есть 8 гироскопов, подключаю их сейчас к Ардуино. Канал SPI там один. Из-за этого скорость опроса всех датчиков падает с возможных 3600 Гц до 3 Гц.
Хочу организовать 8 параллельных SPI каналов, возможно даже не на Ардуино, чтобы просто параллельно слушать все данные.
Заказал CAN контроллеры MCP2515-I/SO MCP2515 для Arduino MEGA 2560 пока, предполагаю, что раз там 4 канала UART, то с по помощью него число каналов можно увеличить до 4. Но где-то внутри понимаю, что это не совсем оптимально.

Подскажите пожалуйста, в каком направлении вообще стоит смотреть?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.03.2017, 13:03
Ответы с готовыми решениями:

Организация приема байт на PortB (ASM, ATMega16)
Помогите пожалуйста с кодом. AVRStidio, Ассемблер. Задание Организовать прием семи байт данных в полудуплексном режиме с порта PORTB...

Организация приема платежа Яндекс.денег в клиенте
Всем привет! При переносе своего сайта на систему клиент-сервер (С++Builder 6) столкнулся с такой проблемой, как оплата клиентом стартового...

Организация параллельных процессов
Мне нужно организовать 5 параллельных процессов, каждый длится от 1 до 5 секунд. И каждый процесс при запуске и при завершении выдает...

27
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
27.03.2017, 13:34
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от kocmockocmoc Посмотреть сообщение
мне приходится сейчас включать-переподключать шину SPI под новый CS.
а это зачем?
0
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
27.03.2017, 13:38
Цитата Сообщение от kocmockocmoc Посмотреть сообщение
Или нет?
это надо читать документацию
Цитата Сообщение от kocmockocmoc Посмотреть сообщение
мне приходится сейчас включать-переподключать шину SPI под новый CS
как Вы это делаете? не пойму откуда такая потеря в скорости?
Цитата Сообщение от kocmockocmoc Посмотреть сообщение
расскажите про программный SPI пожалуйста
http://www.gaw.ru/html.cgi/txt... AVR320.htm http://we.easyelectronics.ru/F... d.html#cut
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
27.03.2017, 13:40
Цитата Сообщение от kocmockocmoc Посмотреть сообщение
расскажите про программный SPI пожалуйста
а че там рассказывать

вот псевдокод
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
for(unsigned int i=0x80;i!=0;i>>=1)
{
delay();
CLK=1;
if(data&i)
 MOSI=1;
else
 MOSI=0;
 
delay();
CLK=0;
 
}
1
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
27.03.2017, 18:52
Заглянул я в скетч, подозреваю, что проблема в производительности. У вас же происходят вычисления с плавающей запятой, а они ппц какие ресурсоемкие на AVR. Так что предлагаю во-первых, проверить ваш код без float'ов, ограничившись просто чтением. А там уже будем посмотреть.
1
1 / 1 / 0
Регистрация: 07.12.2016
Сообщений: 31
27.03.2017, 19:20  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
а это зачем?
потому что иначе инициализируется первый списке датчик и все данные с него идут (какой бы CS не выбрал позднее)

Цитата Сообщение от Витальич Посмотреть сообщение
как Вы это делаете? не пойму откуда такая потеря в скорости?
при каждом запуске канала датчик тратит 20 мс на старт

Цитата Сообщение от ValeryS Посмотреть сообщение
вот псевдокод
немного осмыслю и напишу
Цитата Сообщение от Voland_ Посмотреть сообщение
Заглянул я в скетч, подозреваю, что проблема в производительности
абсолютно верно

Цитата Сообщение от Voland_ Посмотреть сообщение
У вас же происходят вычисления с плавающей запятой, а они ппц какие ресурсоемкие на AVR. Так что предлагаю во-первых, проверить ваш код без float'ов,
в данном случае это не критично, проблема в организации канала, что на каждый датчик сейчас инициализирую шину SPI отдельно и закрываю.
Хочу один раз каждому датчику инициализировать свой канал, потом просто собирать данные.
Это делается при запуске один раз по хорошему, мне пришлось в цикл это вынести. отсюда и потери.
с float проблема очень легко решается, путем переноса только сырых данных и вычислениях уже на сервере.

Добавлено через 8 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
for(unsigned int i=0x80;i!=0;i>>=1)
Это мы собираем данные из регистра до тех пор пока не получили от канала синхронизации CLK - "0"?

Цитата Сообщение от ValeryS Посмотреть сообщение
delay();
CLK=1;
if(data&i)
MOSI=1;
else
MOSI=0;
delay();
Зачем delay в начале и в конце?

Цитата Сообщение от ValeryS Посмотреть сообщение
CLK=1;
if(data&i)
MOSI=1;
else
MOSI=0;
delay();
CLK=0;
Это мы разграничиваем такты синхронизации?

Цитата Сообщение от ValeryS Посмотреть сообщение
if(data&i)
Это если в канале есть данные?

Извините, если вопросы кажутся глупыми, я просто пытаюсь понять

Добавлено через 7 минут
с shiftIn() функцией кто-нибудь сталкивался в ардуино?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
27.03.2017, 19:32
Лучший ответ Сообщение было отмечено kocmockocmoc как решение

Решение

Цитата Сообщение от kocmockocmoc Посмотреть сообщение
потому что иначе инициализируется первый списке датчик и все данные с него идут (какой бы CS не выбрал позднее)
не может такого быть
CS Cristall Select Выбор кристалла, сиречь микросхемы
выбираешь первый кристалл инициализируешь
потом второй и т.д
только один раз в начале

а потом опрашиваешь их по очереди


Цитата Сообщение от kocmockocmoc Посмотреть сообщение
Зачем delay в начале и в конце?
чтобы тактовая частота была похожа на меандр
Цитата Сообщение от kocmockocmoc Посмотреть сообщение
Это если в канале есть данные?
проверяем если бит равен 1 выставляем на ножке 1 если бит равен 0 выставляем 0
Цитата Сообщение от kocmockocmoc Посмотреть сообщение
Это мы собираем данные из регистра до тех пор пока не получили от канала синхронизации CLK - "0"?
нет проверяем байт побитово
1
1 / 1 / 0
Регистрация: 07.12.2016
Сообщений: 31
27.03.2017, 19:38  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
не может такого быть
CS Cristall Select Выбор кристалла, сиречь микросхемы
выбираешь первый кристалл инициализируешь
потом второй и т.д
только один раз в начале
а потом опрашиваешь их по очереди
вы посеяли сомнения во мне, проверю еще раз.

надо осмыслить в начале, что Вы ответили по псевдокоду
0
1 / 1 / 0
Регистрация: 07.12.2016
Сообщений: 31
30.03.2017, 18:53  [ТС]
Вы были правы.
Я все это время копался в библиотеке и datasheet к GY-BMI160 в поисках ответа: почему CS переключается неправильно?
Я нашел ответ: не знаю где именно, но существует зарезервированная переменная ss_spi_cs, которая одна единственная отвечает за текущий выбор, не давая больше никому.
Про неё я не нашел ровным счетом НИЧЕГО в интернете. Кроме пары ссылок на библиотеку в GitHub'e.
В Setup нужно все чипы инициализировать на одном и том же объекте BMI160.
В Loop'e потом просто менять значения в этой переменной.

прикладываю скетч и модифицированную библиотеку для тех, кто столкнется с подобной проблемой.
Вложения
Тип файла: rar multyplex_gyro.rar (1.2 Кб, 2 просмотров)
Тип файла: rar bibl.rar (8.5 Кб, 1 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.03.2017, 18:53

Организация параллельных процессов.
Подскажите, плиз, как организовать сабж... К примеру, запустить копирование файлов, а самому продолжать работать с интерфейсом...

Организация ведения аудио и визуального протоколирования приема врача
не знаю как точно это обозвать,вообщем требуется организовать ведение аудио и визуального протоколирования приема врача. но с записью не на...

Хранение данных об актах приёма-передачи в базе данных (учебная база)
Добрый вечер. Делаю учебный проект по созданию базы данных - реестра техники, возникло несколько вопросов по модели бд, не могу...

База данных с возможностью приема данных из файлов Excel
Здравствуйте Уважаемые! В "Delphi для начинающих" по этому вопросу НИКТО не помог:( Может здесь я найду помощь? Подскажите, где...

Фильтр приема данных
Добрый день, к МК по UART подключено устройство от которого по запросу приходят следующего вида сообщения: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru