как подключить 2ой IIC
- Войдите на сайт для отправки комментариев
Ср, 16/01/2019 - 11:17
Добрый день.
Сейчас работаю с платой STM32F103 blue pill.
1.Использую аппаратный IIC(В6, B7), подключив файл Wire.h.
Все работает хорошо.
2. Возникла необходимость использовать 2ой аппаратный IIC (В10, В11). Каким образом это можно сделать? Добавление цифры 1
или 2 к командам IIC (как в Serial) не работает.
Заранее спасибо.
С уважением, Антон.
Набери в пользовательский поиск "Два датчика на I2C". Получишь кучу ответов. Рассмотри.
Добрый день.
Спасибо. В поиске нашел, но файл HARDWIRE.h не подключается.
#include <stdint.h>
08
#include <HardWire.h>
Так как всё-таки называется файл: HARDWIRE.h или HardWire.h ? Для языка программирования С/С++ это два разных файла, т.к. язык регистрозависим.
Добрый день.
1.Файл называется HardWire.h. Это то что посоветовали в поиске на данном сайте
2. В свою очередь в файле Wire.сpp нашел следующую функцию:
// TODO: Add in Error Handling if devsel is out of range for other Maples
вот тут почитайте https://www.stm32duino.com/viewtopic.php?t=1590
Там. кстати, в обсуждении задают вполне резонный вопрос - зачем вам две шины I2C - ведь и к одной замечательно подключается по многу устройств одновременно?
Так как всё-таки называется файл: HARDWIRE.h или HardWire.h ? Для языка программирования С/С++ это два разных файла, т.к. язык регистрозависим.
В Винде это один и тот же файл. И языки программирования С/С++ ничего с этим фактом сделать не могут. Думаю, и в Линуксе для совместимости по файлам с Виндой никто в здравом уме не будет делать файлы формата 8.3 регистрозависимыми.
Ну а переменные внутри файлов, естественно, могут быть и регистрозависимыми, т.к. от свойств файловой системы их содержание никак не зависит.
Там. кстати, в обсуждении задают вполне резонный вопрос - зачем вам две шины I2C - ведь и к одной замечательно подключается по многу устройств одновременно?
Ну варианты бывают разные. Неоднократно сталкивалься с устройствами где и 3 и 4 линии I2C задействованны были.
Добрый день.
Спасибо за ответы.
микросхема MCP23017 имеет 3 адресные ноги (А2-А0) т.е. максимум 8 шт. на 1 IIC. Я использую 14 микросхем т.е. мне необходимо использовать 2 IIC.
Спасибо. Там написано следующее:
At the end of the Wire.cpp file you can see :
CODE: SELECT ALL
т.е. что в конце файла Wire.cpp написано: TwoWire Wire(PB6, PB7, SOFT_STANDARD);, но
к сожалению ничего такого там нет, а есть, как я уже писал:
// TODO: Add in Error Handling if devsel is out of range for other Maples
Похоже что это просто разные версии библиотеки. Приведите ссылку на ту кторороя у вас.
А, если не секрет, зачем вам столько портов?
gisli79, что вам непонятно? Создаёте второй объект TwoWire названиеобъекта(2); И в программе уже обращаетесь к нему, а не к дефоловому wire. Например:
TwoWire myi2c(2);
myi2c.begin();
myi2c.beginTransmission(address);
myi2c.write(adr);
Естессно если устройство имеет библиотеку, то в библиотеке нужно исправить всё на новый объект.
1 плата с 7 микросхемами на вход, 2 плата с 7 микросхемами на выход.
На выходную плату подаем сигналы, с входной считываем. Посередине устройство требующее проверки.
Спасибо.
Если я правильно Вас понял, то внизу приведен текст программы
инициализации 2х микросхем по 2 м IIC.
Правильно?
Скачал с сайта в декабре. могу выслать по эл.почте.
Спасибо за помощь. Некоторые вопросы могут показаться глупыми, но в Arduino я недавно.
Если я правильно понял, то используя функцию TwoWire , написанную в Wire.h создаем объект для 2 го IIC и используем его в программе вместе с 1м IIC?
gisli79, ну да как-то так в теории, а что долго проверить, в чём проблема то?
Только первый I2C уже привязан по умолчанию к обьекту wire. Так что WIRE1 определять не нужно.
1. Спасибо. Я так и думал.
2. Жду плату.
3.Вы в своем сообщении писали:
"Естессно если устройство имеет библиотеку, то в библиотеке нужно исправить всё на новый объект."
но исходя из кода в библиотеке Wire.h, код трогать не нужно а оставить как был, а именно :
// TODO: Add in Error Handling if devsel is out of range for other Maples
gisli79, Я писал про библиотеку для _устройства_, которая в свою очередь работает через библиотеку wire.
Да. Я понял.
Для моей платы (устройства) я библиотеки не делал.