xsw810810 发表于 2008-12-1 15:06:11

请教!!关于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的输出是这样子的吗??还是说我的电路有问题??

这两点还真是希望高人来解解惑啊!!附上文件!!在此先行谢谢了!!!

xsw810810 发表于 2008-12-1 15:07:40

//这里是源文件!!!!谢谢了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) ;



   }

 

        

}

xsw810810 发表于 2008-12-2 10:32:05

此贴over!!

还是谢谢了!!

xsw810810 发表于 2008-12-2 10:30:58

说明:

经过反复研究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.

joeskybing 发表于 2011-5-18 14:21:15

回复【2楼】xsw810810
-----------------------------------------------------------------------

程序能不能用一个函数代替比如:
       P0=dat;
      wr=0;
      _nop_ ;
      wr=1;
      delay(20);
       dat--;
      if(dat==0)
      dat=0xff;我再用protue仿真时电路连接爷爷道这个问题,但好像很少有人解答。

a403588784 发表于 2011-5-24 22:42:38

呵呵我也是用这方法做个信号发生器的    一开始是也是你这种方法   搞了半天郁闷死了       幸亏有你的方法我才搞定了   谢谢你啊   我也是电子爱好者   有机会相互学习学习。

millwood0 发表于 2011-5-25 01:43:37

"程序能不能用一个函数代替比如:"

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]
查看完整版本: 请教!!关于DAC0832在proteus里的仿真输出的一个问题。。 【恢复】