Два устройства i2c на отдельных булавках i2c

Funkyd_
Ср 16 августа 2017 г. 14:13
Всем привет !

Я работаю с MPU6050 IMU и микроконтроллером STM32. Я получаю информацию от IMU, используя реализацию Jrowberg (https: // github.com/jrowberg/i2cdevlib/t ... Нет/MPU6050). До сих пор у меня был один MPU, и он работал, используя Hwire.

Тем не менее, мне теперь нужно было бы использовать 2 MPU, а не на том же I2C (поэтому, используя контакты i2C1 и I2C2 на Maple Mini Poard)
Сначала я подумал, что у нас может быть только одна работа Hwire, но я проверил с простым i2CScanner, используя 2 hwires, и он работает. Но когда дело доходит до того, чтобы он работал с реализацией i2CDevlib (который можно найти также, следуя по ссылке выше), у меня есть некоторые проблемы.

Я тоже посмотрел здесь И из того, что я читаю, я понимаю, что на самом деле есть некоторые конфликты или дизайн ?

Так кому -то удалось, чтобы 2 ИМУ работали с этой библиотекой ?

Использование Hardwire кажется хорошим --> Это было быстро, и я мог использовать реализацию Jrowberg, чтобы получить только те данные, которые мне нужны (я хотел бы получить измерения MPU на 1 кГц с использованием буфера FIFO, если это возможно), если это возможно)

Спасибо за вашу помощь ! : mrgreen:

victor_pv
Ср 16 августа 2017 г. 14:31
Не могли бы вы ссылаться на пост о конфликте?

Кроме того.

Аппаратное обеспечение I2C имеет ограничение с прерывами. При использовании прерываний I2C ISR должен иметь наивысший приоритет или данные могут быть повреждены.
Реализация Libmaple устанавливает прерывания I2C на более высокий приоритет, но в настоящее время в настоящее время не использует прерывания, так что это не должно влиять на вас.

Могут быть конфликты с другими булавками. Хорошим местом для подтверждения любой проблемы с периферическим и возможным работой, это листы ошибок (есть несколько в зависимости от версии MCU (размер вспышки, данные производства и что нет).
Это тот, который для He XB MCUS (128 КБ вспышки):
http: // www.ул.com/content/ccc/resource/ ... 190234.PDF

Вы также можете использовать DMA с I2C, чтобы уменьшить накладные расходы на ЦП и пропустить, используя прерывания I2C (вместо этого вы бы использовали прерывания DMA, которые не имеют такой же проблемы).

Пито
Ср 16 августа 2017 г. 14:44
Какова была бы пропускная способность данных как от i2C1, так и I2C2 на 1K образцов в секунду?
Насколько велик (в байтах) 1 образец?
Это даже возможно через 400 кГц i2c -тактовые автобусы?

Funkyd_
Ср 16 августа 2017 г. 14:48
Я назвал это конфликтом, но на самом деле это говорит только о проблемах.
Вот : ViewTopic.PHP?f = 15&T = 365#P3591

Я не использую перерывы. Я просто читаю значения из MPU при 1 кГц (и я не думаю, что код, связанный с IMU, все равно использовал перерывы).

Я скоро вернусь к этому посту.
Я узнал, что если вы определите объект Hardwire, который не является Hwire, то предупреждения появляются во время компиляции, а загрузка на Maple Mini заставляет его не отвечать (по крайней мере, не обнаруживается Arduino IDE).

Si я еще не знаю, может ли работать второй объект Hwire (который, например, hwire2).

В любом случае я вернусь к этому посту :)

Funkyd_
Ср 16 августа 2017 г. 14:52
[Пито - Ср 16 августа 2017 г., 14:44] - Какова была бы пропускная способность данных как от i2C1, так и I2C2 на 1K образцов в секунду?
Насколько велик (в байтах) 1 образец?
Это даже возможно через 400 кГц i2c -тактовые автобусы?
Таким образом, есть 12 байтов для ускорения и гироскопа (AX, AY, AZ, GX, GY, GZ)
Я думал о прочтении всего этого для IMUS и отправить USB на компьютер для постобработки в одном сериале.написать () как двоичные файлы.

