Всегда 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);
}
@Wolfgang, 👍1
Обсуждение1 ответ
▲ 1
Может показаться, что текущий коммит от января 2018 года из библиотеки TinyWire поврежден. Попробуйте использовать более старую версию от 2017 года, например эту: https://github.com/rambo/TinyWire/tr...72a13504bbfc4e
Это также решает проблему для меня.
Источник: Teensy 3.5 - I2C - ATTiny85-20PU (TinyWireS.OnRequest не срабатывает!) - Пост № 11
,
@NilsB
Смотрите также:
- I2C запрашивает более одного байта
- Что такое "tws_delay" и как его использовать? (с ATTiny85)
- Сколько читаемого текста может поместиться в ATTINY85? Возможность прокрутки буклета на 0,91-дюймовом OLED-дисплее
- Отправка и получение различных типов данных через I2C в Arduino
- Как работают функции вне цикла void?
- Как отображать переменные на 0,96-дюймовом OLED-дисплее с библиотекой u8glib?
- OVF в последовательном мониторе вместо данных
- ЖК-дисплей I2C отображает странные символы
Где находится 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