打印

DAC转换的出现的一些问题,烦请帮忙...

[复制链接]
1809|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

void main(void)
{
InitSysCtrl();   //初始化系统
DINT;     //关中断
IER = 0x0000;
IFR = 0x0000;
InitPieCtrl();   //初始化PIE控制寄存器
InitPieVectTable();  //初始化PIE参数表

EALLOW;
GpioMuxRegs.GPFMUX.bit.SPICLKA_GPIOF2=1;
GpioMuxRegs.GPFMUX.bit.SPISIMOA_GPIOF0=1;
GpioMuxRegs.GPFMUX.bit.SPISOMIA_GPIOF1=1;
GpioMuxRegs.GPFMUX.bit.SPISTEA_GPIOF3=1;
EDIS;

    Init_Spi();    //初始化SPI ,
   while(1)
{   
  WriteDAC(0x200);
  delay(500000);
  WriteDAC(0x500);
  delay(500000);
}

}  
void WriteDAC(unsigned data)
{

if(Spi_TxReady() == 1)
  SpiaRegs.SPITXBUF = data;
//delay(5000);
//if(Spi_TxReady() == 1)
// SpiaRegs.SPITXBUF = data;
//delay(5000);
//if(Spi_TxReady()==1)
// SpiaRegs.SPITXBUF=data;
//delay(5000);
}

void delay(unsigned long t)
{ Uint16 i;
while(t-->0)
       for(i=0;i<2;i++);
我想问的是,如果函数void WriteDAC(unsigned data)为这样,
void WriteDAC(unsigned data)
{
     if(Spi_TxReady() == 1)
           SpiaRegs.SPITXBUF = data;
}

,LED只显示0X200电压的亮度,并且保持在0X200的电压(LED的亮度不变).

但如果函数void WriteDAC(unsigned data)为这样,
void WriteDAC(unsigned data)
{
     if(Spi_TxReady() == 1)
           SpiaRegs.SPITXBUF = data;
    if(Spi_TxReady() == 1)
           SpiaRegs.SPITXBUF = data;
}
LED才出现一亮(0x200电压值)一暗(0x500电压值),不知道具体是什么原因,想不通为什么,烦请高手解释解释,万分感谢!!!!
      
            注:我的DSP为TMS320F2812,DAC转换的IC为TLV5616,原理图具体请看附件, DSP2812学习板原理图.pdf (1.13 MB)



  

     

相关帖子

沙发
zhangmangui| | 2013-8-31 17:29 | 只看该作者
仔细看了一下你的代码   我觉得是在writeDAC这个函数  你用了if
那在while循环中如果if不成立就不会去写这个data   你给了两个if只能说明你的第一个if没问题
第二个if条件满足呢   
看了你的原理图   你如果想让led一亮一灭    这个writeDAC函数里面应该用while  而不是if

使用特权

评论回复
板凳
tianwen_4524|  楼主 | 2013-9-4 10:21 | 只看该作者
zhangmangui 发表于 2013-8-31 17:29
仔细看了一下你的代码   我觉得是在writeDAC这个函数  你用了if
那在while循环中如果if不成立就不会去写这 ...

非常感谢,
回去试试看看,再回复你结果!

使用特权

评论回复
地板
tianwen_4524|  楼主 | 2013-9-5 16:26 | 只看该作者
zhangmangui 发表于 2013-8-31 17:29
仔细看了一下你的代码   我觉得是在writeDAC这个函数  你用了if
那在while循环中如果if不成立就不会去写这 ...

试了,如果将if改成while,确实是可以,但是在WriteDAC为两个if时也可以的,但一个if就不能按照我输入的数字量转换,如,在一个if时:
我的转换是这样,
while(1)
{WriteDAC(0x200);
delay(500000);
WriteDAC(0x500);
delay(500000);
}
只能得到0x200转换的电压(LED很亮),而得不到0x500转换的电压(LED很暗),为什么????

但我的转换是这样,
while(1)
{WriteDAC(0x500);
delay(500000);
WriteDAC(0x200);
delay(500000);
}
只能得到0x500转换的电压(LED很暗),而得不到0x200转换的电压(LED很亮)。为什么???
帮忙解释解释,万分感谢!!!!!!!

使用特权

评论回复
5
tianwen_4524|  楼主 | 2013-9-6 16:11 | 只看该作者
郁闷。。。。。。怎么没有人说说的。。。。

使用特权

评论回复
6
tianwen_4524|  楼主 | 2013-9-7 09:23 | 只看该作者
:L又没人!!!!!

使用特权

评论回复
7
zhangmangui| | 2013-9-7 11:28 | 只看该作者
tianwen_4524 发表于 2013-9-6 16:11
郁闷。。。。。。怎么没有人说说的。。。。

出差刚回来  不好意思   望理解

使用特权

评论回复
8
tianwen_4524|  楼主 | 2013-9-9 10:48 | 只看该作者
zhangmangui 发表于 2013-9-7 11:28
出差刚回来  不好意思   望理解

哦,没关系,有空记得帮看看

使用特权

评论回复
9
zhangmangui| | 2013-9-9 11:11 | 只看该作者
tianwen_4524 发表于 2013-9-5 16:26
试了,如果将if改成while,确实是可以,但是在WriteDAC为两个if时也可以的,但一个if就不能按照我输入的数 ...

现在我就怀疑  AD转换的吸流是一定的   你的0x200转换的电压越低   应该流过的电流越小  
但是吸流很小  那也是不怎么亮

使用特权

评论回复
10
tianwen_4524|  楼主 | 2013-9-9 11:36 | 只看该作者
zhangmangui 发表于 2013-9-9 11:11
现在我就怀疑  AD转换的吸流是一定的   你的0x200转换的电压越低   应该流过的电流越小  
但是吸流很小   ...

假如用while,函数如下,我定义一个K,函数调用前K=0,调用后,查看K值为2,也就是说还是要连续执行了两次!
void WriteDAC(unsigned data)
{
     while(Spi_TxReady() == 1)
           SpiaRegs.SPITXBUF = data;
           k++;
}
假如我的WriteDAC函数为如下,一个if,但我的循环函数为这样,请看如下while(1)函数,结果照样能实现一亮(得到0x500的模拟电压)一暗(得到0x200的模拟电压)
void WriteDAC(unsigned data)
{
     if(Spi_TxReady() == 1)
           SpiaRegs.SPITXBUF = data;
}
while(1)
{    WriteDAC(0x200);
     WriteDAC(0x200);
    delay(500000);
    WriteDAC(0x500);
     WriteDAC(0x500);
    delay(500000);
}
请教:不知是不是与TLV5156的ic本身有关?????

使用特权

评论回复
11
tianwen_4524|  楼主 | 2013-9-9 11:40 | 只看该作者

使用特权

评论回复
12
zhangmangui| | 2013-9-9 18:43 | 只看该作者
tianwen_4524 发表于 2013-9-9 11:36
假如用while,函数如下,我定义一个K,函数调用前K=0,调用后,查看K值为2,也就是说还是要连续执行了两次 ...

这就有可能是DA芯片的问题    你最好看看它的时序
还有你的延时  最好确定个时间  

使用特权

评论回复
13
tianwen_4524|  楼主 | 2013-9-10 09:38 | 只看该作者
zhangmangui 发表于 2013-9-9 18:43
这就有可能是DA芯片的问题    你最好看看它的时序
还有你的延时  最好确定个时间   ...

好 !非常感谢!!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

236

帖子

0

粉丝