|
根据NXP官方的DMX512例程做了块开关量控制板,基本照搬了官方原图,仅有的变化是通过573拓展了3*8输出,灌入原版例程,工作不正常,表现为,上位机发送修改10次信号,控制板只正确反映1、2次,有时候出来的是乱码码,大部分时候无输出。
已经寻求的途径有:
1、上位机(512控台)发送的信号不正常——否,控制其它设备是正常的。
2、线路板接受的信号受到干扰——否,跳过光耦隔离,换485芯片,甚至跳过485将控台232信号直接连到2103串口脚,均无效果,故障和原来一样。
3、控制板芯片不良——否,同样的器件焊第二块板,故障一样。
4、控制板工作异常——否,测试流水灯等程序工作一切正常。
5、2103波特率设置或配置问题?不确定,用的是nxp官方例程,只是修改573部分增加了两行代码而已。
实在没辙了,知道这里藏龙卧虎,腆着脸上来求教
附:
![](http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_667054DQ3G63.jpg)
官方图 (原文件名:官方图.jpg)
改造后的控制板图ourdev_667055QLP93A.pdf(文件大小:92K) (原文件名:2011.08.01.pdf)
源码仅仅改动3处因为增加了573扩展,其它完全照搬:
#include <LPC2103.H>
#include "main.h"
#define DMX_NR 1 // My own DMX slave numer
#define LE0 (1<<4) ///////////////////////////////////////////////////////////源码改动1
//void SetOutReport(unsigned char *rep) // OutReport received from USB host
//{
// IOPIN = (IOPIN & 0xFF00FFFF) | (DMX_buf[1] << 16);
//}
//const unsigned long CRP __at(0x1FC);
const unsigned long CRP __attribute__((at(0x1FC))) = 0xFFFFFFFF;
void delayms(unsigned int count)
{
unsigned int i,j;
for(i=0;i<count;i++)
for(j=0;j<120;j++);
}
int main (void)
{
UART1_Init(250000);
T1_Init();
IODIR |= 0x00FF0000|LE0; // LEDs at P0.16 - 23 ///////////////////////源码改动2
IOSET |=LE0|0X00FF0000; /////////////////////////源码改动3
while(1)
{
if (f_200ms)
{
f_200ms = 0;
IOPIN = (IOPIN & 0xFF00FFFF) | (DMX_buf[DMX_NR] << 16);
}
}
}
NXP官方源代码包ourdev_667057L9Y6PC.rar(文件大小:62K) (原文件名:DMX-SLAVE.rar)
最后感谢关注这个问题的所有同学! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|