Всегда 255-ответ в I2C между ATTiny85 (8 МГц) и Arduino Uno

Я пытался настроить I2C-диалог между ATTiny85 (8 МГц) и Arduino Uno. Однако я всегда получаю ответ 255 от моего I2C-ведомого. Я использую Arduino 1.8.5.

Что я делаю не так?

ATTiny85-Код подчиненного устройства:

#include "TinyWireS.h"  // класс-оболочка для подчиненного устройства I2C
routines
#define I2C_SLAVE_ADDR  0x26 // адрес ведомого устройства i2c (38)

byte t=10;

void setup() {
  TinyWireS.begin(I2C_SLAVE_ADDR);  // инициализация режима I2C Slave
  TinyWireS.onRequest(requestEvent);
}

void loop() {
}

void requestEvent() {
  TinyWireS.send(t);
}

Код Arduino Uno-Master:

 #include <Wire.h>
 #define I2C_SLAVE_ADDR  0x26 // адрес ведомого устройства i2c (38)

void setup() {
  Wire.begin();
  Serial.begin(9600);
}

void loop() {
  byte num;
  // считываем 1 байт с адреса 0x26
  Wire.requestFrom(I2C_SLAVE_ADDR, 1);
  while(Wire.available()) {
    num = Wire.read();
  }
  Serial.print("num = ");
  Serial.println(num,DEC);
}

, 👍1

Обсуждение

Где находится TinyWireS_stop_check? Значение 255 — это когда Wire.read() возвращает -1, что означает, что вы не получили действительные данные от подчиненного устройства. Вы можете запустить сканер i2c и оставить его работать на Uno, пытаясь исправить проводку или эскиз подчиненного устройства. Если это работает, попробуйте получить или отправить данные., @Jot

@Jot - можете ли вы объяснить, почему Wire.read() выдает -1, когда wire.available() не равен нулю?, @Chris Stratton

@ChrisStratton, вы правы, когда wire.available показывает, что данные есть, то -1 не возвращается. Я не продумал это. Я пытался рассказать об этом обычным способом, потому что есть и другая возможность: когда ведомое устройство ведет себя плохо, возможно, ведомое устройство подтверждает прием ack на свой адрес, но не отправляет данные, поэтому sda остается высоким, что приводит к 255. Возможно, есть еще больше возможностей, когда ведомое устройство делает странные вещи., @Jot

Кажется, я не один такой. https://forum.pjrc.com/threads/48887-HELP-Teensy-3-5-I2C-ATTiny85-20PU-(TinyWireS-OnRequest-not-triggering!) ...странно :-(, @Wolfgang


1 ответ


1

Может показаться, что текущий коммит от января 2018 года из библиотеки TinyWire поврежден. Попробуйте использовать более старую версию от 2017 года, например эту: https://github.com/rambo/TinyWire/tr...72a13504bbfc4e

Это также решает проблему для меня.

Источник: Teensy 3.5 - I2C - ATTiny85-20PU (TinyWireS.OnRequest не срабатывает!) - Пост № 11

,