Я попытался установить связь I2C от Arduino Uno к ATtiny44A.
Uno как мастер и код передатчика:
#include <Wire.h>
#define LED_PIN 13
byte x = 0;
void setup()
{
Wire.begin(); // Start I2C Bus as Master
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
}
void loop()
{
Wire.beginTransmission(0x26); // transmit to device #9
Wire.write(x); // sends x
Wire.endTransmission(); // stop transmitting
x++;
if (x > 5) x=0;
delay(450);
}
Код ведомого/приемника ATtiny44A:
#include "TinyWireS.h" // wrapper class for I2C slave routines
#define I2C_SLAVE_ADDR 0x26 // i2c slave address (38)
#define LED1_PIN 10
void setup(){
pinMode(LED1_PIN,OUTPUT); // for general DEBUG use
TinyWireS.begin(I2C_SLAVE_ADDR); // init I2C Slave mode
}
void loop(){
byte byteRcvd = 0;
if (TinyWireS.available()){ // got I2C input!
byteRcvd = TinyWireS.receive(); // get the byte from master
if(byteRcvd == 5){
digitalWrite(LED1_PIN,HIGH);
delay(1000);
}
else{
digitalWrite(LED1_PIN,LOW);
}
}
}
Я делаю что-то неправильно? Светодиод не мигает. Какие есть другие способы отладки ATtiny?
Это ловушка использования библиотеки Arduino — все настолько абстрагируется от вас, что чуть икота и вы совсем потерялись. Я мало что знаю о библиотеках Arduino, но на моем месте я бы включил и использовал прерывания TWI/I2C и посмотрел, срабатывают ли они. Простое мигание светодиода внутри ISR отлично подойдет в качестве индикатора, если он работает правильно. Если светодиод не мигает, значит, проблема в реализации протокола.
Правильно ли вы подключаете SCL и SDA между контроллерами? А у вас линии SCL и SDA привязаны к подтягивающим резисторам к VCC?
Подобно этому:
Шринивас
ШерреллБК
Шринивас