feicial 发表于 2007-12-29 21:30:00

DMX512协议中,串口接收问题,求助!!

http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_195232.JPG

我是做LED的,要用到一个DMX512协议调光,DMX512协议类似串口232协议,我使用单片机M16的串口RX接收这个协议的数据,使用的是串口协议。协议如图,每个FRAME就是串口协议里的一帧,每帧FRAME包含一个开始位(低电平)和两个停止位(高电平),没有奇偶校验。因此一个FRAME有11位。DMX512协议要求速度为是250K,也就是说4uS收一位.一个完整DMX512数据包包含3个部分:一个起始低电平“break”(图中①表示),512个FRAME,还有一段高电平(图中⑨表示),我的问题是每个数据包最前面还有一段很长的低电平(就是图中①break),他是一个数据包开始的标志,时间长度最小可以88微秒S ,最大可以 1秒。



我想的问题1,如果用串口RX口去接收这样协议的数据包,怎么去检测这个“图中①break”的到来?
我的通讯速度是250k波特,我用16M晶振。

图中协议说明:
①为复位(BREAK)信号,一个数据包开始的标志;②为大于等于8微秒的标记;③为串行传送的一帧数据;④为低电平的开始位;⑤为一帧最低位;⑥为一帧最高位;⑦为两个高电平的停止位;⑧为两个字节的FRAME之间可允许的高电平的间隔时间。⑨表示无信号时或两个数据包之间线路保持高电平的时间;


说的简单点就是一连串(512个)的串行数据前面加了一个长时间(2帧时间左右)低电平标志,组成的一个串行协议,我不知道怎么去判断这个低电平标志位!就无法判断一个数据包的开始。

由于①的时间过于长了,时间长度大于一帧串口数据,串口接收到低电平后,长时间没有收到停止位。


我的问题2:当单片机串口接收到如图中①+②部分的电平信号后,串口会接收到数据0x00吗?还是接收不到数据,UART的帧错误标志位也会被置位,即FREE标志位也会置1?

我的问题3:如果我要去判断一个数据包的到来,也就是判断①+②部分的电平信号是否开始,应该判断接收到了0x00,还是FREE标志位被置1?

feicial 发表于 2007-12-29 21:56:15

谢谢回复

zxqwork 发表于 2007-12-29 22:07:18

我给你出出主意吧,出的不好别怪我,呵呵
1.我用AVR做过模拟串口,也不是很麻烦很复杂,你这个问题用软件模拟一定行,要是闲AVR慢,用STC5410,比AVR快好几倍.
2.另个突发奇想是用同步移位寄存器,比如74HC595,或者个GAL自己做个11位移位器转换为并行,而用(2)的上升沿为同步开始点,4US的同步时钟移位.(或者用(2)的上升沿DELAY 2US开始发生同步移位时钟信号,意为取信号的中点电平).用单片机中断检测其他的开始位,放行同步移位.把这个问题转换成并行处理的方法,节约单片机时间.

qkj1575 发表于 2007-12-30 12:43:45

好象PIC系列有这样的例子,你去找一下,我看过
页: [1]
查看完整版本: DMX512协议中,串口接收问题,求助!!