Связь Arduino Uno с ATtiny44A I2C

Я попытался установить связь 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?

Ответы (1)

Это ловушка использования библиотеки Arduino — все настолько абстрагируется от вас, что чуть икота и вы совсем потерялись. Я мало что знаю о библиотеках Arduino, но на моем месте я бы включил и использовал прерывания TWI/I2C и посмотрел, срабатывают ли они. Простое мигание светодиода внутри ISR отлично подойдет в качестве индикатора, если он работает правильно. Если светодиод не мигает, значит, проблема в реализации протокола.

Правильно ли вы подключаете SCL и SDA между контроллерами? А у вас линии SCL и SDA привязаны к подтягивающим резисторам к VCC?

Подобно этому:введите описание изображения здесь

SCL и SDA подключены правильно, подтягивающие резисторы на месте. не могли бы вы направить меня или предоставить ссылку о том, как я мог бы сделать это без использования библиотеки arduino
avrfreaks.net — отличный ресурс для начинающих. Существует множество руководств, начиная от связи UART и заканчивая EEPROM и прерываниями. Вот еще один отличный ресурс с несколькими примерами, но я в основном использую его для документации по avrlibc: nongnu.org/avr-libc/user-manual
У моей печатной платы была небольшая неисправность, повторная пайка решила проблему, большое спасибо, глядя на ресурсы.