ZMEMW16
Ср 16 августа 2017 г. 15:12
Извините, я получил Maple Mini Bit, но нам нужна информация
какая платформа выиграла/mac/linux ?
Какое ядро, arduino_stm32, st_f1 (??) ?
Libmaple или HAL предпочтения ? :)
Какая версия IDE ? 1.6.x 1.8.х
Страдные мысли встречаются, какой модуль вы используете, публикуйте ссылку?
Мне интересно, есть ли у него альтернативный адрес?
Вы подтвердили, что каждый работает над I2C1?

Для себя я ищу пример кода, который показывает, как это сделано, не обязательно вырезанный и вставлен; На самом деле не имеет значения, является ли это одним из примеров SPL, HAL или Unicore-MX.
это тот, который всплывает с этим «О, так это сделано». : D

Мой путь вперед - взглянуть на примеры I2C HAL, управляемые прерыванием.

Стивен

Funkyd_
Ср 16 августа 2017 г. 15:36
Хорошо, так что проблема частично решена:

Итак, использовать 2 hwires легко. Но вам нужно назвать хотя бы одного из них «hwire», иначе у вас есть странное поведение, описанное выше. Это, безусловно, связано с реализацией в i2Cdevlib.
Тем не менее, чтение как ACC X2 + Gyro x2, так и отправка через USB занимает 1.25 мс приблизительно. (Я вижу, возможно ли оптимизировать это, но получить менее 1 мс будет сложно, если не невозможно, я думаю :? )
[ZMEMW16 - Ср 16 августа 2017 г. 15:12] - Извините, я получил Maple Mini Bit, но нам нужна информация
какая платформа выиграла/mac/linux ?
Какое ядро, arduino_stm32, st_f1 (??) ?
Libmaple или HAL предпочтения ? :)
Какая версия IDE ? 1.6.x 1.8.х
Страдные мысли встречаются, какой модуль вы используете, публикуйте ссылку?
Мне интересно, есть ли у него альтернативный адрес?
Вы подтвердили, что каждый работает над I2C1?
Стивен
Я работаю над Linux с Arduino 1.6.11, ядро ​​- arduino_stm32 !

Спасибо ! :)

Виндиам
Ср 16 августа 2017 г. 15:56
MPU6050 имеет PIN -код для выбора адреса I2C 0x68 или 0x69. Я думаю, что нет необходимости использовать 2 проволочные устройства, как с Arduino Wire Lib, вы можете использовать только один объект проволоки для общения за один раз, нет ничего подобного многопоточности. Вместо этого попробуйте подключить их на одной шине, дайте им другой адрес и объекты Init 2 MPU на разных параметрах адреса

Funkyd_
Чт 17 августа 2017 г. 8:14
[Виндиам - Ср 16 августа 2017 г. 15:56] - MPU6050 имеет PIN -код для выбора адреса I2C 0x68 или 0x69. Я думаю, что нет необходимости использовать 2 проволочные устройства, как с Arduino Wire Lib, вы можете использовать только один объект проволоки для общения за один раз, нет ничего подобного многопоточности. Вместо этого попробуйте подключить их на одной шине, дайте им другой адрес и объекты Init 2 MPU на разных параметрах адреса
Да, вы правы некоторыми манипуляциями на MPU переключает адрес от 0x68 на 0x69.
Но я не уверен, что это может спасти тебя 0.20 мс.

Также я думал, что MPU сохраняет последние значения ускорения и гироскопа, которую он произвел, и что я просто просил прочитать эти значения с помощью микроконтроллера, но может случиться так, что данные об ускорении и гироскопе производятся во время запроса из микроконтроллера. Это может сэкономить мне достаточно времени.

Rogerclark
Чт 17 августа 2017 г. 10:59
Если вам нужны более быстрые показатели передачи данных, вы, вероятно, должны использовать SPI, однако я не думаю, что устройства поддерживают SPI, но Afik 9150 и 9250 Spect Spi SPI

ZMEMW16
Чт 17 августа 2017 г. 11:55 утра
6050 - это только i2c
Прокрутите вниз, чтобы обмануть
https: // Playground.Ардуино.cc/main/mpu-6050#несколько
SRP

Виндиам
Пт 18 августа 2017 г. 8:29
[Funkyd_ - Четверг 17 августа 2017 г. 8:14] - Но может случиться так, что данные об ускорении и гироскопе производятся во время запроса от микроконтроллера.
Я думаю, что вывод MPU непрерывный в режиме FIFO, если не производит данные во время запроса, а задержка - время отбора проб.

Радиотепика Bluepill

RTC Libs.