Перейти к содержанию

Проблемы в работе I2C


Рекомендуемые сообщения

Добрый день! В данный момент прохожу производственную преддипломную практику (сам учусь в УРТК). Стоит задача соединить Lego EV3 и Raspberry PI по I2C интерфейсу. До этого, при работе с другими устройствами, у меня никогда не было проблем с I2C интерфейсом, но в данной связке "EV3-RPI" - начались ошибки. Перед описанием ошибок, уточню, что EV3 - Master, а Raspberry - Slave, т.к. EV3 умеет работать только в режиме Master.
Первое, что бросается в глаза, это практически постоянная передача в эфир SLA пакета (адреса Slave-устройства). По-факту, именно с этого и должна начинаться передача, но в данном случае, её попросту не происходит. А, если быть точнее, то происходит она только каждый шестой раз.
Следующая проблема заключается в том, что обмен данными не всегда происходит до конца. Даже если EV3 отправляет свой пакет (два байта), то ответ от Raspberry (он тоже два байта) приходит через-раз, а то и ещё реже.
я также пробовал соединять EV3 с Arduino, Arduino с Raspberry, что бы найти причину, но там всё отлично работало и ошибок было ноль. Стабильный обмен двумя байтами, как и нужно.

Очень нужна помощь в устранении данных ошибок!


P.S: У EV3 используется нестандартный уровень лог. единицы (там он 4.3в) и обычные конверторы уровней уже не работают с ним. Поэтому, мне пришлось перепаивать его под другие номиналы подтягивающих резисторов, что бы всё заработало. В его работе нареканий нет.

Ниже показаны осциллограммы работы I2C между различными устройствами, которые были задействованы.

Снимок экрана (9).png

Снимок экрана (8).png

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

В обеих осциллограммах видно, что при передаче от EV3 в линии SDA уровень нуля не дотягивает до собственно нуля. Причем в рабочем варианте он немного не дотягивает, а в нерабочей процентов 40 остается между нижним уровнем импульса и собственно нулем (GND). сравните с импульсами ACK от raspberry. Предполагаю, что в какой-то момент raspberry просто не может принять то, что прислали и не выдает ACK и в этом случае EV3 начинает слать снова, отсюда и спам.

33 minutes ago, Nikolay_R said:

P.S: У EV3 используется нестандартный уровень лог. единицы (там он 4.3в) и обычные конверторы уровней уже не работают с ним. Поэтому, мне пришлось перепаивать его под другие номиналы подтягивающих резисторов, что бы всё заработало. В его работе нареканий нет.

вот имхо тут и проблема. Какие резисторы сейчас стоят?

Изменено пользователем LeonidPr
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

18.01.2021 в 16:05, LeonidPr сказал:

/////////////////////

Доброго времени суток! Спасибо за хорошую подсказку. На момент поста использовал 47к с обеих сторон, теперь поменял резисторы со стороны EV3 на 30к и оно стало +- стабильно работать.  Кроме того, подтяжка теперь идёт не от 4.3в, а от 5в (опять же, это всё со стороны EV3).
Но! Работает стабильно лишь с подключенным осциллографом (щупы осциллографа ISDS 205B подключены к SDA SCL линиям EV3) . Если отключить щупы от этих контактов, то связь вновь барахлит. Ещё заметил, что связь нормализуется при касании пальцев к этим линиям. Если убрать Щупы, то опять начинаются проблемы (до замены резисторов проблемы были всегда).

Пробовал подвязывать через мегаомные резисторы эти линии к земле - не помогло (пытался сымитировать входное сопротивление осцилла). Так же, пробовал добавлять последовательно конденсатор на 10нФ, но помогло минимально.
Можете подсказать, что ещё можно изменить, что бы добиться такой же стабильности, но у же без осциллографа в схеме?)

Снимок экрана (11).png

Изменено пользователем Falconist
Оверквотинг
Ссылка на комментарий
Поделиться на другие сайты

3 hours ago, Nikolay_R said:

На момент поста использовал 47к с обеих сторон,

Не совсем понял с каких двух сторон... обычно I2C подтягивается к питанию. Один резистор между SCL и VDD, один между SDA и VDD. Выложите схему, если вы одну и ту же линию подтянули к разным питаниям у вас там некий средний уровень получится (если резюки равны). В общем без схемы сложно. по осциллограмме все как-то странно, уровни скачут

Ссылка на комментарий
Поделиться на другие сайты

Схема вышла следующая.  Когда я говорил про подтяжку со стороны EV3, то имел ввиду, что выходы SDA и SCL EV3 подтягиваются теперь не к 4.3в, а к 5в.

P.S. за основу взята стандартная схема преобразователя уровней.
 

unnamed.png

Ссылка на комментарий
Поделиться на другие сайты

Не видел таких схем преобразователей, эта конкретно точно не рабочая. ну окей, со стороны малинки передача пойдет, что и видно на осциллограмме. а когда EV3 начнет тянуть в 0 выход у вас транзистор закрыт будет. ток пойдет через паразитный диод, что и видно на осциллограмме, т.к. падение на этом диоде будет больше вольта (судя по даташиту на транзюк).
Вы ведь осциллограмму снимали со стороны малинки? там как раз такая картина будет при таком подключении.
Что-то не вижу на схеме EV3 что бы там уровни 5 В были, или у вас другой какой-то девайс. Вообще можно попробовать без преобразователей, т.к. в I2C  все девайсы с в режиме открытым коллектором подключаются. т.е. на передачу все нормально должно быть. А если на прием не хватит уровня, будете разбираться. Оставьте подтяжку только со стороны малинки, остальное выкиньте. Но лучше найти точную схему EV3 именно вашей модели и посмотреть как там I2C часть сделана. ту, что привел я взял отсюда

Изменено пользователем LeonidPr
Ссылка на комментарий
Поделиться на другие сайты

P.S. Прошу прощения за самоуверенность. поглядел схемы преобразователей именно для I2C.
Плюс статейку на easyelectronics.
Действительно используют такое включение. Как я понимаю тут такой нюанс важен. Когда 5 вольтовое устройство подтягивает в ноль свою сторону и напряжение на истоке падает, разность потенциалов между затвором и истоком должна стать больше, чем Vgs(th), т.е. напряжение, при котором транзистор откроется. Возможно в вашем случае как раз и получается, что он не может открыться и работает только внутренний диод.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...