kevincoxee 发表于 2012-4-3 16:24:52

请问有没有用过DMX512A协议做灯光控制的前辈在?

我现在在用FPGA实现DMX512A协议挂一路灯条,协议文件已经看过,但是有些具体实践中的问题还不是很清楚,特此请教

协议文件上描述的DMX512数据链中512的数据包是按照顺序来对下面挂的灯具控制器进行分配的,可是相连的灯条是用串联的方式串在一起的,如果我一个灯条的接收芯片控制10个灯,每个灯需要有R、G、B三种数据信息,每个数据信息一个字节(8位,即一个DMX512数据包),这样的话一个接收芯片就需要接收30个DMX512数据包。如果我需要一路挂10个灯条,就要一次发300个数据包信息,这些信息灯条上的控制芯片是通过什么方式来识别出自己所需要的那30个数据包的呢?

kevincoxee 发表于 2012-4-3 17:57:59

自顶一个

xiaowu191 发表于 2012-4-3 18:52:20

标准DMX512一个数据包里面包括512个有效调光数据,按你的说法,每个灯需要30个数据,10台灯就300个数据,每台灯都独立控制也够分配的;

每台灯要设置一个地址码(我们是这么叫的),这样就能识别出自己所需要的那30个数据包,比如第一台灯设置成1,第二台设置成31……;
如果控制芯片RAM够大,可以把512个数据全部接收过来,然后再选取自己地址码段的数据进行控制;
也可以选择性接收数据;

gwnpeter 发表于 2012-4-3 20:09:34

你也可以使用串行链路,每个灯把开始的30个地址的数据获取下来,把后面的数据转发出去.............

kevincoxee 发表于 2012-4-3 21:47:02

gwnpeter 发表于 2012-4-3 20:09 static/image/common/back.gif
你也可以使用串行链路,每个灯把开始的30个地址的数据获取下来,把后面的数据转发出去............. ...

那就是说如果我要10个灯的话就要发送10次数据了是吗?这样可能速度上跟不太上吧,因为485的通信速度本来就低,还想用这个东西还控制LED点阵屏来播放动画

kevincoxee 发表于 2012-4-3 21:49:10

xiaowu191 发表于 2012-4-3 18:52 static/image/common/back.gif
标准DMX512一个数据包里面包括512个有效调光数据,按你的说法,每个灯需要30个数据,10台灯就300个数据,每 ...

可是DMX512协议的数据格式不是只串行的发送513个数据包出去吗?地址码是包含在什么地方发出去的呢

xiaowu191 发表于 2012-4-4 00:57:27

地址码不是在数据包里面的,是你的灯里面设置的,等于是你给每台灯一个识别码;

还不是很明白你是怎么应用的,你是用FPGA来做主控、发送DMX512数据去控制下面的灯?

kevincoxee 发表于 2012-4-4 14:33:09

xiaowu191 发表于 2012-4-4 00:57 static/image/common/back.gif
地址码不是在数据包里面的,是你的灯里面设置的,等于是你给每台灯一个识别码;

还不是很明白你是怎么应用 ...

哦,我明白你的意思了,就是说灯条设置成多少号就会从DMX512数据链里面取出多少号的数据出来对吧

对的,我是用FPGA作发送端,把数据发送给485接口,然后用485接口接灯条,但是现在灯条的控制芯片还不知道用的是什么,有成品但是型号给抹掉了,一般这种DMX512控制的灯条使用什么芯片控制的呢?就是那种一块芯片驱动12个灯的那种,彩虹管一样的东西

gwnpeter 发表于 2012-4-4 22:56:35

kevincoxee 发表于 2012-4-3 21:47 static/image/common/back.gif
那就是说如果我要10个灯的话就要发送10次数据了是吗?这样可能速度上跟不太上吧,因为485的通信速度本来 ...

不用一次就行了,用逻辑分析仪抓一下别人的自动地址的dmx512设备的输入和输出端的数据比较一下就知道了,只是把需要的部分截取下来,其他部分的转发出去,当然经过一个设备数据就短了一些

kevincoxee 发表于 2012-4-8 16:40:45

xiaowu191 发表于 2012-4-3 18:52 static/image/common/back.gif
标准DMX512一个数据包里面包括512个有效调光数据,按你的说法,每个灯需要30个数据,10台灯就300个数据,每 ...

小吴同学,还有个问题想请教,你所说的DMX512协议数据包中的“有效调光数据”是不是根据接收芯片的不同来设置的呢?那就是说我用不同的接收芯片有可能需要输送的“有效调光数据”是不一样的。
还是说DMX512A协议规定好了这个数据的格式了呢?我看协议的官方资料里面好像没有这方面的规定

xiaowu191 发表于 2012-4-8 18:20:32

请教真不敢当!

我上传一个资料《DMX512-A灯光控制数据传输协议》,里面第12页有提到:

8.6 数据分块的最大数
每个数据链路应支持最高到512个数据字段。当需要更多的字段时,应该开辟多个链路来使用。
8.7 数据分块最小数
在数据链路上,没有最小字段数。假设满足标准的最小定时要求—见8.10节和图5,DMX512数据分组少于512字段的数据分组都可以发送。


舞台灯上用的DMX调光台,也有是192,240,512,1024个通道的;这只是说这个控台有多少个通道,不需要“根据接收芯片的不同来设置”,链路上的灯具获取自己需要的字段;

