yerainyang 发表于 2012-10-31 20:36:23

请教DMX512转SPI问题

手头有个小项目,调试的时候发现一个问题,尝试了很多次还是没有解决问题。
功能是这样的,接收DMX512信号,转成SPI信号发送给74HC595驱动8个通道的LED。
我的思路是接收DMX512串口信号后,将属于自己的数据保存成数组DMX_Data.在主函数中,将收到的灰度数据计算,并SPI发送。发送255个数据为一个循环。
在调试的时候,当灰度值低时出现驱动灯光明显感觉闪烁。无论我怎么尝试,只能做到令闪烁不明显。但是仍然存在。
部分代码如下:
void main(void)
{
init_device();
while(!)
{
if(UART_SPI_Flg==1) //串口接收到DMX512数据标志
{

   SPI_Data=0;
   for(i=0;i<8;i++)
   {
    if(Pcount<DMX_Data) //Pcount为计数值,0-255.与DMX_Data灰度值比较,可计算得到255个数据。
    {
   SPI_Data|=FivState;   FivState数组为{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}
    }
   }
   SPI_Transmit(SPI_Data);
   Pcount+=1;
   if(Pcount==256)
   {
    Pcount=0;
   }
}
}
}
void spi_init(void)
{
SPCR = 0x51; //setup SPI
SPSR = 0x00; //setup SPI
}
void SPI_Transmit(unsigned char d8)
{
SPI_LATL;
SPDR=d8;
while(!(SPSR&(1<<SPIF)));
SPI_LATH;
}
SPI发送与计算是在主循环中,DMX接收为串口中断。用示波器测试595输出的频率为200HZ左右。感觉思路应该是对的呀,为什么会出现闪烁呢。没有串口中断,只做SPI输出不会闪烁。想不明白了。特来坛子里请求帮助。
页: [1]
查看完整版本: 请教DMX512转SPI问题