I2C的问题
请问I2C通信的时候,接收信息的时候只能触发一个函数吗?
比如下图,设备3发送信息给设备1,设备1接收信息的函数指定的FuncA(). 能不能在设备3里发送信息的时候指定设备1的接收函数为FuncB\FuncC?
Stormer 发表于 2017-12-2 14:55
谢谢了解了! 我现在就是用特殊的字符来做分割多个参数,然后接收到以后根据不同的参数再去调用相应的 ...
i2c 通讯的主从关系, 从 Wire.begin 时就决定了, 你现在的做法, 两者都是从机设定.
设定主从关系, 应该是这样的:
主机:Wire.begin();
从机: Wire.begin(ADDRESS);
因为通道上只可以有一个主机, 而一切通讯均由主机操控, 主机是不需要地址的.
之後的通讯, 都应该由主机发动, 决定那一个从机可以使用通道传送.
而从机应该在接收到主机的指令, 才可以使用通道, 而它的传送对象, 亦只可以是主机.
你现在由从机自己启动传送, 如果通道上有多於一个如此乱来的从机, 通讯就会出问题了.
所以, 主从的设定要清楚, 不可以乱来的. 本帖最后由 Super169 于 2017-12-1 22:20 编辑
(奇怪, 打了一断文字, 每次都中断了.可能因为是繁体的缘故.)
两个 i2c slave 之间通讯, 真的有点那个, 可以成功只可以说是好运吧, 建议你先了解一下 i2c 通讯的基本设定, master 及 slave 之间的关系.
假设你设定正确, 如果 slave 可以提供不同资料 (你的情况, 可能是执行不同 func).
只要 master 先向 slave 发出一次 write, 把要求送出.比如 0 是 funcA, 1 是 funcB, 2 是 funcC.
然後才发出 requestForm, 而 slave 就可以跟据 master 之前发来的资料, 决定回传时执行的程式. 本帖最后由 Stormer 于 2017-12-2 14:57 编辑
Super169 发表于 2017-12-1 22:13
(奇怪, 打了一断文字, 每次都中断了.可能因为是繁体的缘故.)
两个 i2c slave 之间通讯, 真的有点那个, ...
谢谢了解了! 我现在就是用特殊的字符来做分割多个参数,然后接收到以后根据不同的参数再去调用相应的函数。
现在是可以正常工作的。感觉3号机应该算是从机了吧,1号是主机。
Super169 发表于 2017-12-3 18:43
i2c 通讯的主从关系, 从 Wire.begin 时就决定了, 你现在的做法, 两者都是从机设定.
设定主从关系, 应该 ...
原来是这样,学习了。 我一直以为主机的地址是1.
那在从机里给主机发送信息的时候,Wire.beginTransmission(?); 这里的地址该怎么写?主机的地址是什么? Stormer 发表于 2017-12-3 19:09
原来是这样,学习了。 我一直以为主机的地址是1.
那在从机里给主机发送信息的时候,Wire.beginTransmi ...
主机是不用地址的, 因为所有从机, 都只可以跟主机通讯.
所以, 你要先决定一台控制流程的主机, 其他都是从机, 发送资料的主动权都在主机上.
通讯的过程, 首先是主机向从机发出请求, 而从机收到请求就回传资料.
以确保通道上, 只会有一台机在使用.
之前在学习过程中, 我也记录了 i2c 通讯的方式, 由简单一个 byte 以至较复杂的(例如浮点)都有.
虽然有些地方可能有点不足, 但对建立基本 i2c 通讯应该是足够的, 你有兴趣可以看看:
http://arduino169.blogspot.hk/2015/07/arduino-i2c.html
以下部份都完成了:
(1) I2C 地址设定 及 I2C 地址扫瞄
(2) 由 master 向 slave 发送资料/发出指令
(3) 由 master 向 slave 发送资料/发出指令
(4) 由 master 向 slave 要求资料回传
(5) master 向 slave 要求不同资料
(6) 由 master 提供参数, 再由 slave 作出相应的回复
(7) 单片机有效传送数据的选择
(8) 浮点的传送
(9) I2C 通讯实例(一) 简单传感数据收集 (把非 i2c 传感变成 i2c)
Super169 发表于 2017-12-3 20:16
主机是不用地址的, 因为所有从机, 都只可以跟主机通讯.
所以, 你要先决定一台控制流程的主机, 其他都是 ...
很好的blog, good job!
页:
[1]