Библиотеки I2C для ATTiny85?

Я хочу передавать данные I2C с помощью платы Digispark ATTiny85:

  • http://digistump.com/products/1
  • http://digistump.com/wiki/digispark/tutorials/connecting

Я обнаружил следующие библиотеки I2C. Какой из них более легкий, стабильный, безошибочный, эффективный, мощный и простой в использовании?

  • Adafruit TinyWireM не обновлялся 2 года.

  • SoftI2CMaster от Felias-fogg был обновлен через несколько дней после публикации.

  • TinyWire от lucullusTheOnly представляет собой несколько лет усовершенствований, "основанных на библиотеках TinyWireM и TinyWireS". Эта версия рекомендована BroHogan, соавтором TinyWireM: https://playground.arduino.cc/Code/USIi2c

Кажется, Wire недостаточно представлен:

"библиотека Arduino Wire() по умолчанию не поддерживает изменения в шине скорость или функция правильной поддержки растяжения часов. Это делает библиотека по умолчанию лишь незначительно функциональна" https://www.maxbotix.com/articles/095.htm

Какие еще библиотеки I2C доступны для ATTiny? В среде IDE я вижу Digispark SoftSerial, OneWire и VirtualWire.

Как они все соотносятся?


Обратите внимание, эти другие ответы не кажутся относящимися к моему вопросу:

, 👍3

Обсуждение

попробуйте их оба... сначала тот, у которого больше всего примеров кода, @jsotola


2 ответа


2

Я хочу передать данные I2C...

Немного расплывчато.

Передать на какое устройство? Насколько высока ваша скорость передачи данных (100 кГц, 400 кГц)? Вы только передаете и ничего не читаете? Каково напряжение холостого хода вашей шины I2C (чтобы затем спросить, правильно ли вы выбрали значения подтягивающих резисторов для предполагаемой скорости шины)?

Вы упомянули, что библиотека Wire не поддерживает изменение тактовой частоты ядра без какого-либо взлома, но не говорите о скорости, на которой вы собираетесь работать с микроконтроллером, или о том, насколько быстро вы собираетесь использовать I2C. Я могу предположить, что 400 кГц, поскольку вы подняли скорость, но это не лучший способ ответить на вопрос.

Я использую библиотеку Wire на Arduino UNO с частотой шины I2C 100 кГц, и она отлично подходит для моих нужд. Я получил байты в и из.

На данный момент лучшее, что я мог бы предложить, это если одна из перечисленных выше библиотек не поддерживает нужную вам функцию, разветвите ее и добавьте поддержку своей функции самостоятельно. Если вы передаете данные только на одно ведомое устройство, вам не нужно беспокоиться об арбитраже шины, как это делает TinyWire. С Adafruit по большей части все в порядке, но мне кажется, что они медленно исправляют ошибки и поддерживают код. Но не позволяйте возрасту кода сломить вас. I2C был создан еще в 1982 году, и вы до сих пор его используете... :-P

Вот как я подхожу к выбору библиотеки:

  • Определите нужные функции
  • Ищите библиотеку, в которой есть большинство из этих функций.
  • Добавьте любые новые функции, которые вам нужны
  • Возможно, поделитесь добавленными функциями с сообществом с помощью запроса на включение
,

1

bHogan, похоже, является первоначальным разработчиком TinyWireM и TinyWireS. Андреас Списс ("Парень со швейцарским акцентом") использовал реализация rambo библиотеки TinyWire для его датчика I2C, и rambo на GitHub, и bHogan на arduino.cc, кажется, один и тот же человек...

Я также использовал библиотеку rambo TinyWire, и мне удалось заставить ее работать. Версия TinyWire от Adafruits кажется ответвлением кода Рэмбо.

,