采用ATMEGA48的DMX512解码器,终于搞定了,发贴庆祝一下
在网上搜到的DMX512都是英文的,看的很吃力,最近要做这个洗墙灯,硬着头皮上,结果原来只是一个串行传输协议而已,一连传送n个数据(n<512),解码器接受到这些数据后,再判断做出相应的动作。http://cache.amobbs.com/bbs_upload782111/files_7/armok01162198.jpg
http://cache.amobbs.com/bbs_upload782111/files_7/armok01162199.jpg
http://cache.amobbs.com/bbs_upload782111/files_7/armok01162200.jpg 恭喜!
你的地址是用键盘输入吗?
一块板可带几个灯?
接收全部用中断还是检测到BREAK后才开中断? 对,上面有三个按键UP DOWN OK就是用来输入地址的。
一块板是按12通道设计的。每个通道的数据处理后,送下位机执行。
接收全部用中断,而且带信号反极性检测功能。本来想采用检测到BREAK后才开中断的,这样太耗资源,所以直接全部用中断,调试时用数码管显示采集到的数据,很稳定,从来没有接受错误的现象。
与下位机的通讯就麻烦了,因为MEGA48的引脚资源用光了,只有自己编了一个三线的串行传输协议,呵呵,下次再做,用MEGA16,这样就可以用SPI通讯了,比较通用。 你的板没有用晶振,250KBPS搞得准吗?
信号反极性检测是什么意思? 楼主不是用MEGA48直接控制LED吗? 好像一般是按照16个通道一个灯,我只做过发送信号
接收端的Mark如果都按套路来还是方便,Break就不重要了,就是停止位 MEGA48,采用8M内置RC振荡器,在熔丝位里去掉八分频,是可以达到250KBPS的传输速率的.
反极性检测是指如果RS485送来的信号线不是AB,而是BA(我不知这样描述是否正确),从75LBC184出来的信号正好完全反向,所以我在程序里增加了识别这一现象的功能,如果反向的话,则不从网络读取任何的信号.
不是用MEGA48直接控制LED的,因为我做的这个只是将我需要的通道数据从RS485网络里接受过来,然后它还要将数据传送到下位机去执行的,我下位机是采用了TINY26.由TINY26对LED进行控制. 具体几个通道一个灯,是要看实际应用状况的.
我打算用三个通道来控制一组灯(RGB),最近正在构思中,呵呵
DDB_21IC说的没错,对我这板来说,比较重要的两个信号就是:MARK和停止位,不过BREAK还是很重要,因为我是用BREAK来产生帧错误的中断,然后再开始确认何时为起点. 具体几个通道一个灯,是要看实际应用状况的.
我打算用三个通道来控制一组灯(RGB),最近正在构思中,呵呵
DDB_21IC说的没错,对我这板来说,比较重要的两个信号就是:MARK和停止位,不过BREAK还是很重要,因为我是用BREAK来产生帧错误的中断,然后再开始确认何时为起点.
我这板有个缺陷就是没有采用光电隔离,因为手头没有高速光耦,而且这块板对体积要求比较高,控制传输部分干扰比较小,就先这样试一下,将来还是要考虑光隔的. 采用8M内置RC振荡器做250KBPS的传输速率,应该不是很稳定吧.特别是量产的时候,容易出问题. 还可以,至少手里的几个样板是没问题的.我想有时间的话,做个冷热循环,试一下不同温度下的可靠性. 可否上传一份DMX512协议? 我是做LED 的,能否给个参考代码,或者交换下程序也可。 点击此处打开armok01171408.xls 我传了个详细的DMX512协议说明,希望对大家有所帮助,欢迎交流! 不错 学习学习 哈哈 250KBPS是有点快 你用什么检测的BREAK,错误帧还是RXB8 QQ:1191474325
提供DMX512产品方面的技术支持。 回复【楼主位】jswanglei
-----------------------------------------------------------------------
请教大家一个问题,我用的PIC16F877A的单片机做512解码器,内部的指令频率是5M赫兹,在连接到控制台后,出现接受不到数据,而且程序还跑乱了,不知道是不是单片机频率太低的原因,造成的?
我用的是全部中断接受的,RX9D来判断512数据包的复位信号的。 正需要这方面的资料。{:smile:} lsls 发表于 2010-8-1 08:51 static/image/common/back.gif
QQ:1191474325
提供DMX512产品方面的技术支持。
有简单的例程么
页:
[1]