你这个是自己的应用,可以参考这个,也不必要完全相同了,比如你的应用后面最多只有10个灯,每台灯只要3个数据(以后不会升级了),那就只发30个数据,甚至起始码(字段0)l可以不为零来区分是否为自己的有效信号,等等

kevincoxee 发表于 2012-4-8 22:38:05

xiaowu191 发表于 2012-4-8 18:20 static/image/common/back.gif
请教真不敢当!

我上传一个资料《DMX512-A灯光控制数据传输协议》,里面第12页有提到:


谢谢你xiaowu同学,这么耐心帮我解答问题!

jetli 发表于 2012-4-10 21:09:42

多谢11楼资料,看看去。{:shocked:}

ppdd 发表于 2012-4-16 02:40:12

----Mark----

kevincoxee 发表于 2012-5-13 10:57:14

xiaowu191 发表于 2012-4-8 18:20 static/image/common/back.gif
请教真不敢当!

我上传一个资料《DMX512-A灯光控制数据传输协议》,里面第12页有提到:


xiaowu同学你好,我现在有点关于DMX512协议起始码的问题不是很明白,因此又来麻烦你了
我看了你提供的协议数据手册,觉得里面关于起始码部分虽然写了很多但是有些不是很清楚。我现在如果要发送一条数据链路(512个8位数据包),是不是最前面一定要加一个起始码呢?手册上所谓“零起始码”倒是是一种怎样的起始码,是不是就是相当于在512个数据的最前面再加上一个8位全部是0的数据包呢?如果我要是在这个数据包里用不是0的数据,是不是灯具就自动识别为含有调光亮度等级数据的起始码而不是“零起始码”了呢?

xiaowu191 发表于 2012-5-13 12:15:04



里面 14页开始有提到;


8.5 开始码
开始码是传输暂停结束标志之后的第一个字段(字段0),开始码具有标识分组中后续数据的功能。
8.5.1 零开始码
零开始码标识后续数据字段为无类型串行8比特信息。由零开始码标识的分组是在DMX512网络中发送的缺省分组。更早版本的标准假设零开始码分组只发送调光器类数据。实际上,零开始码分组也可用于更广泛类的设备,本标准认可这一事实。每个零开始码分组含有无格式数据或地址结构。设备使用分组中的数据必须知道数据在分组中的位置。
不保证所有零开始码分组被传递到所有的设备。用零开始码发送的数据应是这样一种类型的,分组丢失将不会严重影响设备的工作。因此,发送的数据应该是一个参数的当前数值,而不是去执行一个程序的命令。一旦将控制台配置为`一种特殊的应用,所有的零开始码分组将有相同的字段数。
8.5.2 调光器类数据
应该用零开始码分组发送调光器类数据。有效的调光器级别应该在0到255(十六进制00到FF)代表调光器控制输入。0值表示关闭调光器输出或最小,255表示调光器输出最大。调光器应该用0到255之间的DMX512数值做出响应。DMX512字段值和调光器输出之间的精确关系不在本标准范围规定之内。注意零开始码分组是DMX512网络发送的缺省分组,可能含有非调光器类数据的其它数据。
8.5.3 其它开始码
为了提供未来扩展和使用灵活性,DMX512增加了255个非零开始码(十进制的1到255,十六进制的01到FF),即备用开始码。需要通过DMX512数据链路发送私有信息,应该使用已经登记的备用开始码作为分组的开始。附件D保留了几个备用的开始码。
8.5.3.1 备用开始码更新间隔
一个DMX512发送端交替发送零开始码分组和备用开始码分组,零开始码分组至少每秒发送一次。
8.5.3.2 备用开始码分组的定时差
为了保证内嵌处理设备不丢失基本的备用开始码数据,应该降低更新备用开始码的最大速率。可采用下述一种方法。
1) 以比8.11节定义的最小定时还低的速率发送备用开始码分组,通过增加传输暂停到传输暂停之间的时间到需要的备用开始码分组字段数量的最小数值高10%。
2) 发送端可交替发送非基本的零开始码分组和备用开始码分组。
8.5.3.3 控制备用开始码分组的内嵌设备
DMX512处理设备或任何接收或重传DMX512的设备应根据手册声明其产品如何处理备用开始码分组。可接受的处理方法是:
1) 阻止所有的含有特殊备用开始码的分组。被阻止的开始码应该公布(也可以是所有的备用开始码)。
2) 通过所有的含有特殊备用开始码的未修改的分组。通过的开始码应该公布。
3) 处理所有的在分组中含有备用开始码的信息。应该足够详细地声明算法,允许用户来决定设备是否满足其需要。
DMX512 内嵌重新发送端应不通过具有特殊备用开始码的分组,而阻止其他含有同样的备用开始码,除非声明了处理算法。
8.5.4 处理开始码
除了内嵌处理设备以外的所有接收设备,都应处理开始码,而且要处理零开始码与备用开始码分组之间的差异。设备不应假设所有接收的分组都是零开始码分组而忽略处理开始码。

kevincoxee 发表于 2012-5-13 13:39:28

xiaowu191 发表于 2012-5-13 12:15 static/image/common/back.gif
里面 14页开始有提到;




谢谢xiaowu同学,我对这个概念理解加深了不少

llz0734 发表于 2012-6-29 10:38:22

学习了啊,但是我还是不懂,有个完整的程序能参考不?
页: [1]
查看完整版本: 请问有没有用过DMX512A协议做灯光控制的前辈在?