想用dac7742y做一个高精度的锯齿波,可发现无波形输出。 按技术文档中的常规电路连接
RW = 0;
DATA = XX;
CS = 0;
DELAY();
CS =1;
LDAC = 0;
RW = 1;
LDAC = 1;
LDAC = 0; 我用的单片机每个指令要1us。 求解释,为什么无输出!!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
你好!
请帮忙确认下几个问题
请问你使用什么处理器?
能否用示波器把各个信号抓出来?
你的时序有问题:
应该
RW = 0;
delay
CS = 0;
delay
data = XX;
delay
LDAC = 0;
delay
RW = 1;
delay
LDAC = 1;
delay
LDAC = 0;
首先,不知道为什么,我不能对各位高手的答复直接进行回复,就是我点那个回复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, */
现在问题就是波形不稳定,而且线性度太差,还不如8位的DAC出的来的波形好。不知道为什么???
我现在是发现一个问题,就是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芯片,可还是一样。 我待会把这种情况下的波形图传上来!!
你好,由于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 ;
你的问题在于时序,和滤波、电源都没有关系。最好能够用示波器或者逻辑分析仪,对照时序表检查时序。
还是不行,
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! 要崩溃了,找不出问题。
你好,请按照正规渠道购买TI芯片,只有正规渠道的芯片才有质量保证。在前期实验可以在TI官网上申请样品,后期可通过TI授权的代理商渠道购买芯片。请参考http://www.ti.com.cn/general/cn/docs/gencontent.tsp?contentId=24957