Общение двух ATTiny45 через I2C
- Войдите на сайт для отправки комментариев
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
}
}

Может кто посоветовать почему возникает такая проблема? Может кто уже работал с этими библиотеками или невооружённым глазом видит где руки дали перекос... Заранее спасибо!
Резисторы подтягивающие установлены?
Да, конечно. 5К на каждую из двух линий.