请教!!关于DAC0832在proteus里的仿真输出的一个问题。。 【恢复】
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_524505.jpg输出的波形! (原文件名:BC1C_TC(6B
这里是文件ourdev_524506.rar(文件大小:56K) (原文件名:NO6.rar)
问题是这样的!
我想要输出17级的一个波形。这好像是没有问题了!!
但关键是:
1,波形输出和我的程序基本不一致。虽然说总体看起来是渐低的。但细节问题太大了!!
2,在一个模拟量跳至另一个模拟量时。会有一个低的1-2uS的脉冲。这个我不知道对不对。但感觉上很别扭。虽然说理论上是0832不可能线形输出。但这也太不线形了!
17级的电压跳变应该也是像楼梯一样的嘛,难道说每一级的楼梯还要打个柱子撑起来???
0832的输出是这样子的吗??还是说我的电路有问题??
这两点还真是希望高人来解解惑啊!!附上文件!!在此先行谢谢了!!! //这里是源文件!!!!谢谢了1!
#include<reg52.h>
#include<bin.h>
#include<intrins.h>
#include<absacc.h>
sbit cs=P2^7;
sbit wr=P3^6;
void init()
{
cs=0;
}
void delay(uchar z)
{
while(z--);
}
void main()
{
while(1)
{
init();
delay(20);
P0=0xff;
wr=0;
_nop_ ;
wr=1;
delay(20);
P0=0xef;
wr=0;
_nop_ ;
wr=1;
delay(20);
P0=0xdf;
wr=0;
_nop_ ;
wr=1;
delay(20);
P0=0xcf;
wr=0;
_nop_ ;
wr=1;
delay(20);
P0=0xbf;
wr=0;
_nop_ ;
wr=1;
delay(20);
P0=0xaf;
wr=0;
_nop_ ;
wr=1;
delay(20);
P0=0x9f;
wr=0;
_nop_ ;
wr=1;
delay(20);
P0=0x8f;
wr=0;
_nop_ ;
wr=1;
delay(20);
P0=0x7f;
wr=0;
_nop_ ;
wr=1;
delay(20);
P0=0x6f;
wr=0;
_nop_ ;
wr=1;
delay(20);
P0=0x5f;
wr=0;
_nop_ ;
wr=1;
delay(20);
P0=0x4f;
wr=0;
_nop_ ;
wr=1;
delay(20);
P0=0x3f;
wr=0;
_nop_ ;
wr=1;
delay(20);
P0=0x2f;
wr=0;
_nop_ ;
wr=1;
delay(20);
P0=0x1f;
wr=0;
_nop_ ;
wr=1;
delay(20);
P0=0x0f;
wr=0;
_nop_ ;
wr=1;
delay(20);
P0=0x00;
wr=0;
_nop_ ;
wr=1;
delay(255) ;
}
} 此贴over!!
还是谢谢了!! 说明:
经过反复研究Datasheet。确实是我的电路有问题。应该out1接一精密电压源。Rfb接VCC。out2接地。
此时从Vref引脚构成电压模式输出。
输出最高电压就是out1接入的精密参考电压。地电平是out2接入的地电平。输出很线性。波形看起来很好!!
这是单电源电路的用法!!
双电源在网上能看到一大堆的。我就不说了!!!
DAC0832我们坛子里很少人用的么????
一天了也没有人回复哪怕一个字啊!!!
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_525478.jpg
(原文件名:D7]CFGG)YYPLC2W94VGC~]P.jpg)
本贴被 xsw810810 编辑过,最后修改时间:2008-12-02,10:35:32. 回复【2楼】xsw810810
-----------------------------------------------------------------------
程序能不能用一个函数代替比如:
P0=dat;
wr=0;
_nop_ ;
wr=1;
delay(20);
dat--;
if(dat==0)
dat=0xff;我再用protue仿真时电路连接爷爷道这个问题,但好像很少有人解答。 呵呵我也是用这方法做个信号发生器的 一开始是也是你这种方法 搞了半天郁闷死了 幸亏有你的方法我才搞定了 谢谢你啊 我也是电子爱好者 有机会相互学习学习。 "程序能不能用一个函数代替比如:"
why? do you want to incur the unnecessary overhead associated with the function call?
all you need to do is to write the value to the port where d0..7 are connected.
like
#define dac08_write(val){DAC08_DATA_PORT = (val);}
if your _CS pin is permanently tied down, you just need
dac08_write(val); //output val on dac08
to write a value on the dac.
if your _CS pin is controlled by the mcu, you need to lower / raise it:
dac08_select(DAC08_CTRL_CS); //lower the cs pin
dac08_write(val); //output the value
dac08_deselect(DAC08_CTRL_CS); //raise the cs pin
页:
[1]