DAC转换的出现的一些问题,烦请帮忙...
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,原理图具体请看附件,
仔细看了一下你的代码 我觉得是在writeDAC这个函数你用了if
那在while循环中如果if不成立就不会去写这个data 你给了两个if只能说明你的第一个if没问题
第二个if条件满足呢
看了你的原理图 你如果想让led一亮一灭 这个writeDAC函数里面应该用while而不是if zhangmangui 发表于 2013-8-31 17:29 static/image/common/back.gif
仔细看了一下你的代码 我觉得是在writeDAC这个函数你用了if
那在while循环中如果if不成立就不会去写这 ...
非常感谢,
回去试试看看,再回复你结果! zhangmangui 发表于 2013-8-31 17:29 static/image/common/back.gif
仔细看了一下你的代码 我觉得是在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很亮)。为什么???
帮忙解释解释,万分感谢!!!!!!!
郁闷。。。。。。怎么没有人说说的。。。。 :L又没人!!!!! tianwen_4524 发表于 2013-9-6 16:11 static/image/common/back.gif
郁闷。。。。。。怎么没有人说说的。。。。
出差刚回来不好意思 望理解 zhangmangui 发表于 2013-9-7 11:28 static/image/common/back.gif
出差刚回来不好意思 望理解
哦,没关系,有空记得帮看看 tianwen_4524 发表于 2013-9-5 16:26 static/image/common/back.gif
试了,如果将if改成while,确实是可以,但是在WriteDAC为两个if时也可以的,但一个if就不能按照我输入的数 ...
现在我就怀疑AD转换的吸流是一定的 你的0x200转换的电压越低 应该流过的电流越小
但是吸流很小那也是不怎么亮 zhangmangui 发表于 2013-9-9 11:11 static/image/common/back.gif
现在我就怀疑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本身有关?????
tianwen_4524 发表于 2013-9-9 11:36 static/image/common/back.gif
假如用while,函数如下,我定义一个K,函数调用前K=0,调用后,查看K值为2,也就是说还是要连续执行了两次 ...
这就有可能是DA芯片的问题 你最好看看它的时序
还有你的延时最好确定个时间 zhangmangui 发表于 2013-9-9 18:43 static/image/common/back.gif
这就有可能是DA芯片的问题 你最好看看它的时序
还有你的延时最好确定个时间 ...
好 !非常感谢!!!!
页:
[1]