Kommunikation von Arduino Uno zu ATtiny44A I2C

Ich habe versucht, eine I2C-Kommunikation von Arduino Uno zu ATtiny44A herzustellen.

Uno als Master- und Sendercode:

#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 Slave/Empfänger-Code:

#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);
            }
  }
}

Mache ich etwas falsch? Die LED blinkt nicht. Was sind die anderen Möglichkeiten, ATtiny zu debuggen?

Antworten (1)

Dies ist ein Fallstrick bei der Verwendung der Arduino-Bibliothek - alles ist so von Ihnen abstrahiert, dass Sie mit einem kleinen Schluckauf völlig verloren sind. Ich weiß nicht viel über die Arduino-Bibliotheken, aber wenn ich es wäre, würde ich die TWI/I2C-Interrupts aktivieren und verwenden und sehen, ob sie ausgelöst werden. Ein einfaches LED-Blinken in den ISRs würde als Indikator für die ordnungsgemäße Funktion gut ausreichen. Wenn die LED nicht blinkt, liegt das Problem in der Protokollimplementierung.

Schließen Sie SCL und SDA korrekt zwischen den Controllern an? Und haben Sie die SCL- und SDA-Leitungen an Pull-up-Widerstände an VCC gebunden?

Ähnlich wie dies:Geben Sie hier die Bildbeschreibung ein

SCL und SDA korrekt angeschlossen und Pull-up-Widerstände sind vorhanden. Könnten Sie mich anleiten oder einen Link bereitstellen, wie ich dies tun könnte, ohne die Arduino-Bibliothek zu verwenden
avrfreaks.net ist eine großartige Ressource für Anfänger. Es gibt eine Menge Tutorials, die von der UART-Kommunikation bis zum EEPROM und Interrupts reichen. Hier ist eine weitere großartige Ressource mit einigen Beispielen, aber ich verwende sie hauptsächlich für die Dokumentation zu avrlibc: nongnu.org/avr-libc/user-manual
Meine Platine hatte einen kleinen Fehler beim erneuten Löten, der das Problem löste. Vielen Dank, wenn Sie sich die Ressourcen ansehen.