Как проверить, имеют ли два устройства одинаковый адрес на I2C?
Я начинаю новый проект с Arduino UNO и расширителем MCP23017. Используя это, я могу подключить 8 микросхем на Arduino, выбрав разные адреса (от 0x20 до 0x27). Мой вопрос: если я подключу две микросхемы MCP23017 с одним и тем же адресом, есть ли способ как-то увидеть, что у меня есть две микросхемы с одинаковым адресом? Я использую стандартный сканер I2C в коде Arduino, но он не вернет меня, если у меня есть несколько чипов с одинаковым адресом, например, он увидит только один чип!
Можете ли вы помочь мне с некоторыми идеями, чтобы проверить, как чипы человека связаны с одним и тем же адресом?
@Alin.B, 👍1
2 ответа
Насколько я понимаю, дублирующиеся адреса I2C не позволяют главному устройству обмениваться данными с подчиненными устройствами, поэтому ответ — нет.
Вместо этого подключайте устройства по одному, запускайте сканер I2C, запишите адрес для каждого и обратите внимание на дубликаты адресов.
Если оба устройства одинаковы, настроены одинаково и отвечают одинаково, то невозможно сказать, есть ли одна, две или четыре сотни.
Однако, если между двумя устройствами есть различия, вы получите поврежденные данные.
I2C – это открытый протокол. Чтобы устройство отправило 0, оно переводит линию данных в низкий уровень. Чтобы он отправил 1, он позволяет подтягивающему резистору поднять линию на высокий уровень.
Итак, если у вас есть два устройства, и они оба отправляют 1, вы получаете 1. Если они оба отправляют 0, вы получаете 0. Но если одно отправляет 1, а другое отправляет 0, то 0 "выиграет" и вы увидите 0.
Поскольку большинство устройств при включении возвращаются в предустановленное состояние по умолчанию, скорее всего, вы всегда будете видеть несколько устройств одного типа по одному адресу как одно устройство.
Одним из возможных способов решения этой проблемы является наличие некоторого управляющего сигнала, уникального для каждого устройства, который заставит их реагировать только по одному за раз. Например, вы можете перевести все контакты RESET ведомых устройств в состояние LOW и поднять каждый из них по очереди, чтобы увидеть, по какому адресу находится устройство. Если затем вы увидите два ответа на один и тот же адрес, значит, у вас есть конфликт, и вы можете сообщить об этом как таковой.
Еще одна возможность — подключить контакты управления адресом к контактам ввода-вывода и обмениваться данными со всеми ведомыми устройствами по одному и тому же адресу, но вы одновременно устанавливаете адрес только одного ведомого устройства в качестве "живого" адреса. Это также дает вам возможность иметь гораздо больше, чем просто 8 подчиненных устройств.
- Отправка и получение различных типов данных через I2C в Arduino
- Как работают функции вне цикла void?
- Как отображать переменные на 0,96-дюймовом OLED-дисплее с библиотекой u8glib?
- Как отправить строку на мастер с помощью i2c
- Как выбрать альтернативные контакты I2C на ESP32?
- Что означает в I2C «NACK получен»?
- NodeMCU с RFID RC522 и LCD-модулем интерфейса I2C вместе
- Несколько датчиков I2C с одинаковым адресом