搜索
bottom↓
回复: 38

两个单片机之间用2个GPIO双向通讯用什么协议或时序比较好?

[复制链接]

出0入0汤圆

发表于 2019-1-23 13:03:58 | 显示全部楼层 |阅读模式

准备这么接线,好或者有其他更好的接线方式?
速度要求不高,1kbps就够了,这样可以用普通的光耦,当然能高一点更好。
希望能用普通端口,没有中断,不占用硬件定时器,
打算主程序跑一个循环去查询一次,实时性要求不高,但是不能丢失或者错过。
本来想去模拟IIC时序,但是IIC是固定的主从结构,最好不用固定的主从结构,任何一方在空闲的时候都能发起通讯。
占用系统资源尽量少,尽量减少等待时间。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出10入23汤圆

发表于 2019-1-23 13:04:49 来自手机 | 显示全部楼层
串口不好么?

出0入0汤圆

 楼主| 发表于 2019-1-23 13:08:03 | 显示全部楼层

因为考虑到串口被占用的情况。你是说模拟TTL串口的时序?那样两个单片机都要用晶振,或者送一段数据修正一下。

出0入4汤圆

发表于 2019-1-23 13:16:00 | 显示全部楼层
最简单的就是串口了,如果想自己定义的话也可以定义 一种数字接口 可供参考的太多了  例如红外的NEC编码, 射频的 EV1527编码等等的都可以拿来用。

出0入0汤圆

 楼主| 发表于 2019-1-23 13:24:13 | 显示全部楼层
huarana 发表于 2019-1-23 13:16
最简单的就是串口了,如果想自己定义的话也可以定义 一种数字接口 可供参考的太多了  例如红外的NEC编码,  ...

红外的NEC编码和EVC1527都是要计算脉冲宽度的,感觉解码不够那么简洁。

出0入0汤圆

发表于 2019-1-23 13:26:24 | 显示全部楼层
用硬件I2C一个做主,一个做从。不要用IO模拟的I2C。

出0入0汤圆

 楼主| 发表于 2019-1-23 13:31:13 | 显示全部楼层
Eric_Xue 发表于 2019-1-23 13:26
用硬件I2C一个做主,一个做从。不要用IO模拟的I2C。

这样要占用硬件IIC接口哦,我是想讨论一个比较通用的尽量少占资源的方案出来。

出0入0汤圆

发表于 2019-1-23 13:33:24 来自手机 | 显示全部楼层
模拟spi应该最简单

出0入0汤圆

 楼主| 发表于 2019-1-23 13:39:13 | 显示全部楼层
gongxd 发表于 2019-1-23 13:33
模拟spi应该最简单

双向通信模拟SPI要三根线呢,

出0入8汤圆

发表于 2019-1-23 14:17:19 | 显示全部楼层
chengyang79 发表于 2019-1-23 13:39
双向通信模拟SPI要三根线呢,

可以  MISO 和MOSI 合并成一根线。

出0入362汤圆

发表于 2019-1-23 14:36:23 | 显示全部楼层
单线半双工uart呗, 一条线就完事了. 全双工也就是两条线.
stm32的appnote里应该有现成的例子.

出0入0汤圆

 楼主| 发表于 2019-1-23 14:42:20 | 显示全部楼层
kebaojun305 发表于 2019-1-23 14:17
可以  MISO 和MOSI 合并成一根线。

感觉不行啊,因为这个光耦只能单向传输信号

出0入91汤圆

发表于 2019-1-23 14:43:13 | 显示全部楼层
从设备的I2C如果用模拟的会比较难写 ,主要来数据的时候不一定单片机是空闲的,硬件I2C没这个问题

出0入0汤圆

发表于 2019-1-23 15:09:22 来自手机 | 显示全部楼层
确实难题

出0入0汤圆

发表于 2019-1-23 15:12:53 | 显示全部楼层
单方向做单线协议, 刚好两根线,组成双向通讯

出0入0汤圆

发表于 2019-1-23 15:16:17 | 显示全部楼层
模拟串口

出0入0汤圆

发表于 2019-1-23 15:16:50 | 显示全部楼层
有自带现有的外设不用,非要自己开发套通信方式和链路协议,额,这个和其他协议一样,同步参照iic spi,异步参照串口,感觉有楼主点把自己绕进去了,自己找麻烦
如果,楼主只是简单做个拉低拉高通知下,当我没说。。。

出0入0汤圆

发表于 2019-1-23 15:24:29 | 显示全部楼层
chengyang79 发表于 2019-1-23 13:31
这样要占用硬件IIC接口哦,我是想讨论一个比较通用的尽量少占资源的方案出来。 ...

用IO口模拟,CPU必须高频率去访问IO口状态,这样占用CPU的处理时间。
你节省了外设(I2C、SPI)的资源,却浪费了CPU的资源。

出0入0汤圆

 楼主| 发表于 2019-1-23 15:29:27 | 显示全部楼层
aitchow 发表于 2019-1-23 15:12
单方向做单线协议, 刚好两根线,组成双向通讯

