Общение двух ATTiny45 через I2C

Freeborn
Offline
Зарегистрирован: 04.11.2013

Hello world! Ну то бишь здрасьте. Являюсь обладателем Arduino Uno R3. Ну это так, на всякий.

Сразу к делу: есть желание научиться самому и научить ATTiny45 использовать I2C. Но поскольку библиотека Wire к ним не подходит, то я искал аналог и нашёл его тут-> http://playground.arduino.cc/Code/USIi2c

Если быть точнее, то там две библиотеки, одна для Мастера, другая для Раба.

Задача была такая, отправлять с Мастера каждые полсекунды сигналы включения и выключения светодиода(1 и 0), а Рабом принимать эти сигналы и собственно напрямую этот светодиод переключать.

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

Код Мастера:

#include <TinyWireM.h>

void setup() {TinyWireM.begin();}

void loop(){
  delay(500); //a little delay for slave to get ready
  TinyWireM.beginTransmission(0x33); //start transmission to slave
  TinyWireM.send(0); //send him zero
  TinyWireM.endTransmission(); //finish transmission
  delay(500); //a little delay for slave
  
  TinyWireM.beginTransmission(0x33); //start transmission to slave
  TinyWireM.send(1); //send him one
  TinyWireM.endTransmission();  //finish transmission
}

Код Раба:

#include <TinyWireS.h>

void setup(){
  pinMode(4, OUTPUT); //set pinMode for pin with LED
  TinyWireS.begin(0x33); //set adress for slave
}


void loop(){
  byte byteRcvd;
  if (TinyWireS.available()) //wait for master to start transmission
  {
    byteRcvd = TinyWireS.receive(); //get a byte from master
    if (byteRcvd==1) {digitalWrite(4, HIGH);} //if byte was 1 then light up the led
    if (byteRcvd==0) {digitalWrite(4, LOW);} //if byte was 0 then light down the led
  }
}

Может кто посоветовать почему возникает такая проблема? Может кто уже работал с этими библиотеками или невооружённым глазом видит где руки дали перекос... Заранее спасибо!

maksim
Offline
Зарегистрирован: 12.02.2012

Резисторы подтягивающие установлены?

Freeborn
Offline
Зарегистрирован: 04.11.2013

Да, конечно. 5К на каждую из двух линий.