打印
[匠人手记]

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

[复制链接]
楼主: 程序匠人
手机看帖
扫描二维码
随时随地手机跟帖
21
汽车电子| | 2007-1-11 08:53 | 只看该作者 回帖奖励 |倒序浏览

强烈支持!

    对于一个喜欢“拿来主义”的人来说,我是非常喜欢这样的贴子的。 
    我重视实际应用远远多于理论基础。
    祝愿匠人的百宝箱里面有取之不尽的宝物!

使用特权

评论回复
22
程序匠人|  楼主 | 2007-1-11 09:05 | 只看该作者

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

本来就对“同步”“异步”理解不透彻,于是匠人上网搜了一下,于是更加糊涂了。

根据网上信息:同步通讯比使用异步通讯效率高,但是,“同步通信”的通信双方必须先建立同步,即双方的时钟要调整到同一个频率。(这一点和hotpower 的"异步协议对时间要求很严"似乎有点出入.)

使用特权

评论回复
23
zhiwei| | 2007-1-11 09:06 | 只看该作者

还不如用IRDa

用红外协议,或者可以这样保证同步:每位发出一个PWM,占空比1/3表示0;展空比2/3标示1;用1/2来判决,可以先发一个同步高脉冲来确定位宽。
如______|---|_--|__-|______帧,该帧数据为同步+0+1

使用特权

评论回复
24
程序匠人|  楼主 | 2007-1-11 09:11 | 只看该作者

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

使用特权

评论回复
25
xwj| | 2007-1-11 09:14 | 只看该作者

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

从数据信号上获取同步的,
而且大多数串行数据也都是(可以)这样做的,比如红外遥控、UART、来电显示的FSK等...

使用特权

评论回复
26
xwj| | 2007-1-11 09:26 | 只看该作者

不同意匠人的电平定义!

你那样根本无法双机通讯
“通讯线平时空闲时处于低电平,由一个100ms 的高电平作为引导码来唤醒从机。然后发送一个字节串行数据。完毕后通讯线恢复到空闲状态的低电平。对于从机来说,接受完8 位数据,或检测到一个连续5t 的低电平(结束码)即可认为通讯结束。”


应该把高低电平反过来才对,毕竟大多数单片机都是用的弱上拉,而且只有下降沿和低电平中断

而且,单片机用一个IO口可以实现单线半双工通讯的,并且加上交互应答后可以明显减少一次传送的时间的(100mS的引导码时间被缩短)

使用特权

评论回复
27
高建明| | 2007-1-11 13:23 | 只看该作者

这种方式可靠性不高

我一般是3条线,单向传输,需要一个中断脚,一个波特率时钟,类似SPI,一条同步信号线,一条数据线,一条时钟线,相当可靠,软件开销极少

使用特权

评论回复
28
xwj| | 2007-1-11 15:02 | 只看该作者

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

只是资源占用多点罢了


LS的太浪费了,完全没必要又是“同步信号线”又是“时钟线”的,重复了

使用特权

评论回复
29
coldra| | 2007-1-11 15:22 | 只看该作者

基本同意29楼意见

使用特权

评论回复
30
wszqw| | 2007-1-11 18:03 | 只看该作者

多谢匠人!

建议匠人将你的手记集成一册,做成一个pdf文档

使用特权

评论回复
31
wszqw| | 2007-1-11 19:00 | 只看该作者

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

发送端加一个p管做驱动

通信协议还用匠人的协议

1、对于hotpower老侠说的充电/放电/偏移什么的容易克服

2、对于xwj大侠说的极性问题也可解决

使用特权

评论回复
32
wszqw| | 2007-1-11 19:15 | 只看该作者

我做过这样的长线通信

不过系统用的是24V电源,所以P管上接的是24V电源,接收端用电阻分压到5V送单片机RX脚

开始想弄个匠人那样的协议,再考虑一下觉得不如就用串口,可靠性一样,速度还更快,最简单不过了。波特率1200bps

用一捆约200米长的单芯细线(就是平时用来焊板的那种线)试了试,**,居然接收没有一点问题,连自己都不敢相信。

不知道这是不是所谓的电流传送?反正最后就这么用的了,一个发送多个接收(广播方式)。用的挺好。

使用特权

评论回复
33
xwj| | 2007-1-11 19:27 | 只看该作者

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

不过可以用于机外长线通讯

而IO直连的方式直适合于机内或干扰小的场合,但可以用单个IO做半双工通讯

使用特权

评论回复
34
程序匠人|  楼主 | 2007-1-11 20:56 | 只看该作者

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

不过是用2个三极管

使用特权

评论回复
35
wszqw| | 2007-1-11 21:10 | 只看该作者

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

两次取反恢复原极性

因为我用的是单片机的串口收发啊~~

使用特权

评论回复
36
高建明| | 2007-1-11 21:19 | 只看该作者

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

XWJ的单线双向通信如何实现?
看到过一个空调控制器用单线通信的,还用一种居然一条通信线接在直流电源线上来通信的,我服了!~~~~~~

使用特权

评论回复
37
高建明| | 2007-1-11 21:23 | 只看该作者

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

另外XWJ你用I/O模拟的单线双向通信速度如何?能否做到1000BPS以上不丢码?

使用特权

评论回复
38
hotpower| | 2007-1-11 22:17 | 只看该作者

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

不说大家应该知道是什么产品了.

单线半双工通讯没什么新奇的,不过协议确实很重要.

至于总线空闲电平状态是什么,这要根据实际要求而决定.

并非只是一般的低或高电平,可能还有高阻状态.

传输电平高低也不一样,肯定是高压传送的距离更远些,这和超高压送变电道理一样.

使用特权

评论回复
39
汽车电子| | 2007-1-12 00:34 | 只看该作者

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

   全部采用UART现成的协议,这样简单省事,我在01年做过,一个2051系统,是做个RS485集线器

使用特权

评论回复
40
gtw| | 2007-1-12 08:18 | 只看该作者

直接用LinBus就是喽

电源线通信线只一根,协议是现成的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则