gaobao_1 发表于 2018-1-27 05:17:40

两个stc单片机之间普通io口通迅大家有什么好的方案?

在做一个led显示的板用的tm1640单位供应商忙一直没发过来,又快过春节了想用stc单片机做从机接收先完成整机实验,好在家过春节能多呆几天。请问有做过用普通io的两个单片之间通信的朋友大家有什么好的方案没有?

gaobao_1 发表于 2018-1-27 05:19:37

在做一个led显示的板用的tm1640单位供应商忙一直没发过来,又快过春节了想用stc单片机做从机接收先完成整机实验,好在家过春节能多呆几天。请问有做过用普通io的两个单片之间通信的朋友大家有什么好的方案没有?

gaobao_1 发表于 2018-1-27 05:27:59

说明一下,tm1640是两线制通迅,但我的电路上留了三个普通io口,欢迎大家提出好的方案!

wumaoxu 发表于 2018-1-27 08:17:18

串口或spi

wdynh 发表于 2018-1-27 08:36:00

按照tm1640的数据手册上的串行时序操作就可,很简单,我几年前就做过,用的是tm1640+stc15w408as实现,成本很低。

q457344370 发表于 2018-1-27 08:43:38

如果是数码管可以给你个驱动,位段改个宏就行

yunhuisong 发表于 2018-1-27 10:11:08

楼主是想用单片机临时代替tm1640调试出样机来,楼主何必呢,先在其它地方买几片样品多好啊

kite2006 发表于 2018-1-27 11:06:13

软件模拟I2C就可以了,看I2C的数据时序做

gaobao_1 发表于 2018-1-27 18:21:35

用芯片当然是容易了,{:sad:}其实就是想尝试下能不能行,今天试了一种方法最理想状态开机能传10秒数据是正常的,后边都是乱码或者就是不显示,脑袋大了。想象中简单的事往往做好了也不容易啊

gaobao_1 发表于 2018-1-27 18:32:41

两个avr单片之间用IIC通信我试过是可行也挺方便的

gaobao_1 发表于 2018-1-27 18:43:40

不是来问大家要程序的,做试验这种东西只有做出来才能在成功的有成就感,就算是前人走过路可以自己感受一下,星期一,二再试试。还不行就放一放,就等什么时候脑洞大开再试!!

AWEN2000 发表于 2018-1-28 08:36:39

用io模拟iic,接收端开启外部中断。主机开始发送时,接收方外部中断启动接收

higeo 发表于 2018-1-28 15:30:11

直接模拟1640时序就可以了

gaobao_1 发表于 2018-1-28 18:42:20

谢谢楼上两位的提供的思路!现在状态是开机能显示几十秒数据说明能传字节只是后面不能正确同步了,我也想到出误码的原因了,其实所有通信都大同小异,关紧是起始条件和判断在加上一些地址信息等,我现在用的三线的方法想速度快点程太简化了,明天去重理一下思路试一试

zhcj66 发表于 2018-1-28 20:42:55

gaobao_1 发表于 2018-1-27 18:32
两个avr单片之间用IIC通信我试过是可行也挺方便的

2个avr的硬件iic我也试过,但模拟iic没用过

amigenius 发表于 2018-1-29 02:30:28

如果有硬件外中断的,就用模拟SPI三线,最方便快捷。如果只预留了普通IO,则用模拟串口,只需2线,参看我以前发的模拟串口程序。

gaobao_1 发表于 2018-1-29 18:20:52

amigenius 发表于 2018-1-29 02:30
如果有硬件外中断的,就用模拟SPI三线,最方便快捷。如果只预留了普通IO,则用模拟串口,只需2线,参看我以 ...

留了中断口的,但是只作普通口,就是防如果调不通才用,今天调好了是发送字节子程序最后有一处写错了,谢谢大家!

gaobao_1 发表于 2018-1-29 18:33:19

我用了三根线,两根时钟线主从各一根共用一根数据线,采用时钟交互握手方式相位差为90度,就是一个高时另一个为低,主机晶体12m,从机stc内部rc为6.7m.从示波上看是约40us传一个字节,相当时钟为200KHz挺快吧

gaobao_1 发表于 2018-1-29 18:43:11

理论上可以双向通信但是还没试

freemanw 发表于 2018-1-29 20:21:05

模拟SPI。。。。。。。。。。。。

gaobao_1 发表于 2018-1-29 20:34:30

应该说不是,也简单。就是各用一个时钟告诉对方自己的状态就是这么简单

gaobao_1 发表于 2018-1-29 20:37:12

波形就是增量形编码器a,b相波形。用笔画个草图就能明白

arm 发表于 2018-1-30 00:00:58

模拟串口或者红外的那种方式也挺好

Claude 发表于 2018-1-30 09:53:52

IIC如何 但是效率不高

shower.xu 发表于 2018-1-30 09:58:10

我觉得串口或spi不错,串口调试或者检查通讯的时候很方便,spi速率高也可靠

BAOJIWWWJJJWWW 发表于 2018-1-30 22:39:24

串口单线半双工,可读可写

BAOJIWWWJJJWWW 发表于 2018-1-30 22:39:44

只需1根线即可

zhcj66 发表于 2018-1-30 23:41:41

amigenius 发表于 2018-1-29 02:30
如果有硬件外中断的,就用模拟SPI三线,最方便快捷。如果只预留了普通IO,则用模拟串口,只需2线,参看我以 ...

模拟spi和模拟串口哪个快

zhcj66 发表于 2018-1-30 23:44:51

BAOJIWWWJJJWWW 发表于 2018-1-30 22:39
串口单线半双工,可读可写

说说单线半双工如何实现

ilikemcu 发表于 2018-1-31 08:34:07

zhcj66 发表于 2018-1-30 23:44
说说单线半双工如何实现

很简单的,如果支持单线的STM32等直接设置一下,一条TXD线就可以直接用。大部分的MCU不支持,只要把RXD和TXD都设置成带上拉的漏极输出模式(TXD不能用推挽,如果用了推挽,或者担心出问题,那就TXD接一个二极管的负极,把二极管正极与RXD并联),并到一起,再和其它MCU并联,如果速率高,可以再加一个上拉电阻。
这个方法可以多个MCU并接,做成类似于RS485的一主多从方式通信,3.3V和5V的芯片也可以加入MOS管做的电平转换电路并联上去,非常方便。

zhcj66 发表于 2018-1-31 08:54:13

ilikemcu 发表于 2018-1-31 08:34
很简单的,如果支持单线的STM32等直接设置一下,一条TXD线就可以直接用。大部分的MCU不支持,只要把RXD和 ...

思路不错

BAOJIWWWJJJWWW 发表于 2018-1-31 09:09:26

普通IO口可以用脉宽输出,接收端解码即可,这样对串口就不占用了,还有如果系统时钟不稳定,有温飘,串口会有误码,但是脉宽与MCU的时钟准确度没有关系,这样也是可以半双工通信的,应该比模拟串口要简单可靠,不过脉宽解码比较浪费MCU,速度高了MCU占用率有点高,低俗的类似红外编解码,都是可以的。

gaobao_1 发表于 2018-1-31 19:10:09

谢谢大家的讨论,以用上tm1640也用了差不多有一天,后来专门用了个小单片机调试tm1640对照厂家的手册一点一点的看波形才调好,看来c语言的功力还不够,数组和指针一直不是很明白这次调试也是体会很深
页: [1]
查看完整版本: 两个stc单片机之间普通io口通迅大家有什么好的方案?