求助-dac7742无结果输出?
想用dac7742y做一个高精度的锯齿波,可发现无波形输出。 按技术文档中的常规电路连接
Vss:-15v,Vcc:+15v,Vdd:5v .
时序 按 技术文档来操作:比如说写时序:
RW = 0;
DATA = XX;
CS = 0;
DELAY();
CS =1;
LDAC = 0;
RW = 1;
LDAC = 1;
LDAC = 0; 我用的单片机每个指令要1us。 求解释,为什么无输出!
你好,ldac仅仅是将input reg刷新到dac reg,所以在你完成数据写操作之后不用再置零。你可以尝试读操作,看是否通信成功。谢谢
按照您的说明我修改了下程序,可还是不行!要是能找到一个关于adc7742官方的样例程序就好了,我是新手,请告诉赐教!
你好,首先建议你在初始化da时进行复位操作,再次,尝试进行读操作,看数据是否写入,通过示波器能不能看下你的软件操作时序是否符合要求。最后,这个DA的建立时间是5us。LDAC的下降沿后需要至少5us才有输出。
你好!
请帮忙确认下几个问题
请问你使用什么处理器?
能否用示波器把各个信号抓出来?
你的时序有问题:
应该
RW = 0;
delay
CS = 0;
delay
data = XX;
delay
LDAC = 0;
delay
RW = 1;
delay
LDAC = 1;
delay
LDAC = 0;
另外,可以在网上找找seed的开发板带的DAC7744的参考代码
首先,不知道为什么,我不能对各位高手的答复直接进行回复,就是我点那个回复button没有反应。
我按照你们的提示对程序进行了适当的修改,但只能出部分波形。我用的是stc89c52单片机,这是一个开发板。
修改后的程序如下:
RW = 0;//写
delay();
CS = 0;
delay();
P3 = temp_H;//16位数据的高八位。
P0 = temp_L;//16位数据的低八位。
delay();
CS = 1; //这个是放这里吗?
delay();
LDAC = 0;
delay();
RW = 1;
delay();
LDAC = 1;
delay();
LDAC = 0;
/* (unsigned char) temp_H,temp_L的初值为255,temp_L是从255循环递减到0,当temp_L为0时,temp_H减1, */
此程序对应的波形如下:
(图1)
(图2)
现在问题就是波形不稳定,而且线性度太差,还不如8位的DAC出的来的波形好。不知道为什么?
后来,我修改程序:把数据的低八位(temp_L)(P3口)始终置为0,把数据的高八位(temp_H)(P0口)输入一个uchar变量,让它从255递减到0,循环。也就是如下改动:
delay();
P3 = 0x00; //数据的第八位 temp_L;
P0 = temp_H; //数据的高八位
delay();
出来的波形如下:
(图1)
(图2)
波形是干净了些,但是效果离目标还是差得太远。。
按照我这样修改的程序,是不是把16位的DAC当做8位的DAC来使用呢?
怎样才能做出一条高精度的锯齿波呢?
最早出不来波形,我按照各位高手给的提示,一上电就对DAC7742进行复位操作,然后就可以有波形输出了。
关于 seed的开发板带的DAC7744的参考代码,我正在寻找............................
如果你的指令执行时间是1us,那么并不需要这么多delay。只是LDAC下降沿之后需要delay到DAC的setting time。太多的delay会让你的波形像阶梯波。所以建议你用示波器抓图,按照写时序来对照。DAC的输出会有glitch,需要外部滤波。另外,按照手册Figure10,需要对ref滤波降噪。
我增加外部滤波 和 对ref滤波降噪后,16位的DAC(DATA从0增加到65535)输出波形如下图:
[
(图1)
波形效果还是不是很好哦。这几天头都大了?
增加滤波之后输出噪声明显得到改善。之所以阶梯波是因为延时太长了。你按照时序修改下delay了。
我现在是发现一个问题,就是DAC7742上面的时序很不准确。今天我改用 了一个1T的单片机。(12M晶振)
void dac16_write(void)
{
P0 = temp_L; // 低八位
P3 = temp_H; // 高八位
LDAC = 0; LDAC = 1;
} //改函数中完全没用延时。
我在主函数中 一上电就复位DAC7742,然后就设置 CS = 0; WR = 0;,之后就一直调用dac16_write()函数,输出的波形竟然还是和之前的一样。
观察波形 发现:波形分成15个阶梯,temp_H(数据的高八位)是从00到FF递增,感觉就是每增加16,就产生一个新的阶梯。数据的低八位根本就没作用!
你好,因为除了建立时间是5us,其余都小于100ns,你的指令周期接近1us,所以你删掉delay可能波形不会变,并不说明时序有问题。你能否单独测试低8位操作,将高8bit置0, 看看输出情况。
我试过呀,当我把高八位置零,低八位让它从255递减到0,循环。出来的波形就是一个直流。我开始担心是DAC7742芯片坏了,然后就换了一个DAC7742芯片,可还是一样。 我待会把这种情况下的波形图传上来!
我把高八位设置为0是,输出的波形为 DC10v(实际上是9.98v,有点小误差),波形如下:
当我把 高八位设置为255是,输出DC0v(实际测量为0.4v,这个误差之后在处理),波形如下:
。 现在就是发现,当高八位为某一个确定的值时,不管第八位怎么改变,输出的波形都不会有变化。竟然还是一个直流?
你好,由于DAC7742没有EVM,所以我也无法来做测试。现在请你帮忙做一个测试,按照手册13页所述。先RW=0,CS=0,LDAC=1,写0x00aa到输入寄存器,观察输出情况。再CS=1,LDAC=0,将输入寄存器刷新至DAC寄存器输出。然后RW=1,CS=0,读一读输入寄存器是多少
还是不行,
CS = 0;
RW = 0;//写
LDAC = 1;
P0 =0 ; // 低八位
P3 = 0Xaa; // 高八位
delay(); // 这时输出是5v;
//后来在上面的基础上增加以下程序:
CS = 1;
LDAC = 0;
delay(); // 这时输出为3.67v
//在后来,我增加了数据回读程序,把读出的数据放在数码管上显示。
RW = 1;
CS = 0;
hda = P3; // hda为读出数据的高八位
lda = P0; // lda为读出数据的低八位
delay();
//数码管上 显示aa00, 表示数据正确写入DAC register。 我后来也改变过写入DAC register的数据,比如写入0xab52,数码管上也能显示 ab52! 要崩溃了,找不出问题。
楼主能不能把你的 hda lda 累加的程序贴出来;
参考:
unsigned int dat = 0;
dat ++;
P3 = dat>>8;
P0 = dat ;
你的问题在于时序,和滤波、电源都没有关系。最好能够用示波器或者逻辑分析仪,对照时序表检查时序。
我在之前的一些帖子中有贴出 详细的程序,我也是怀疑程序的问题,可一直没解决。我的qq是924401092,希望和您讨论下!
还是不行,
CS = 0;
RW = 0;//写
LDAC = 1;
P0 =0 ; // 低八位
P3 = 0Xaa; // 高八位
delay(); // 这时输出是5v;
//后来在上面的基础上增加以下程序:
CS = 1;
LDAC = 0;
delay(); // 这时输出为3.67v
//在后来,我增加了数据回读程序,把读出的数据放在数码管上显示。
RW = 1;
CS = 0;
hda = P3; // hda为读出数据的高八位
lda = P0; // lda为读出数据的低八位
delay();
//数码管上 显示aa00, 表示数据正确写入DAC register。 我后来也改变过写入DAC register的数据,比如写入0xab52,数码管上也能显示 ab52! 要崩溃了,找不出问题。
你好,DAC register被正确写入,结果还是不对应。请问你DAC的购买渠道是什么?
我是在 网上电子商城买的,这个难道会有问题?
你好,请按照正规渠道购买TI芯片,只有正规渠道的芯片才有质量保证。在前期实验可以在TI官网上申请样品,后期可通过TI授权的代理商渠道购买芯片。请参考http://www.ti.com.cn/general/cn/docs/gencontent.tsp?contentId=24957
楼主如果可以用逻辑分析仪把数据时钟读出来,检查下时序,这种问题多是时序的缘故。