作者kitconan (不再在乎)
看板ASM
标题Re: [问题] 如何让Arduino在I2C连续送出Stop Signal?
时间Wed Apr 25 23:16:10 2018
※ 引述《woody5202001 (狗爷)》之铭言:
小弟想法, 如果有错还是不妥还请指正
: 大家好,小弟最近开始接触Arduino nano,觉得非常好玩:P
: 最近遇到一个问题是在对一颗IC做I2C沟通
: 在使用该IC的某个功能时需要连续送出多组Stop讯号去触发
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这部分如同前辈说的只能用 IO, 小弟认知的原因是
他是单纯要给讯号触发, 若你今天是用 Wire.endTransmission ()
https://www.arduino.cc/en/Reference/WireEndTransmission
在某些时候 SDA pin 会试设成 input( 高祖抗 ), 故无法使用
, 如果是小弟会把这波型兜成一个 function 比如叫 wakeup()
: Wire.endTransmission ()这个语法如果单独使用-
: 会产生一个Start讯号跟9 bit(含Ack)的clock接着才会输出Stop讯号
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
一般单晶片的通讯模组整个传输都是兜在一起的, 除非适用 gpio 自己写波形
: 这边想问的是有没有什麽语法可以只输出Stop讯号而不输出其他讯号呢?
所以 ic 的 initial 可以大概写成
init_IC_model()
{
wakeup();
init_i2c(); // gpio set up i2c
i2c_write();// 设 ic reg
.....
}
以上给您参考
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 42.77.103.97
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/ASM/M.1524669377.A.30F.html
1F:推 woody5202001: 感谢回应~ 目前解法与你的想法相同 但是IO Pin可以- 04/30 17:57
2F:→ woody5202001: 跟原本的SDA SCL Short在一起吗? 这样会不会打架? 04/30 17:58
3F:→ kitconan: 是说只是把你的sad scl pin 设定成gpio 05/01 00:39
4F:→ kitconan: Sad 而不是真的另外拉pin来做 05/01 00:40
5F:→ woody5202001: K大你连打了两次Sad XD 05/01 21:08
6F:→ woody5202001: 记得好像有这样设定过但不知道为什麽没设定成功 05/01 21:09
7F:→ woody5202001: 如果可以这样设定其实不需要额外再增加Relay去切 05/01 21:11