实际上这是个高难度问题,不像有些人不长脑袋,张口就是简单
邓苗同志说的有道理,难度就是同步问题. 因为RSR232需要起始位来异步同步双方的定时器. 而RX是I2C的SDA信号,不会产生RS232需要的同步信号.
不过我想如果真的不用RX来用input()读数据,那么用output()写TX就意义不大. 不管Break是否好用,真不如直接用DTR或RTS来操作TX.
估计老外是考虑RS232只有3个输出信号,即TX,DTR和RTS. 而SCL和SDA就用去了2个.而窃电控制也需要1个. 总不能老发TX来供电吧.所以就有了楼主位的帖图.
如果实在要用TX/RX来发脉冲和收数据,下图不知如何???
 左下方加的那个电压比较器实际的目的是为得到RS232输出后在TTL方的下跳沿. 如果上下沿都要的话,不如直接将TX与CTS进行232电平的短路.
要此比较器的目的是只要协议的下跳,因为I2C在SCL=0时是SDA送数据的时候, 这时对其采样都是不合适和不对的. 加它的目的是在SCL=0时,好通知PC方用RTS送出SDA数据.
如何解决用RX接收数据呢???我感到很难办...
要解决同步问题应该不难,如上图加上个二极管即可,因为它可以将TX的同步信号即TX的起始位强行 地通过SCL拉低SDA再通过U2送给RX,这样就好象TX和RX短接自环一样!!!
这样做后,在SCL=0的时候,SDA的信号虽然为0,但它确实以存在!!!不过被SCL暂时钳位而已. 当SCL上跳的时候,SDA自然会立即出现.
这样做解决了I2C向RX自动发送起始位的问题,但不能解决在停止位还是"0" 的问题.
因为I2C在SCL=1时是不过变动数据SDA的,这样也导致了在RS232端RX的停止位 时,SDA的数据还保持0的问题...
所以现在分析后,就明白了老外为什么不用RX的原因了---因为太难了~~~ 准备以后再研究这个问题,我不想放过~~~
故暂时认为这样好些,如下图(短接TD---CTS): |
|