Serial port 两个attiny 85 IC之间的主从通信

Serial port 两个attiny 85 IC之间的主从通信,serial-port,arduino-uno,attiny,Serial Port,Arduino Uno,Attiny,两个站之间有可能通信吗?我可以使用我的Arduino与ATtiny85通信,使用Arduino Uno作为主设备,使用ATtiny85作为从设备。但我想用一个阿提尼85做主人,一个做奴隶。这可能吗 我无法理解TinyWireM库中给出的示例。我想要一个简单的主从代码进行通信。例如,主服务器应请求1个整数值,而从服务器应回复 我的奴隶代码: #定义I2C_从机地址0x14//从机地址 #包括 int i=0; 无效设置() { TinyWireS.begin(I2C_从站地址);//加入I2C网

两个站之间有可能通信吗?我可以使用我的Arduino与ATtiny85通信,使用Arduino Uno作为主设备,使用ATtiny85作为从设备。但我想用一个阿提尼85做主人,一个做奴隶。这可能吗

我无法理解TinyWireM库中给出的示例。我想要一个简单的主从代码进行通信。例如,主服务器应请求1个整数值,而从服务器应回复


我的奴隶代码:

#定义I2C_从机地址0x14//从机地址
#包括
int i=0;
无效设置()
{
TinyWireS.begin(I2C_从站地址);//加入I2C网络
TinyWireS.onRequest(requestEvent);
}
void循环()
{
TinyWireS_停止检查();
}
void requestEvent()
{
如果(i==1000)
{
发送(1);
i=0;
}
其他的
i++;
}
我的主代码

#包括
#定义DS1621\u地址0x14
无效设置()
{
TinyWireM.begin();
pinMode(4,输出);
}
void循环()
{
TinyWireM.requestFrom(DS1621_ADDR,4);//从从机请求1字节
int tempC=TinyWireM.receive();
if(tempC)
{
数字写入(4,高);
延迟(1000);//等一下
数字写入(4,低);
延迟(1000);//等一下
}
如果(tempC>1)
{
数字写入(4,高);
延迟(1000);//等一下
digitalWrite(4,低);//通过降低电压关闭LED
延迟(1000);//等一下
}
}
我尝试了上述代码,但仍然看不到LED闪烁。但是,如果我保持从代码不变,并在Arduino上使用以下主代码,那么一切都可以正常工作

Arduino Uno代码作为主代码

#包括
浮点i1=-1,i2=-1;
无效设置()
{
Wire.begin();//连接i2c总线(主机地址可选)
Serial.begin(9600);//开始串行输出
}
void循环()
{
Wire.requestFrom(4,1);//从从属地址4请求1字节
while(Wire.available())//从服务器发送的数据可能少于请求的数据
{
i1=Wire.read();//接收一个字节作为字符
Serial.println(i1);//打印字符
}
}
连接为,连接为SDA至SCL引脚

主通道85的针脚5-从通道85的针脚7 从属attiny85的针脚7-主attiny85的针脚5

我也试着不交叉连接它们。示例和连接是SDA到SDA引脚

主通道85的针脚5-从通道85的针脚5 从属attiny85的针脚7-主attiny85的针脚7


但仍然没有成功

是的,可以使用一个ATtiny85作为主节点,另一个作为从节点。TinyWireM和TinyWireS库都编写得很好,并且易于使用


处理请求并发回字节非常简单,只需将
onRequest
从属读取事件处理程序设置为您选择的函数,以发回正确的数据。TinyWireS库中有这样的例子。

您是否对SDA和SCL都使用了上拉电阻器?它们对于I2C协议非常重要


仅供参考:任一总线上的逻辑“0”由驱动引脚上实际“0”的设备设置。另一方面,通过将设备引脚置于高阻抗,在总线上设置逻辑“1”,如果在阁楼上,则意味着将引脚置于输入方向。当主控和从控引脚都设置为hiZ时,上拉电阻器将总线上的电压拉至表示逻辑“1”的值。此解决方案允许避免双向总线上的争用(一个设备驱动“1”,第二个设备驱动“0”),从而导致短路和损坏设备。因此,如果不使用上拉电阻器,每当驱动逻辑“1”时,总线将保持浮动,这将导致协议错误。

ya。我用TinyWireM和TinyWireS尝试了一些代码,但仍然不起作用。我将发布代码。阅读TinyWireM的源代码,我认为您没有正确设置参数。此外,您闪烁的LED条件很奇怪,因为您阻塞了2秒钟,这可能会破坏I2C相关的东西。尝试使用非阻塞闪烁,或使用不同的“调试”输出方法(可能是串行位切换)。