你是说的用DS18B20那种单线协议?也是用脉冲宽度区分的,编码解码不简洁。
另外如果用单线协议,另外一根线不用有点浪费,
我的想法是用输出的IO发送时钟,用输入的IO接收数据。

出0入0汤圆

发表于 2019-1-23 15:47:38 | 显示全部楼层
曼切斯特码。解决好同步问题就可以了。

出200入657汤圆

发表于 2019-1-23 16:05:20 | 显示全部楼层
楼主你以为天下这么多工程师想不出好的方案,非要创造出更好的方案吗。如果有更好的一收一发俩个IO的通信方案,串口就不会存在的。串口麻烦吗?是的,有更简洁的吗?没有,除非将硬件设计复杂化

出0入0汤圆

发表于 2019-1-23 16:47:37 | 显示全部楼层
同意楼上,串口最简单了,不能再简单了。
同步通信至少CLK,DI.DO-3根。
你2根线,而且双向,那只能异步了,异步就串口最简单了。

出0入4汤圆

发表于 2019-1-23 17:59:52 | 显示全部楼层
又要简单又要简洁,最好的办法就是两个单片机合成一个单片机。

出0入0汤圆

发表于 2019-1-23 18:49:22 来自手机 | 显示全部楼层
21楼回答,用之前看过的一个帖子用语:通透。21楼就是这样的回答,不仅从技术上给了回答,还从原则上给了结论厉害

出0入147汤圆

发表于 2019-1-23 18:54:19 来自手机 | 显示全部楼层
ziruo2002ab 发表于 2019-1-23 16:05
楼主你以为天下这么多工程师想不出好的方案,非要创造出更好的方案吗。如果有更好的一收一发俩个IO的通信方 ...

顶一个         

出0入0汤圆

发表于 2019-1-23 18:58:09 来自手机 | 显示全部楼层
如果自己再写一个,最后发现也是一个蹩脚的串口

出0入0汤圆

发表于 2019-1-23 19:03:07 来自手机 | 显示全部楼层
就用串口,如果你认为会占用串口就选串口多的单片机。提那么多要求还这个不行那个不行,鬼才做的出来。

出0入0汤圆

发表于 2019-1-23 19:10:02 来自手机 | 显示全部楼层
工程师500元日薪来算,一天浪费多少个单片机? 这个年代,选择简单的方案,哪怕是贵点的多一个串口的单片机,才是真正最低成本的选择。哦,我还没有考虑自定义通信的风险成本呢,量产风险很大

出0入0汤圆

发表于 2019-1-23 19:26:52 | 显示全部楼层
IO模拟嫌协议复杂,占用CPU资源,硬件通信嫌占用硬件资源接口。只能自己研发一个通信协议了....  

出0入22汤圆

发表于 2019-1-23 19:49:43 来自手机 | 显示全部楼层
用fpga吧,想干啥协议就上啥协议

出0入0汤圆

发表于 2019-1-23 20:15:56 | 显示全部楼层
zxq6 发表于 2019-1-23 19:49
用fpga吧,想干啥协议就上啥协议

用FPGA最后不还得解决怎么跟单片机通信的问题

出0入0汤圆

发表于 2019-1-23 20:26:00 | 显示全部楼层
我一直是用红外的NEC码,解码也很容易。

出95入8汤圆

发表于 2019-1-23 20:33:02 来自手机 | 显示全部楼层
重复造轮子,特定需求下肯定有最优解。  半双工  串口  + 自动机,折腾吧;完善的协议么  modbus ,profibus,工作量数人年

出0入0汤圆

发表于 2019-1-23 20:52:36 | 显示全部楼层
串口+自动波特率

出0入0汤圆

 楼主| 发表于 2019-1-24 08:27:01 | 显示全部楼层
本帖最后由 chengyang79 于 2019-1-24 08:29 编辑
ziruo2002ab 发表于 2019-1-23 16:05
楼主你以为天下这么多工程师想不出好的方案,非要创造出更好的方案吗。如果有更好的一收一发俩个IO的通信方 ...


因为要隔离没有晶振,速度及实时性要求不高,所以用的普通光耦。
自己不是做电子的,能力有限。我想坛里这么多高手总归比我闭门造车能想到的方法好,所以发出来也是为了集思广益看看有没有更好的解决方案。
万一有大神有更好的思路呢,即使兜了一圈,最终的结论还是走串口最好,也能让其他像我一样的菜鸟少走弯路,也不是挺好吗?

出0入0汤圆

发表于 2019-1-24 08:44:42 | 显示全部楼层
你们都不觉得楼主是吃饱撑的吗?

出0入0汤圆

发表于 2019-1-24 08:47:23 | 显示全部楼层
i2c扩展串口

出0入0汤圆

发表于 2019-1-24 11:40:39 | 显示全部楼层
建议串口232

出0入0汤圆

发表于 2019-1-24 17:20:43 | 显示全部楼层
自己定义一个协议就可以了,就是用什么样的信号波形表示数据 1 和 0 。  只要保证可靠,收方一定要返回确认信号。
十年前做过类似的自定义协议,用在门禁系统上。具体实现不记得了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-24 23:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表