BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / circuit / #17428同步于 2011/6/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖

有没有人用过DAC7512的芯片?

Moster
2011/6/4镜像同步16 回复
我们现在使用了这个芯片进行DA转换,但是下了程序之后,芯片无法输出电压。。。求助!
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
UZ机器人#1 · 2011/6/4
什么程序啊…… 【 在 Moster (Moster_nb) 的大作中提到: 】 : 我们现在使用了这个芯片进行DA转换,但是下了程序之后,芯片无法输出电压。。。求助!
Moster机器人#2 · 2011/6/4
【 在 UZ 的大作中提到: 】 : 什么程序啊…… : 【 在 Moster (Moster_nb) 的大作中提到: 】 : : 我们现在使用了这个芯片进行DA转换,但是下了程序之后,芯片无法输出电压。。。求助! : ................... 我把程序发您站内了···现在的问题是我们无法证明芯片是否工作。。。求指导呀!
UZ机器人#3 · 2011/6/4
贴在这里吧,我没用过52单片机?我从你代码里猜测的。 你是移植的还是哪里来的代码?总不能一上来就用吧。 【 在 Moster (Moster_nb) 的大作中提到: 】 : 我把程序发您站内了···现在的问题是我们无法证明芯片是否工作。。。求指导呀!
Jerryyx机器人#4 · 2011/6/5
这种没头没脑的问题最让人凌乱了。。。
Moster机器人#5 · 2011/6/5
#include <reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char sbit DAC_SYNC=P3^3; sbit DAC_SCLK=P3^1; sbit DAC_DIN=P3^0; Delay_us() { //_nop_();_nop_();_nop_();_nop_();_nop_();// int x,y; for(x=0; x <1000; x++) { for(y= 100; y > 0; y--) { _nop_(); } } } void send(uint dacdata) { uint i,dach,dacl,dacsend,text; text = dacdata / 256; dacl = dacdata % 256; //DAC7512 输入 数字量 低字节 if(text&0x30==0) dach = text; //DAC7512 输入 数字量 高字节 else {text=text&0x0f; dach= text; } DAC_SCLK = 0; //下降沿 //****************************发送数据(高字节)给DAC7512 for(i=0;i<8;i++) { //******************** dacsend = dach & 0x80; if(dacsend == 0x80) DAC_DIN=1; else DAC_DIN=0; dach = dach << 1; //******************** DAC_SCLK = 1; //下降沿 Delay_us(); DAC_SCLK = 0; } //****************************发送数据(低字节)给DAC7512 DAC_SCLK = 0; //下降沿 for(i=0;i<8;i++) { dacsend = dacl & 0x80; if(dacsend == 0x80) DAC_DIN=1; else DAC_DIN=0; dacl = dacl << 1; //******************** DAC_SCLK = 1; //下降沿 Delay_us(); DAC_SCLK = 0; } } main(void) { DAC_SYNC = 1; //SYNC 置高电平, 并至少保持 33ns Delay_us(); DAC_SYNC = 0; //启动 写周期 while(1) { send(0x8888); } } 我们看到网上的一个程序,之后改的。。不是直接用的。。。我觉得逻辑没问题的呀。。。
Moster机器人#6 · 2011/6/5
【 在 UZ 的大作中提到: 】 : 贴在这里吧,我没用过52单片机?我从你代码里猜测的。 : 你是移植的还是哪里来的代码?总不能一上来就用吧。 : 【 在 Moster (Moster_nb) 的大作中提到: 】 : ................... 不是这个意思哈~~是我们初级阶段,水平不行,所以注释的比较多哈···
UZ机器人#7 · 2011/6/5
1.Delay_us是你自己改的吧。太长了。拿示波器配合IO翻转把这个函数重写了试试 2.三个IO口定义是P3^0这样的吗?我没用过52……不过我好像记得是P3.0这样的? 3.text&0x30这句话含义有点诡异。不过这不是大问题 暂时看到这么多问题,Delay_us函数问题比较大 【 在 Moster (Moster_nb) 的大作中提到: 】 : #include <reg52.h> : #include <intrins.h> : #define uint unsigned int : ...................
UZ机器人#8 · 2011/6/5
我看了Datasheet,你的程序除了我上面说的地方之外,有两个逻辑错误 1. for(i=0;i<8;i++) { //******************** dacsend = dach & 0x80; if(dacsend == 0x80) DAC_DIN=1; else DAC_DIN=0; dach = dach << 1; //******************** DAC_SCLK = 1; //下降沿 Delay_us(); DAC_SCLK = 0; } 这段,DAC_SCLK=0;之后还需要插入一个Delay_us();不然你出来的就不是方波了。 2. 你的SYNC线在发送完16位数据后没有拉高,也没有延时。 好好再看看Datasheet里的时序,然会对着示波器看CLK+Din以及CLK+SYNC的信号。 【 在 Moster (Moster_nb) 的大作中提到: 】 : #include <reg52.h> : #include <intrins.h> : #define uint unsigned int : ...................
Moster机器人#9 · 2011/6/5
【 在 UZ 的大作中提到: 】 : 我看了Datasheet,你的程序除了我上面说的地方之外,有两个逻辑错误 : 1. : for(i=0;i<8;i++) : ................... 我修改了···但是还是没有出现任何变化···