找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10496|回复: 10
收起左侧

STC单片机串口多片并联的尝试与难题

  [复制链接]
ID:283954 发表于 2018-3-25 20:59 | 显示全部楼层 |阅读模式
     这是我最近尝试制作的无线MIDI讯号合并器(merger), 目的是要让多个(五个)音乐键盘同时弹奏时可以输入到一个音源,前端的蓝牙接收器已经测试过可用,现在是要把五个接收器做在同意个盒子里,将输出合并到第六个单片机再输出到MIDI插座,MIDI讯号的合并相当麻烦,时序非常重要,一个完整的MIDI讯号有3个或2个字节,必须接收到一个通道的完整讯号后才能够再接收另一个通道的讯号,否则会出错。具体办法是,前端的单片机在发出讯号前先检查某一个接脚是否为高电位,若不是就等待,是则一次过发出一整个MIDI讯号(需时32X10=320US X 3(BYTES)=960US ), 第6个单片机用T0定时顺序给前端的单片机发出高电位允许传送,5个前端单片机的TX口直接连在一起再联到第6个单片机的RX口。

    这个办法已经用打样板测试过能行,问题在于偶尔会出现误码,我查了好几天都无法完全消除误码,怀疑是干扰所致,因此打算调整底板另外打样再测试,由于我画线路板的经验很少,只到了“布通”的水平,对什么么EMC干扰一无所知,所以上载给各位前辈帮忙看看,看犯了什么低级错误,并问几个问题,希望各位前辈指点一下:

1. 五个前端单片机的地端大面积敷铜是5个一整片好,还是每个单独敷铜再小线联通或者一点接地好呢?

2. 如何加强多串口连接的抗干扰能力呢?我尝试用470欧姆电阻上拉也没有什么效果,后来尝试用一粒PNP晶体管作第12345单片机RX与第6单片机TX之间的隔离(晶体管E接6TX,C接地,B通过2.2K接5RX)好像也没有什么改进,不过却意外得到一个好处,原本第6个单片机烧录程序时必须断开TX与前端单片机RX的连接,否者无法烧录,用了这个晶体管后烧录就不成问题了。

3.当五个蓝牙放在同一个盒子而且彼此很接近时是否会出现无法预测的干扰?有没有这方面的经验?

4.如何加装更多0.1u电容一抗击干扰?贴片的0.1u电容是否比多层电容抗干扰差?

打样板:
DSC00577j.jpg
新设计:
merger-g-jj.jpg


评分

参与人数 2黑币 +55 收起 理由
lch62221 + 5
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:52382 发表于 2018-3-26 17:26 | 显示全部楼层
建议使用多选一芯片连接,由第六片单片机控制选择端口,收到可以接受数据时选通相应通道进行接收,你的误码我从你描述来看主要来自一个地方,串口空闲状态Tx是保持低位输出的,如果单片机驱动不强那发送数据的单片机没法拉高Tx,那你的数据肯定会出错,除非你空闲状态将串口引脚重新初始化为浮置,这显然不符合软件设计思路,通讯效率会低很多,所以使用多选一芯片肯定更适合你的使用场合。当然也有可能你自己已经规避了这个问题,只是我没理解到,希望我的想法能帮到你。

评分

参与人数 1黑币 +70 收起 理由
admin + 70 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:294886 发表于 2018-3-26 16:32 | 显示全部楼层
多片连接一个串口,如果同时发送过来的话,你一个串口是接收不过来的吧!

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:297353 发表于 2018-3-26 16:35 | 显示全部楼层
1、单独铺最好。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:297518 发表于 2018-3-26 21:11 | 显示全部楼层
多个之间会有干扰的

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:283954 发表于 2018-3-27 01:13 | 显示全部楼层
各位好!谢谢各位的回应。
xzh5508: 每个前端单片机在发出讯号前都会先检查是否允许,所以不会接收不过来。程序如下:
SENTOUTWAIT:                   ;THIS IS FOR MERGE WAIT ;CHECK INPUT STATUS BEFORE SENT
JNB P1.5,SENTOUTWAIT     ;P1.5 NOT YET HIGH SO WAIT
SETB P1.7
MOV R4, 31H                        ;STORE DATA FOR CLOCK OUT IN R4
LCALL SENTONEBYTE2
MOV R4, 32H                        ;STORE DATA FOR CLOCK OUT IN R4
LCALL SENTONEBYTE2
JB 38H, SENTOUTWAITEXIT  ;ONLY 2 VALID BYTES SO JUMP
MOV R4, 33H                        ;STORE DATA FOR CLOCK OUT IN R4
LCALL SENTONEBYTE2
SENTOUTWAITEXIT:
CLR 38H
RET

