原创 max5307终于他妈的调试出来了,有程序。

2008-1-9 16:02 3186 4 4 分类: MCU/ 嵌入式

调试了好久终于调试出来了啊,原来罪魁祸首竟然是一个时钟的问题:


DAC0(uchar t)
 { uchar i;
   uint x,y;//控制转换的命令字节
   uint p_up;
   p_up=0xffff;
   EN138=1;
   A138=0;
   B138=0;
   //DA_CLK=1;//由于在下降沿输出,故先拉高
   delay(5);
   for(i=0;i<16;i++)
   {
   DA_DIN=(bit)(p_up&0x8000);//取最高位传送
   DA_CLK=1;
   delay(10); 
   DA_CLK=0;
   delay(10);
   p_up<<=1;
   }
   EN138=1;//将5307的CS端拉高,准备下次的数据输入.
   A138=1;
   B138=1;
   delay(10);
//********************************************以上将全部DA使能输出
   EN138=1;
   A138=0;
   B138=0;
   //DA_CLK=1;//由于在下降沿输出,故先拉高
   delay(5);
   for(i=0;i<16;i++)
   {
   DA_DIN=(bit)(dandc&0x8000);//取最高位传送
   DA_CLK=1;
   delay(10); 
   DA_CLK=0;
   delay(10);
   dandc<<=1;
   }
   EN138=1;//将5307的CS端拉高,准备下次的数据输入.
   A138=1;
   B138=1;
   delay(5);
 
   //**********************以上部分仅仅完成了数据的传送
 x=0x0010;
 x=x<<t;//用1选中要进行转换的通道.
 y=0xe000;//启动转换的命令
 y=y|x;
 EN138=1;
 A138=0;
    B138=0;
    //DA_CLK=1;//由于在下降沿输出,故先拉高
 delay(10);
   for(i=0;i<16;i++)
   {
   DA_DIN=(bit)(y&0x8000);//取最高位传送
   DA_CLK=1;
   delay(10); 
   DA_CLK=0;
   delay(10);
   y<<=1;
   }
   delay(10);
   EN138=1;
   A138=1;
   B138=1; 
 }   以上为正确的程序,呕心沥血啊。有看的就要回贴啊,哪怕是骂两句。


下面把错误的程序也贴出来,以供参考学习:


 DAC0(uchar t)
 { uchar i;
   uint x,y;//控制转换的命令字节
   uint p_up;
   p_up=0xffff;
   EN138=1;
   A138=0;
   B138=0;
   DA_CLK=1;//由于在下降沿输出,故先拉高
   delay(5);
   for(i=0;i<16;i++)
   {
   DA_DIN=(bit)(p_up&0x8000);//取最高位传送
   DA_CLK=0;
   delay(10); 
   DA_CLK=1;
   delay(10);
   p_up<<=1;
   }
   EN138=1;//将5307的CS端拉高,准备下次的数据输入.
   A138=1;
   B138=1;
   delay(10);
//********************************************以上将全部DA使能输出
   EN138=1;
   A138=0;
   B138=0;
   DA_CLK=1;//由于在下降沿输出,故先拉高
   delay(5);
   for(i=0;i<16;i++)
   {
   DA_DIN=(bit)(dandc&0x8000);//取最高位传送
   DA_CLK=0;
   delay(10); 
   DA_CLK=1;
   delay(10);
   dandc<<=1;
   }
   EN138=1;//将5307的CS端拉高,准备下次的数据输入.
   A138=1;
   B138=1;
   delay(5);
 
   //**********************以上部分仅仅完成了数据的传送
 x=0x0010;
 x=x<<t;//用1选中要进行转换的通道.
 y=0xe000;//启动转换的命令
 y=y|x;
 EN138=1;
 A138=0;
    B138=0;
    DA_CLK=1;//由于在下降沿输出,故先拉高
 delay(10);
   for(i=0;i<16;i++)
   {
   DA_DIN=(bit)(y&0x8000);//取最高位传送
   DA_CLK=0;
   delay(10); 
   DA_CLK=1;
   delay(10);
   y<<=1;
   }
   delay(10);
   EN138=1;
   A138=1;
   B138=1; 
 }  


两个程序中绿色的部分为不一样的地方,其实也就是时钟的下降沿的时间有没有延时的问题,由于DA转换和单片机部分用了光藕隔离所以才会出现这种需要延时的情况,如果没有隔离的话,完全可以不用延时,因为MAX5307的最高可以达到15MHZ的转换和数字传输频率。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条