Каково время выхода из Wire.begin()?
Вот схема моего проекта:
Цель состоит в том, чтобы заставить ноутбук работать как клавиатура для настольного ПК. Nano использует Serial.read() для получения нажатий клавиш с ноутбука и пересылки данных нажатия и отпускания клавиш на Leonardo (с помощью I2C), выполняющий роль USB-HID-клавиатуры.
Настройка Nano выглядит следующим образом:
void setup() {
Wire.begin();
Serial.begin(14400);
Serial.write("Hello"); // https://serialport.io/docs/api-stream#serialpor|
pinMode(LED_BUILTIN, OUTPUT);
}
Установка Леонардо выглядит следующим образом:
void setup() {
Keyboard.begin();
Wire.begin(4);
Wire.onReceive(cbfunc);
}
Я тестировал обе платы по отдельности, но не всю установку целиком. Всякий раз, когда какая-либо плата подключается к USB-порту, она включается из-за +5 вольт от USB. Теперь, когда у меня есть провода i2c на месте, я в замешательстве -
если я сначала подключу leonardo & desktop [а i2c-master (Nano) еще не включен], что произойдет в Wire.begin(4)
? Будет ли он ждать (1с, 5с, навсегда), пока i2c-master не выйдет в сеть?
@chocolate, 👍2
Обсуждение1 ответ
Лучший ответ:
Как правило, вы не должны подавать питание на какой-либо контакт устройства, которое выключено. Это может привести к тому, что ток, протекающий через зажимные диоды, заземлится и может разрушить аппаратное обеспечение контактов или устройство (также это может привести к странным ситуациям, когда устройство несколько питается через вывод ввода-вывода, что может привести к нестабильности).
Вы можете либо разорвать соединение между устройствами, если только одно из них питается (это должно быть возможно с некоторыми дополнительными компонентами), либо вы можете питать оба устройства от одного USB-порта. Для другого порта вы бы перерезали линию V+ (положительное напряжение питания) USB-порта/кабеля (это гарантирует, что вы не получите плохой ток между обоими компьютерами на линии питания USB, если они обеспечивают немного другое напряжение). Поскольку провод заземления по-прежнему соединяет оба компьютера и ардуино, связь по-прежнему будет работать правильно.
если я сначала подключу leonardo & desktop [а i2c-master (Nano) еще не включен], что произойдет в Wire.begin(4)?
Линия Wire.begin()
не застрянет, так как она не делает много на линиях и не знает, если что-то подключено на другом конце, пока какая-то транзакция не произойдет на шине. Но может быть так, что любая транзакция от работающего Arduino (мастер) может вызвать блокировку шины I2C (так как в некоторых местах библиотека ждет, когда линии поднимутся. Соединение через зажимные диоды может удерживать линию на низком уровне. Я не уверен в этом). Тогда вам нужно будет сбросить оба ардуино, чтобы убедиться, что автобус находится в здоровом состоянии.
Решение сверху (питание обоих ардуино от одного USB-порта) также обеспечит одновременный запуск обоих ардуино и, таким образом, не заблокирует шину через зажимные диоды.
- Целесообразно ли использовать Serial.write в ISR, когда loop() обычно использует Serial.read?
- Связь AtTiny44 и AtTiny 85
- AT-команда не отвечает на последовательный монитор
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Как остановить SoftwareSerial от получения данных и повторно включить его в какой-то другой момент?
- Ардуино для чтения с преобразователя RS232 в последовательный модуль TTL
- Не нашел датчик отпечатков пальцев :( Arduino Mega 2560 Adafruit Fingerprint Sensor
- Как работает последовательная связь на Arduino?
почему бы вам не написать скетч, чтобы проверить это?, @jsotola