[匠人手记] 《匠人手记》24《用单片机IO口实现单线单工通讯》已经发布

[复制链接]
19809|66
汽车电子 发表于 2007-1-11 08:53 | 显示全部楼层

强烈支持!

&nbsp;&nbsp;&nbsp;&nbsp;对于一个喜欢“拿来主义”的人来说,我是非常喜欢这样的贴子的。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;我重视实际应用远远多于理论基础。<br />&nbsp;&nbsp;&nbsp;&nbsp;祝愿匠人的百宝箱里面有取之不尽的宝物!
 楼主| 程序匠人 发表于 2007-1-11 09:05 | 显示全部楼层

本来就对“同步”“异步”理解不透彻,于是匠人上网搜了

本来就对“同步”“异步”理解不透彻,于是匠人上网搜了一下,于是更加糊涂了。<br /><br />根据网上信息:同步通讯比使用异步通讯效率高,但是,“同步通信”的通信双方必须先建立同步,即双方的时钟要调整到同一个频率。(这一点和hotpower&nbsp;的&quot;异步协议对时间要求很严&quot;似乎有点出入.)<br />
zhiwei 发表于 2007-1-11 09:06 | 显示全部楼层

还不如用IRDa

用红外协议,或者可以这样保证同步:每位发出一个PWM,占空比1/3表示0;展空比2/3标示1;用1/2来判决,可以先发一个同步高脉冲来确定位宽。<br />如______|---|_--|__-|______帧,该帧数据为同步+0+1
 楼主| 程序匠人 发表于 2007-1-11 09:11 | 显示全部楼层

其实这个协议里已经借鉴了红外协议

  
xwj 发表于 2007-1-11 09:14 | 显示全部楼层

“同步”“异步”并不是绝对的,对于有特定格式的数据,

从数据信号上获取同步的,<br />而且大多数串行数据也都是(可以)这样做的,比如红外遥控、UART、来电显示的FSK等...<br />
xwj 发表于 2007-1-11 09:26 | 显示全部楼层

不同意匠人的电平定义!

你那样根本无法双机通讯<br /><font color=#888888>“通讯线平时空闲时处于低电平,由一个100ms&nbsp;的高电平作为引导码来唤醒从机。然后发送一个字节串行数据。完毕后通讯线恢复到空闲状态的低电平。对于从机来说,接受完8&nbsp;位数据,或检测到一个连续5t&nbsp;的低电平(结束码)即可认为通讯结束。”<br /></font><br /><br />应该把高低电平反过来才对,毕竟大多数单片机都是用的弱上拉,而且只有下降沿和低电平中断<br /><br />而且,单片机用一个IO口可以实现单线半双工通讯的,并且加上交互应答后可以明显减少一次传送的时间的(100mS的引导码时间被缩短)
高建明 发表于 2007-1-11 13:23 | 显示全部楼层

这种方式可靠性不高

我一般是3条线,单向传输,需要一个中断脚,一个波特率时钟,类似SPI,一条同步信号线,一条数据线,一条时钟线,相当可靠,软件开销极少
xwj 发表于 2007-1-11 15:02 | 显示全部楼层

单线双向通信的可靠性不成问题,我们已经用了很多年了

只是资源占用多点罢了<br /><br /><br />LS的太浪费了,完全没必要又是“同步信号线”又是“时钟线”的,重复了
coldra 发表于 2007-1-11 15:22 | 显示全部楼层

基本同意29楼意见

  
wszqw 发表于 2007-1-11 18:03 | 显示全部楼层

多谢匠人!

建议匠人将你的手记集成一册,做成一个pdf文档
wszqw 发表于 2007-1-11 19:00 | 显示全部楼层

关于长线通信,这样做比较好

发送端加一个p管做驱动<br /><br />通信协议还用匠人的协议<br /><br />1、对于hotpower老侠说的充电/放电/偏移什么的容易克服<br /><br />2、对于xwj大侠说的极性问题也可解决
wszqw 发表于 2007-1-11 19:15 | 显示全部楼层

我做过这样的长线通信

不过系统用的是24V电源,所以P管上接的是24V电源,接收端用电阻分压到5V送单片机RX脚<br /><br />开始想弄个匠人那样的协议,再考虑一下觉得不如就用串口,可靠性一样,速度还更快,最简单不过了。波特率1200bps<br /><br />用一捆约200米长的单芯细线(就是平时用来焊板的那种线)试了试,**,居然接收没有一点问题,连自己都不敢相信。<br /><br />不知道这是不是所谓的电流传送?反正最后就这么用的了,一个发送多个接收(广播方式)。用的挺好。
xwj 发表于 2007-1-11 19:27 | 显示全部楼层

34楼的电路要双工的话就要2个IO了

不过可以用于机外长线通讯<br /><br />而IO直连的方式直适合于机内或干扰小的场合,但可以用单个IO做半双工通讯<br /><br />
 楼主| 程序匠人 发表于 2007-1-11 20:56 | 显示全部楼层

wszqw的电路,匠人也用过类似的

不过是用2个三极管
wszqw 发表于 2007-1-11 21:10 | 显示全部楼层

呵呵,其实我也是用2个管呢

两次取反恢复原极性<br /><br />因为我用的是单片机的串口收发啊~~
高建明 发表于 2007-1-11 21:19 | 显示全部楼层

XWJ的单线双向通信如何实现?

XWJ的单线双向通信如何实现?<br />看到过一个空调控制器用单线通信的,还用一种居然一条通信线接在直流电源线上来通信的,我服了!~~~~~~
高建明 发表于 2007-1-11 21:23 | 显示全部楼层

另外XWJ的单线双向通信速度如何?

另外XWJ你用I/O模拟的单线双向通信速度如何?能否做到1000BPS以上不丢码?
hotpower 发表于 2007-1-11 22:17 | 显示全部楼层

如39楼单线可能集电源,语音,1主多从双向低功耗通信

不说大家应该知道是什么产品了.<br /><br />单线半双工通讯没什么新奇的,不过协议确实很重要.<br /><br />至于总线空闲电平状态是什么,这要根据实际要求而决定.<br /><br />并非只是一般的低或高电平,可能还有高阻状态.<br /><br />传输电平高低也不一样,肯定是高压传送的距离更远些,这和超高压送变电道理一样.
汽车电子 发表于 2007-1-12 00:34 | 显示全部楼层

其实把半双工的UART的两根线合为一根

&nbsp;&nbsp;&nbsp;全部采用UART现成的协议,这样简单省事,我在01年做过,一个2051系统,是做个RS485集线器
gtw 发表于 2007-1-12 08:18 | 显示全部楼层

直接用LinBus就是喽

电源线通信线只一根,协议是现成的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部