Общение двух 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К на каждую из двух линий.