一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 3817|回复: 14

[51单片机] 有了解仿真的吗?问个DAC转换问题

[复制链接]
发表于 2015-3-13 11:48 | 显示全部楼层 |阅读模式
请知道的DX指点一二。下图的仿真为何DAC0832 的输出端IOUT1无输出??程序时郭天祥那个最基础的DAC转换程序

#include<reg52.h>
sbit csda=P3^2;  
sbit wr=P3^6;

void main()
{
csda=0;
wr=0;
P0=0xff;
while(1);
}
无标题.jpg
发表于 2015-3-15 14:04 | 显示全部楼层
IOUT 这要加个运放,你去看下dac0832的pdf
回复

使用道具 举报

 楼主| 发表于 2015-3-15 16:05 | 显示全部楼层
hzmsn 发表于 2015-3-15 14:04
IOUT 这要加个运放,你去看下dac0832的pdf

加运放貌似没什么道理,郭天祥的视频教程在讲D/A转换这个IC以及我买的C51B板子上这个IOUT1输出都没加运放呀?在例程里当数据端都为1时(即程序里被赋值0xff),输出端IOUT1是参照电压5V,所以完全可以驱动发光管的(C51板子上可以运行上述例程,发光管亮,仅是在仿真里不能实现,我想知道为何仿真不行)
回复

使用道具 举报

发表于 2015-3-15 22:12 | 显示全部楼层
本帖最后由 aa7812 于 2015-3-15 22:13 编辑

没用过DAC0832这个芯片, 不了解具体如何驱动, 有几点意见参考
<1> VREF 没有外接5V, 参考电压一般需要外接5V
<2> 通常情况下, 芯片接收CPU 的数据过程:     片选信号(csda=0)--->数据放在总线上(p0=??)   --->时钟驱动(wr=0, wr=1,一低一高信号),
      时钟驱动一般需要一低一高信号,上述程序只有低电平, 并且数据没有提前给出。另外,DAC芯片驱动不了LED,要用万用表测电压

回复

使用道具 举报

发表于 2015-3-16 10:07 | 显示全部楼层
看电路图应该是单缓存工作方式,不过程序有问题,应该是先送片选,再送P0口的DATA,最后再触发写缓存
回复

使用道具 举报

 楼主| 发表于 2015-3-16 17:48 | 显示全部楼层
aa7812 发表于 2015-3-15 22:12
没用过DAC0832这个芯片, 不了解具体如何驱动, 有几点意见参考
VREF 没有外接5V, 参考电压一般需要外接 ...

谢谢关注。但你说的两点应该不会是的。一.在虚拟仿真里我的电源参考 端是接在电源上的(图片DAC0832的6脚有标注);2.程序没问的,因为在我的C51板子上运行正常(可以驱动LED显示--受控)
回复

使用道具 举报

 楼主| 发表于 2015-3-16 17:50 | 显示全部楼层
sln.1550 发表于 2015-3-16 10:07
看电路图应该是单缓存工作方式,不过程序有问题,应该是先送片选,再送P0口的DATA,最后再触发写缓存

程序有问题?可是程序在我的C51板子上运行正常啊,应该程序没问的(可以驱动LED显示--受控)
回复

使用道具 举报

发表于 2015-3-16 23:13 | 显示全部楼层
ylwwp 发表于 2015-3-16 17:50
程序有问题?可是程序在我的C51板子上运行正常啊,应该程序没问的(可以驱动LED显示--受控)

仿真程序的逻辑可能要求更严格点
回复

使用道具 举报

发表于 2015-3-17 11:17 | 显示全部楼层
本帖最后由 aa7812 于 2015-3-17 11:18 编辑

DAC0832 输出正常,不能说程序没"问题",  查了一下资料,看驱动波形图片, C51单片机开机复位时,也许刚好符合初始状态,所以"写芯片" 只有一个低电平,也成功了, 仿真程序没看到 "从高到低" 的信号,当然不会输出。 TM截图20150317110806.jpg



回复

使用道具 举报

 楼主| 发表于 2015-3-17 12:47 | 显示全部楼层
aa7812 发表于 2015-3-17 11:17
DAC0832 输出正常,不能说程序没"问题",  查了一下资料,看驱动波形图片, C51单片机开机复位时,也许刚好符 ...

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit csda=P3^2;
sbit wr=P3^6;
void delay_50us(uint t);


void main()
{
csda=0;
P0=0xff;
delay_50us(10);  
wr=0;
while(1);   
}

void delay_50us(uint t)
{
uchar j;   
for(;t>0;t--)   
  for(j=19;j>0;j--);  
}

按上述如此依然不能仿真,这基本都是按时序走的了。你们应该实际用proteus仿真走出来再说那不对,只用资料说不通本身就是我提出的疑问,我就是按资料出不来(而实际C51板又能出来)才在这提问的。
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-10-31 10:23 , Processed in 0.037455 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表