====== I²C хаб (Troyka-модуль) ======
[[amp>product/troyka-i2c-hub?utm_source=man&utm_campaign=troyka-pull-up&utm_medium=wiki|I²C хаб]] подружит модули с одинаковыми адресами.
{{ :продукты:troyka-i2c-hub:troyka-i2c-hub.4.jpg?nolink |}}
===== Видеообзор =====
{{youtube>WVeIXgeX0MQ?large}}
===== Принцип работы =====
Работу модуля удобно представить в виде галетного переключателя.
Есть управляющее устройство ''Master'' и подчинённые устройства ''Slave'' на восьми каналах I²C хаба.
В каждый промежуток времени I²C хаб коммутирует ''Master'' только с одним устройством.
{{ :продукты:troyka-i2c-hub:i2c_hub_switch.gif?nolink |}}
Хаб позволяет подключить к управляющей плате восемь I²C устройств с одинаковым адресом и опрашивать их по очереди, переключая каналы.
===== Подключение и настройка =====
I²C хаб общается с управляющей электроникой по [[Видеоуроки:7-i2c-и-processing|I²C/TWI]]. При подключении к [[amp>collection/arduino?utm_source=man&utm_campaign=troyka-i2c-hub&utm_medium=wiki|Arduino]] или [[amp>product/iskra-js?utm_source=man&utm_campaign=troyka-i2c-hub&utm_medium=wiki|Iskra JS]] используйте [[amp>/product/arduino-troyka-shield?utm_source=man&utm_campaign=troyka-i2c-hub&utm_medium=wiki|Troyka Shield]].
{{ :продукты:troyka-i2c-hub:troyka-i2c-hub_scheme_troyka-shield.png?nolink |}}
С [[amp>product/arduino-troyka-slot-shield?utm_source=man&utm_campaign=troyka-i2c-hub&utm_medium=wiki|Troyka Slot Shield]] провода не понадобятся вовсе.
{{ :продукты:troyka-i2c-hub:troyka-i2c-hub_scheme_troyka-slot-shield.png?nolink |}}
А при подключении к [[amp>collection/raspberry-pi?utm_source=man&utm_campaign=troyka-i2c-hub&utm_medium=wiki|Raspberry Pi]] возьмите [[https://amperka.ru/product/raspberry-troyka-cap|Troyka Cap]].
{{ :продукты:troyka-i2c-hub:troyka-i2c-hub_scheme_troyka-cap.png?nolink |}}
===== Пример работы ======
Подключим [[amp>/product/troyka-rtc?utm_source=man&utm_campaign=troyka-i2c-hub&utm_medium=wiki|часы реального времени]] и [[amp>/product/troyka-led-matrix?utm_source=man&utm_campaign=troyka-i2c-hub&utm_medium=wiki|монохромную светодиодную матрицу]] к Arduino через [[amp>/product/troyka-i2c-hub?utm_source=man&utm_campaign=troyka-i2c-hub&utm_medium=wiki|I²C разветвитель.]]
=== Схема устройства ===
{{ :продукты:troyka-i2c-hub:troyka-i2c-hub_i2c_scanner.png?nolink |}}
=== Код для Arduino ===
// библиотека для работы с I²C хабом
#include
// создаём объект для работы с хабом
// адрес по умолчанию 0x70
TroykaI2CHub splitter;
// можно создавать несколько объектов с разными адресами
// подробнее читайте на:
// http://wiki.amperka.ru/продукты:troyka-i2c-hub
void setup() {
// открываем последовательный порт
Serial.begin(115200);
// ждём открытия порта
while(!Serial) {
}
// печатаем сообщение об успешной инициализации Serial-порта
Serial.println("Serial init OK");
// начало работы с I²C хабом
splitter.begin();
Serial.println("Splitter init OK");
// ждём одну секунду
delay(1000);
}
void loop() {
// счётчик цикла
for (int i = 0; i < 8; i++) {
// переключаем по очереди каналы
splitter.setBusChannel(i);
// выводим номер канала
Serial.print("Set channel ");
Serial.print(i);
Serial.println(":");
// запускаем I²C сканер
startScanerI2C();
// ждём одну секунду
delay(1000);
}
}
void startScanerI2C()
{
// переменная состояние ответа
byte state;
// переменная хранения текущего адреса
byte address;
// переменная для хранения количества найденых I²C устройств
int countDevices = 0;
// печатем о начале поиска
Serial.println("Scanning...");
// перебираем по очереди все адреса от 0 до 127
for (address = 1; address < 127; address++ ) {
// начинаем передачу данных по текущем адресу
Wire.beginTransmission(address);
// завершаем передачу данных
state = Wire.endTransmission();
// если пришедший байт равен нулю
if (state == 0) {
// на адресе есть устройство
// печатаем об этом
Serial.print("I2C device found at address 0x");
// если адрес меньше 16, печатем ноль
if (address < 16) {
Serial.print("0");
}
// печатаем текущий адрес в 16 разрядной системе исчесления
Serial.print(address, HEX);
Serial.println(" !");
// инкрементируем кол-во найденых устройств
countDevices++;
}
}
// если не найдено ни одного I²C устройства
// печатаем об этом
if (countDevices == 0) {
Serial.println("No I²C devices found");
} else {
// печатаем о завершении процесса
Serial.println("Done");
}
}
===== Элементы платы =====
{{ :продукты:troyka-i2c-hub:troyka-i2c-hub_annotation.png?nolink |}}
==== Микросхема управления ====
Сердце модуля — микросхема хаб {{:продукты:troyka-i2c-hub:pca9547_datasheet.pdf|PCA9547}} для модулей с шиной I²C.
==== Troyka-контакты ====
На модуле выведено две пары Troyka-контактов.
//Нижняя группа//
* Сигнальный (R) — сигнал сброса микросхемы управления PCA9547. Подключите к цифровому пину микроконтроллера. [[#перемычка_сброса|По умолчанию пин отключён от чипа]]
* Питание (V) — соедините с рабочим напряжением микроконтроллера.
* Земля (G) — Соедините с пином ''GND'' микроконтроллера.
//Верхняя группа//
* Сигнальный (D) — пин данных шины I²C. Подключите к SDA пину микроконтроллера.
* Сигнальный (C) — пин тактирования шины I²C. Подключите к SCL пину микроконтроллера.
==== Контакты питания портов выхода ====
==== контакты шины I²C портов выхода ====
==== Площадки выбора адреса ====
Подключайте до восьми модулей к одному контроллеру путём смены адреса чипа. Для этого на обратной стороне модуля мы расположили три контактных площадки. Для смены адреса замкните интересующие контактные площадки с помощью [[amp>product/soldering-iron-goot-30w?utm_source=man&utm_campaign=troyka-pull-up&utm_medium=wiki|паяльника]] и [[amp>product/solder-08mm-small?utm_source=man&utm_campaign=troyka-pull-up&utm_medium=wiki|припоя]].
{{ :продукты:troyka-i2c-hub:troyka-i2c-hub_switch_address.png?nolink |}}
^ Адрес ^ A2 ^ A1 ^ A0 ^
| 0x70 | 0 | 0 | 0 |
| 0x71 | 0 | 0 | 1 |
| 0x72 | 0 | 1 | 0 |
| 0x73 | 0 | 1 | 1 |
| 0x74 | 1 | 0 | 0 |
| 0x75 | 1 | 0 | 1 |
| 0x76 | 1 | 1 | 0 |
| 0x78 | 1 | 1 | 1 |
==== Перемычка сброса ====
По умолчанию ножка ''RESET'' микросхемы управления ''PCA9547'' физически отключёна от пина ''R''. Для включения программного сброса капните каплей припоя на контактную площадку. После проделанных действий при подаче низкого уровня на пин ''R'', микросхема перезагрузиться.
===== Принципиальная и монтажная схемы =====
{{:продукты:troyka-i2c-hub:troyka-i2c-hub_schematic.png?direct&460 |}}
{{:продукты:troyka-i2c-hub:troyka-i2c-hub_layout_top.png?direct&170 |}}
{{:продукты:troyka-i2c-hub:troyka-i2c-hub_layout_bottom.png?direct&170 |}}
===== Характеристики =====
* Напряжение питания: 3.3–5 В
* Интерфейс на вход: I²C
* Адрес модуля по умолчанию: 0x70
* Интерфейс на выход: восемь дополнительных каналов I²C
* Габариты: 25,4×25,4 мм
===== Ресурсы =====
* [[amp>product/troyka-i2c-hub?utm_source=man&utm_campaign=troyka-i2c-hub&utm_medium=wiki|I²C хаб]] в магазине
* [[https://github.com/amperka/TroykaI2CHub|Библиотека для Arduino]]
* [[https://github.com/amperka/hardware-drawings/blob/master/troyka-i2c-hub_top.svg|Векторное изображение модуля (TOP)]]
* [[https://github.com/amperka/hardware-drawings/blob/master/troyka-i2c-hub_bottom.svg|Векторное изображение модуля (BOTTOM)]]
* {{:продукты:troyka-i2c-hub:pca9547_datasheet.pdf|Datasheent на микросхему PCA9547}}