嘿,我最近发布了一个与I2C(从属)库TinyWireS有关的问题。无论出于何种原因,我无法使用高于63的slave-addresses。
我现在想开始一个新线程来解决这个问题:
您可以在我的上一篇文章中找到有关我的项目的更多信息here主机和从机的代码和电路仍然相同。
我发现了什么:
当主设备尝试通过特定地址通信从设备时,从设备调用ISR功能(文件:usiTwiSlave.c line:569)。如果主设备发送给不同的从设备,甚至会调用此功能,因为它会检查天气是否正确。
BUT:
当我告诉主人连接奴隶> 63 ISR永远不会被执行。不幸的是,我没有发现调用ISR函数的位置。我搜索了每个文件,但找不到任何“父”功能。
我很确定我已经接近发现错误,但我没有太多的C / C ++经验。
我希望你能帮助我!
答案 0 :(得分:0)
我不知道你是否解决了这个问题,但从我的分析来看,我怀疑这个问题比你建议的要复杂得多。我不相信这个问题是在TinyWireS中确定的(虽然它可能在那里)而我之所以说这是因为我的奴隶代码适用于大多数大师,并且只有当我运行ESP8266时作为主人,我看到你描述的同样的问题。 ESP8266可以在任何地址上作为主站使用非ATTiny85从站。没有示波器,我无法确定,但我认为i2c启动和地址的第一位可能存在时序问题,当它为1时,意味着从USI产生中断的条件不是满足。鉴于人们在ATTiny85 8MHz上报告问题的人数很少,我并不排除时间问题与主方有关,但我很确定这是一个微妙的时间问题。我还应该偶尔提一下,当ATTIny85具有高地址时,我可以在ATTIny85上获得请求,但这种情况很少见,并且再次表明存在时序问题。 我希望这有助于为这个问题构建图片,如果你有能力确定i2c总线的范围,我怀疑问题会变得明显。