鹰狐: STC单片机的串口在空闲的时候是高电位的,应该是弱上拉双向输出入口,可能设定为其他IO口模式
会改善,但不确定那些IO口模式设定是否也对串口有效。有待实验,我分析了输出的MIDI码,都是在同一行出错,这是否意味着硬件干扰的可能性比较低,因为干扰应该随机发生的,但我在设计新打样板时一定要把可能出现的干扰降低,所以加了很多0.1u电容哈。
使用多选一芯片应该是好办法,但是我很想知道究竟STC多串口并联的方式是否确实可用,而且最多能并上几个而不出错。
TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT               
000C1573   1   1     C0    00    --    1  ---  PC: Acc. Grand Piano  
000C15BB   1   1     90    3C    10    1  C  4 Note On     ;第1个前端机        
000C15C0   1   1     90    3C    10    1  C  4 Note On     ;第2个前端机     
000C15C2   1   1     90    3C    10    1  C  4 Note On     ;第3个前端机
000C15C8   1   1     90    3C    10    1  C  4 Note On     ;第4个前端机
000C161A   1   1     90    3C    10    1  C  4 Note On     ;第5个前端机
000C1662   1   1     90    40    30    1  E  4 Note On      ;第1个前端机   
000C1667   1   1     90    40    30    1  E  4 Note On               
000C1669   1   1     90    40    30    1  E  4 Note On               
000C166C   1   1     90    40    30    1  E  4 Note On               
000C16C1   1   1     90    40    30    1  E  4 Note On               
000C17A9   1   1     90    43    40    1  G  4 Note On               
000C17AE   1   1     90    43    40    1  G  4 Note On               
000C17AF   1   1     90    43    40    1  G  4 Note On               
000C17B3   1   1     90    43    40    1  G  4 Note On               
000C1808   1   1     90    43    40    1  G  4 Note On               
000C1993   1   1     90    48    60    1  C  5 Note On               
000C1998   1   1     90    48    60    1  C  5 Note On               
000C199A   1   1     90    48    60    1  C  5 Note On               
000C199C   1   1     90    48    60    1  C  5 Note On               
000C19F2   1   1     90    48    60    1  C  5 Note On               
000C213B   1   1     80    3C    00    1  C  4 Note Off              
000C213C   1   1     80    40    00    1  E  4 Note Off              
000C213E   1   1     80    3C    00    1  C  4 Note Off              
000C213F   1   1     80    40    00    1  E  4 Note Off              
000C2141   1   1     90    00    00    1  C -1 Note Off   开始出错            
000C2142   1   1     90    00    40    1  C -1 Note On               
000C2143   1   1     90    00    00    1  C -1 Note Off              

评分

参与人数 1黑币 +70 收起 理由
admin + 70 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:283954 发表于 2018-3-30 00:53 | 显示全部楼层
经过几天调试,结果是,5片STC12的RX并联输出到一片STC12的TX是可行的,不必经过什么晶体管隔离,乱码问题是由于单片机的软件还有些问题,前端单片机输出时除了必须等待允许输出的脚的高电位,在输出完毕后还必须检测允许输出的脚回到低电位才可以离开,否则在剩余时间里若缓冲里还有数据要输出就会再输出而因为时间不够而产生乱码,程序更正如下:
SENTOUTWAIT:            ;THIS IS FOR MERGE WAIT ;CHECK INPUT STATUS BEFORE SENT
JNB P1.5,SENTOUTWAIT
SETB P1.7
MOV R4, 31H             ;STORE DATA FOR CLOCK OUT IN R4
LCALL SENTONEBYTE2
MOV R4, 32H             ;STORE DATA FOR CLOCK OUT IN R4
LCALL SENTONEBYTE2
JB 38H, SENTOUTWAITEXIT  ;ONLY 2 VALID BYTES
MOV R4, 33H                         ;STORE DATA FOR CLOCK OUT IN R4
LCALL SENTONEBYTE2
SENTOUTWAITEXIT:
JB P1.5, SENTOUTWAITEXIT  ;WAIT FOR LOW
CLR 38H
RET

评分

参与人数 1黑币 +80 收起 理由
admin + 80 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:653286 发表于 2024-3-23 15:50 | 显示全部楼层
请问一下楼主,这5个MCU的输出TX是并联一起接到主MCU的RX吗?不是加了二极管?
回复

使用道具 举报

ID:283954 发表于 2024-3-23 22:40 | 显示全部楼层
tianxiongweitxw 发表于 2024-3-23 15:50
请问一下楼主,这5个MCU的输出TX是并联一起接到主MCU的RX吗?不是加了二极管?

这个项目我已经完成但不必再用,5个副机的确可以直接接在一起,没什么二极管,实际测试过可以用。
回复

使用道具 举报

ID:283954 发表于 2024-3-23 22:50 | 显示全部楼层
tianxiongweitxw 发表于 2024-3-23 15:50
请问一下楼主,这5个MCU的输出TX是并联一起接到主MCU的RX吗?不是加了二极管?

原来当年写错了RX和TX, 是“5片STC12的TX并联输出到一片STC12的RX是可行的”,我那时常把TX和RX对调,MCU端的TX来到蓝牙接口就称为RX,MCU端的RX来到蓝牙接口就称为TX,结果常常混淆了。
回复

使用道具 举报

ID:420836 发表于 2024-3-24 02:04 | 显示全部楼层
感谢与我们分享设计和问题。 这真的很有帮助。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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