Привет, у меня большая проблема с обращением к нескольким attiny85-чипам с I2C:
Для чего я знаю attiny использует 7-битные адреса для связи. Я использую библиотеку TinyWireS, которая прекрасно работает для меня, пока я не достигну адреса: «64», то есть «1000000» в двоичном формате. Максимальный используемый адрес должен быть «1111111».
Вот что происходит:
Подчиненный:
Attiny85: включает или выключает светодиод при получении сообщения через I2C.
Адрес раба: 64
#include <TinyWireS.h>
#include <usiTwiSlave.h>
#define output (4)
#define I2C_SLAVE_ADDR (64) //works if I2C_SLAVE_ADDR < 64
void setup() {
TinyWireS.begin(I2C_SLAVE_ADDR);
pinMode(output, OUTPUT);
}
volatile bool state = LOW;
void loop() {
byte msg = -1;
if(TinyWireS.available())
msg = TinyWireS.receive();
if(msg == 1)
state = HIGH;
else if(msg == 0)
state = LOW;
else if(msg == 2)
state = !state;
digitalWrite(output, state);
}
Мастер:
Arduino pro mini:
sendMsg (0, true); //работает! светодиод на чипе: 64 переключателя
sendMsg (64, правда); // терпит неудачу! светодиод на чипе: 64 выключен.
#include <Wire.h>
#define DEVICE (64) //0 works!
void setup() {
Wire.begin();
}
void loop() {
sendMsg(1, DEVICE);
delay(2000);
sendMsg(0, DEVICE);
delay(2000);
}
void sendMsg(int msg, int device) {
Wire.beginTransmission(device);
Wire.write(msg);
Wire.endTransmission();
}
Ты хоть представляешь, как решить эту проблему?
Версия TinyWireS, которую я использую: https://github.com/rambo/TinyWire/tree/master/TinyWireS
Задача ещё не решена.