首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个宿命的85集成电路之间的主从通信

两个宿命的85集成电路之间的主从通信
EN

Stack Overflow用户
提问于 2016-02-12 14:18:49
回答 2查看 2.5K关注 0票数 0

可以在两个ATtiny85之间进行通信吗?我可以使用我的Arduino与ATtiny85进行通信,方法是使用Arduino Uno作为主程序,使用ATtiny85作为从属器。但我想使用一个ATtiny85作为主人,一个作为奴隶。这有可能吗?

我无法理解TinyWireM库中给出的示例。我想要一个简单的主从通信代码。例如,主人应该要求一个整数值,从应该回答。

我的奴隶密码:

代码语言:javascript
复制
#define I2C_SLAVE_ADDRESS 0x14 // Address of the slave
#include <TinyWireS.h>

int i=0;
void setup()
{
    TinyWireS.begin(I2C_SLAVE_ADDRESS); // join i2c network
    TinyWireS.onRequest(requestEvent);
}
void loop()
{
    TinyWireS_stop_check();
}
void requestEvent()
{
    if(i==1000)
    {
        TinyWireS.send(1);
        i=0;
    }
    else
        i++;
}

我的主密码

代码语言:javascript
复制
#include <TinyWireM.h> 
#define DS1621_ADDR   0x14

void setup() 
{
   TinyWireM.begin();
   pinMode(4, OUTPUT);

}
void loop() 
{
    TinyWireM.requestFrom(DS1621_ADDR,4); // Request 1 byte from slave
    int tempC = TinyWireM.receive(); 
    if(tempC)
    {
      digitalWrite(4, HIGH);   
      delay(1000);              // wait for a second
      digitalWrite(4, LOW);    
      delay(1000);              // wait for a second
    }
    if(tempC>1)
    {
      digitalWrite(4, HIGH);  
      delay(1000);              // wait for a second
      digitalWrite(4, LOW);    // turn the LED off by making the voltage LOW
      delay(1000);              // wait for a second
    }
 }

我尝试了上面的代码,但我仍然看不到LED闪烁。但是,如果我保持原样的从代码,并在Arduino上使用下面的主代码,那么一切都可以正常工作。

阿迪诺·尤诺编码为大师。

代码语言:javascript
复制
#include <Wire.h>
float i1=-1, i2=-1;

void setup()
{
 Wire.begin(); // join i2c bus (address optional for master)
 Serial.begin(9600); // start serial for output
}

void loop()
{
     Wire.requestFrom(4, 1); // request 1 byte from slave  address 4
     while(Wire.available()) // slave may send less than requested
     {
        i1 = Wire.read(); // receive a byte as character
        Serial.println(i1); // print the character 
     }
}

连接是和连接是SDA到SCL引脚

主attiny85的引脚5从attiny85的引脚7从attiny85的引脚5主attiny85的引脚

我也尝试过没有交叉连接他们。示例和连接是SDA到SDA引脚。

主attiny85引脚5从attiny85引脚5从attiny85引脚7主attiny85引脚7

但还是没有成功。

EN

回答 2

Stack Overflow用户

发布于 2016-02-17 18:39:23

是的,可以使用1 ATtiny85作为主服务器,使用另一作为从服务器。TinyWireM和TinyWireS库编写得很好,而且易于使用。

处理请求和发回字节就像将onRequest从读取事件处理程序设置为发送正确数据的函数一样简单。在TinyWireS库中有这方面的例子。

票数 0
EN

Stack Overflow用户

发布于 2016-02-19 10:56:27

你对SDA和SCL都使用了拉电阻吗?它们对于I2C协议非常重要。

FYI:任一个总线上的逻辑'0‘是由驱动引脚上的实际'0’的设备设置的。另一方面,通过将器件引脚设置在高阻抗上,在总线上设置逻辑'1‘,如果在ATtiny上,则意味着在输入方向设置引脚。当两者、主从设置引脚到hiZ时,拉出电阻将总线上的电压拉到表示逻辑'1‘的值。这种解决方案可以避免在双向总线(一个驱动'1‘和第二个驱动'0')上的争用,而不会导致短路和损坏设备。因此,如果你不使用拉起电阻,当逻辑'1‘被驱动时,总线就会浮动,这会导致协议错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35364830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档