Проблемы с зеленым портом TWI (I2C) на Arduino Braccio Shield
Резюме: Зеленый порт TWI/I2C на порту Braccio shield I2C до сих пор не работал для меня. Ищете совет или информацию, пожалуйста.
Деталь: Я использую роботизированную руку Arduino (Tinkerkit) Braccio для самообразования. Он поставляется с щитом Браччо на основе Uno. Тинкеркит, похоже, больше не занимается бизнесом, а документации немного не хватает. Щит использует разъемы типа KF2510 для сервоприводов (оранжевый), входов (белый), последовательных (желтый) и, что важно для моего вопроса, порта TWI/I2C (зеленый).
Зеленый четырехконтактный разъем TWI/I2C обеспечивает GND, +5V, SDA (A4), SCL (A5). Однако сообщается, что соединения SDA и SCL не являются прямыми, а что "очень маленький чип (расположенный рядом с разъемом I4) буферизуется между зеленым разъемом и контактами Arduino SDA и SCL" . Ниже приведена фотография описанного чипа.
Вопреки сообщениям об изучении "буфера" на схеме показан уровнемер PCA9306TI и два набора подтягивающих резисторов 10K (R7,R8 и R11,R12) на шине с обеих сторон чипа. VREF2 на внешней стороне чипа имеет резистор R9 220K до +5V.
Другой стороной моего I2C-соединения был Arduino Pro-mini 5V. Я никогда не мог заставить его работать, используя описанный зеленый порт, но он отлично работает непосредственно подключенным к SCL и SDA, минуя переключатель уровня.
Мои вопросы (извините за долгое ожидание) таковы:
- Был ли зеленый порт TWI сдвинут на ожидаемый уровень ~3В? (Только по-настоящему пришел к такому выводу, написав все это четко).
- Если я хочу изменить зеленый порт TWI на 5V I2C, могу ли я заменить R9 220K перемычкой с нулевым Ом?
- Подтягивания 10K (R7,R8 и R11,R12) кажутся больше, чем ожидалось (я ожидал около 4.7 K для 5v или около 2.4 для 3V)? Можно ли их снять и оставить открытыми, если у меня есть один набор подтягиваний в другом месте автобуса? Или лучшие предложения?
Спасибо!
Обновление 2021/01/30
Ну, мои навыки отладки I2C улучшаются, исследуя это! В качестве испытательного стенда я настроил чистую рабочую шину I2C с двумя MCU, работающими на примере Arduino Master/Writer Slave/Receiver sketches Николаса Замбетти. Я проверил сигнал I2C на осциллографе, чтобы убедиться, что он чистый. Все хорошо. К этому испытательному стенду я подключил экран Браччо (5V, GND, SCL, SDA). Подключение экрана Браччо интересным образом изменяет сигнал I2C с частичными импульсами силы (runt) и медленными подъемами круглого плеча. Подключение через зеленый порт TWI, по-видимому, подчеркивает аспект runt pulse. Также интересно, что осциллограф все еще мог декодировать сигнал. Все еще работаю над тем, чтобы это выяснить.
Рис.1. Первый тест - SCA и SCL соединены через контактные коллекторы в левом верхнем углу экрана.
Рис.2. Второй тест - SCA и SCL подключены через зеленый порт TWI
Рис.3. Чистый сигнал (без подключения экрана Браччо)
@RowanP, 👍4
Обсуждение1 ответ
Лучший ответ:
Боюсь, у нас проблема с коллорингом. Твой зеленый-мой синий; -).
Я заглянул в технический паспорт IC level shifter, и TI описывает только сценарии с более высоким напряжением на правой стороне и более низким напряжением на левой стороне. Также допустимые переводы напряжения не содержат значений от 5В до 5В. Поэтому я бы сказал, что в сценарии равного напряжения переключатель уровня может не работать.
Ответы
Q1: Порт TWI всегда используется с 5 В (не ~3 В). Arduino, который должен использовать щит, может быть версией 3,6 В (например, DUE или M0). Возможно, порт TWI предназначен только для этого случая использования: низковольтный arduino с устройством 5V. Я признаю: это должно быть отмечено в документации. Так что, возможно, щиты Браччо работают вне спецификации и могут работать при нормальных обстоятельствах. Но тем временем я начинаю понимать, почему они не работают ;-).
Дополнение: сигналы SCL и SCL направляются на две пары выводов заголовка, поскольку они подключены к разным выводам на разных ардуино. На UNO вы не можете использовать A4 и A5 для аналога, как они используются, например, для I2C. Вы каким-либо образом используете A4 A5? Или вы подключили вторую пару контактов I2C в коллекторе питания, когда использовали разъем TWI? (риторический вопрос ;-) конечно, я изменю ответ, если вы дадите мне больше информации ;-) )
Q2: Резистор 220k необходим, так как он ограничивает ток через микросхему, если VRef1 ниже VRef2. Удалить его с 0 Ом было бы плохой идеей. Пока 5 В используется с обеих сторон, ничего не произойдет. Но если Vref1 равен 3,6 Вольта, вы потратите энергию впустую, и, возможно, чип примет участие в фестивале гриля.
Q3: Большинство прорывных плат устройств I2C уже используют свои собственные подтягивающие резисторы. Так что опускать подтягивания-не самая лучшая идея. -> слишком высокий ток при НИЗКИХ сигналах, так как устройства pull ups и braccio pull ups установлены параллельно. -- Есть вероятность, что резисторы слишком велики для устройств, которые не используют свои собственные подтягивания, но при скорости шины 100 кГц я не думаю, что это может вызвать проблему.
Кстати: Вам не нужно менять подтягивания, если вы настаиваете на том, чтобы попробовать разные значения. Просто используйте параллельные резисторы для снижения сопротивления (10K || 10K -> 5K) [|| означает параллельное подключение] (R || Rp -> (R*Rp) / (R+Rp))
- Как использовать I2C от Arduino Uno, когда у меня установлен GSM-shield?
- Акселерометр (I2C) и Fona Shield (software serial) не работают вместе
- Отправка и получение различных типов данных через I2C в Arduino
- Как работают функции вне цикла void?
- Как отображать переменные на 0,96-дюймовом OLED-дисплее с библиотекой u8glib?
- SD-карта не инициализируется
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- OVF в последовательном мониторе вместо данных
является ли ваш Uno R3 с контактами заголовка SDA, SCL?, @Juraj
@Juraj, Да, настоящий Uno R3. Дополнительные контакты SDA и SCL присутствуют рядом с контактом AREF, и на самом деле именно к ним я подключаюсь напрямую, чтобы обойти проблему., @RowanP